Docker安装使用入门
Docker
Docker的镜像和容器
An image is a lightweight, stand-alone, executable package that includes everything needed to run a piece of software, including the code, a runtime, libraries, environment variables, and config files.
镜像是一个环境完整的可执行的包
A container is a runtime instance of an image—what the image becomes in memory when actually executed. It runs completely isolated from the host environment by default, only accessing host files and ports if configured to do so.
把镜像加载到内存,就是一个容器,容器与宿主环境是隔离的,仅根据配置文件,与宿主环境通过宿主文件和端口交互
(容器不是虚拟机,容器直接运行在宿主系统环境里,不像虚拟机还要运行在虚拟的硬件里,所以容器的效率更高)
虚拟机运行在虚拟的软硬件环境里
虚拟机运行在虚拟的软硬件环境里(Docker官网图)
Docker的容器直接运行在宿主的系统环境里
Docker的容器直接运行在宿主的系统环境里(Docker官网图)
下载安装
版本选择
DockerToolBox:较早的版本,相当于一个安装指引
Docer for Mac:现行版本,可直接自动安装。又分DockerCE版(免费)和DockerEE版(收费企业版,功能更强大些)
安装地址见官网
Docker安装成功后的界面如下:
常用命令
- 在Docker中查看正在运行的容器
docker ps - 在Docker中查看所有容器(含已关闭的)
docker ps -a - 在Docker中打开/关闭某个容器
docker stop/start webserver(容器的名字) - 从Docker中移除容器
docker rm -f webserver - 从Docker中移除镜像
docker rmi imageid - 从Docker中检查容器详情
docker inspect 容器名 - 从Docker中进入容器
docker exec -it phpsvr /bin/bash - 从容器退回到Docker
exit - 在php容器中安装mysqli等
docker-php-ext-install pdo_mysql mysqli - 把容器保存为镜像
docker commit 容器ID 新镜像名称 - 卸载Docker(需要进入Docker的安装目录)
/Applications/Docker.app/Contents/MacOS/Docker --uninstall
搭建Nginx+Php开发环境
首先建立一个php容器(我的php代码均在web文件夹下,把本地web文件夹共享为php容器的/var/www/html根文件夹):
localhost:~ you$ docker run -d --name phpsvr
-v ~/web:/var/www/html
-v ~/web/usr/local/etc/php:/usr/local/etc/php
php:7.1.1-fpm
完成后,查看该容器
localhost:~ you$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19e7bb945169 php:7.1.1-fpm-alpine "docker-php-entryp..." 8 seconds ago Up 7 seconds 9000/tcp phpsvr
php7默认只安装了mysqlnd,需要扩展pdo,用exec进入该容器,用docker-php-ext-install扩展mysqli和pdo
yourMacBook-Pro:~ you$ docker exec -it phpsvr /bin/bash
/var/www/html # docker-php-ext-install pdo_mysql mysqli
...
(注意,有时候会报错找不到路径:usr/local/etc/php/conf.d/,需要在进入对应的映射目录,手动创建文件夹)
完成扩展后,退出容器,回到docker
/var/www/html # exit
yourMacBook-Pro:~ you $
接下来做一个nginx容器
写一个nginx的配置文件,文件位置放到tmp/docker/nginx/conf.d/default.conf,文件内容如下:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html; //从根目录处理html(能直接解析html)
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass phpsvr:9000; //把php经9000端口抛给phpsvr容器处理
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name; //映射到php容器的根目录(需要和nginx的根目录指向同一地址)
include fastcgi_params;
}
}
再建立nginx容器,并与php容器建立链接
yourMacBook-Pro:~ you$ docker run --name websvr
-p 80:80
-v ~/web:/usr/share/nginx/html
-v ~/web/tmp/docker/nginx/conf.d:/etc/nginx/conf.d
--link phpsvr nginx
nignx+php环境搭建完成
当然,还可以找一些组合式的镜像,比如php和web容器放在一起的
docker run --name svr -p 81:80 -v ~/web:/var/www registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5
不过这样的镜像不太符合Docker每个容器单一职责的理念,并不是很推荐使用