本文所有的命令都是在宿主机上执行,不需要进入到容器,这也就是docker相对于虚机的优势之一。
1 docker环境准备
包括在宿主机上安装docker engine,配置让普通用户直接运行docker的命令,而不是以root身份运行,比如加sudo执行,这一步还是比较重要。
2 获取官方nginx镜像
执行命令,获取镜像
wenca@wenca-node1:~$ docker pull nginx:latest
latest: Pulling from library/nginx
Digest: sha256:eb3320e2f9ca409b7c0aa71aea3cf7ce7d018f03a372564dbdb023646958770b
Status: Image is up to date for nginx:latest
查看获取镜像列表
wenca@wenca-node1:~$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest e445ab08b2be 2 weeks ago 126MB
3 拷贝nginx镜像的相关文件到宿主机
在宿主机上新建一个空目录,并切换到新建的空目录
wenca@wenca-node1:~$ mkdir -p Servers/nginx
wenca@wenca-node1:~$ cd Servers/nginx
启动一个nginx容器,在后台运行
wenca@wenca-node1:~$ docker container run --name nginx_temp -d nginx:latest
6925c9c5a5df826c2cee40ae1e196ae581ab3bb3bd31714ffaa4ed449f4ace1c
wenca@wenca-node1:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6925c9c5a5df nginx:latest "nginx -g 'daemon of…" 47 seconds ago Up 44 seconds 80/tcp nginx_temp
复制容器里的相关文件和文件夹到宿主机
docker cp nginx_temp:/var/log/nginx ./logs
docker cp nginx_temp:/etc/nginx ./conf
docker cp nginx_temp:/usr/lib/nginx ./lib
docker cp nginx_temp:/usr/share/nginx ./document
查看来自容器里的文件和文件夹
wenca@wenca-node1:~/Servers/nginx$ ls
conf document lib logs
删除该容器
wenca@wenca-node1:~/Servers/nginx$ docker container rm -f nginx_temp
nginx_temp
4 创建docker-compose.yml文件,运行nginx容器
在当前路径下新建docker-compose.yml
wenca@wenca-node1:~/Servers/nginx$ ls -l
total 28
drwxrwxr-x 6 wenca wenca 4096 Aug 7 08:59 ./
drwxrwxr-x 5 wenca wenca 4096 Aug 7 06:05 ../
drwxr-xr-x 3 wenca wenca 4096 Aug 7 09:16 conf/
-rw-rw-r-- 1 wenca wenca 553 Aug 7 08:41 docker-compose.yml
drwxr-xr-x 3 wenca wenca 4096 Jul 23 19:59 document/
drwxr-xr-x 3 wenca wenca 4096 Jul 23 19:59 lib/
drwxr-xr-x 2 wenca wenca 4096 Jul 23 19:59 logs/
docker-compose.yml文件内容是
version: "3.7"
services:
nginx_testing:
image: nginx:latest
container_name: nginx_testing
ports:
- 80:80
- 443:443
volumes:
- $PWD/logs:/var/log/nginx:rw
- $PWD/document:/usr/share/nginx:ro
- $PWD/lib:/usr/lib/nginx:ro
- $PWD/conf:/etc/nginx:ro
command: [nginx, '-g', 'daemon off;']
根据docker-compose.yml,启动nginx容器
wenca@wenca-node1:~/Servers/nginx$ docker-compose -f docker-compose.yml up -d
Creating nginx_testing ... done
wenca@wenca-node1:~/Servers/nginx$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
90e6a3ecd6e1 nginx:latest "nginx -g 'daemon of…" 16 hours ago Up 16 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp nginx_testing
可以在宿主机上直接更改conf/目录下的nginx.conf, conf/conf.d/default.conf等配置文件,完成自定义配置,然后再执行一遍以下命令,既可以让配置生效。
wenca@wenca-node1:~/Servers/nginx$ docker-compose -f docker-compose.yml up -d
nginx_testing is up-to-date
直接运行上面命令有时候会有问题,建议先删除老的容器,再执行以上命令。本人遇到过直接运行上面命令,配置不生效的情况。