本文所有的命令都是在宿主机上执行,不需要进入到容器,这也就是docker相对于虚机的优势之一。
1 在宿主机上安装docker engine
本文宿主机为ubuntu 18.04,直接执行命令
wenca@wenca-node1:~$ sudo snap install docker
wenca@wenca-node1:~$ sudo snap connect docker:home :home
查看docker服务状态,执行以下命令
wenca@wenca-node1:~$ sudo snap services
Service Startup Current Notes
docker.dockerd enabled active -
而不是以下命令,因为docker是由snap安装的。
wenca@wenca-node1:~$ sudo systemctl status docker
2 修改权限,让普通用户可以执行docker cli
wenca@wenca-node1:~$ ls -l /var/run/docker.sock
srw-rw---- 1 root docker 0 Aug 5 02:23 /var/run/docker.sock
确保owner为root,group为docker,否则可以通过以下命令修改
wenca@wenca-node1:~$ sudo chown root:docker /var/run/docker.sock
增加当前登陆的账号到docker组
wenca@wenca-node1:~$ sudo adduser $USER docker
The user `wenca' is already a member of `docker'.
退出当前会话,重新登陆,然后普通用户就可以执行docker命令,不需要增加sudo。
3 获取官方apache镜像
执行命令,获取镜像
wenca@wenca-node1:~$ docker pull httpd:latest
latest: Pulling from library/httpd
Digest: sha256:dc4c86bc90593c6e4c5b06872a7a363fc7d4eec99c5d6bfac881f7371adcb2c4
Status: Image is up to date for httpd:latest
查看获取镜像列表
wenca@wenca-node1:~$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest ee39f68eb241 3 weeks ago 154MB
4 拷贝apache镜像的相关文件到宿主机
在宿主机上新建一个空目录,并切换到新建的空目录
wenca@wenca-node1:~$ mkdir -p Servers/apache
wenca@wenca-node1:~$ cd Servers/apache
启动一个apache容器,在后台运行
wenca@wenca-node1:~/Servers/apache$ docker container run --name apache_temp -d httpd:latest
3c137b6b3c647fa06986caa9762842bcae19fe7fe2362be02109e5343d26cc58
wenca@wenca-node1:~/Servers/apache$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3c137b6b3c64 httpd:latest "httpd-foreground" 40 seconds ago Up 38 seconds 80/tcp apache_temp
复制容器里的相关文件和文件夹到宿主机
wenca@wenca-node1:~/Servers/apache$ docker cp apache_temp:/usr/local/apache2 ./
查看来自容器里的文件和文件夹
wenca@wenca-node1:~/Servers/apache$ ls
bin build cgi-bin conf error htdocs icons include logs modules
删除该容器
wenca@wenca-node1:~/Servers/apache$ docker container rm -f apache_temp
apache_temp
5 创建docker-compose.yml文件,运行apache容器
在当前路径下新建docker-compose.yml
wenca@wenca-node1:~/Servers/apache$ ls -l
total 44
drwxr-xr-x 2 wenca wenca 4096 Jul 10 15:22 bin
drwxr-xr-x 2 wenca wenca 4096 Jul 10 15:22 build
drwxr-xr-x 2 wenca wenca 4096 Jul 10 15:22 cgi-bin
drwxr-xr-x 4 wenca wenca 4096 Aug 7 02:06 conf
-rw-rw-r-- 1 wenca wenca 349 Aug 7 02:04 docker-compose.yml
drwxr-xr-x 3 wenca wenca 4096 Jul 10 15:22 error
drwxr-xr-x 2 wenca wenca 4096 Aug 7 02:07 htdocs
drwxr-xr-x 3 wenca wenca 4096 Jul 10 15:22 icons
drwxr-xr-x 2 wenca wenca 4096 Jul 10 15:22 include
drwxr-xr-x 2 wenca wenca 4096 Aug 7 02:04 logs
drwxr-xr-x 2 wenca wenca 4096 Jul 10 15:22 modules
docker-compose.yml文件内容是
version: "3.7"
services:
apache_testing:
image: httpd:latest
container_name: apache_testing
ports:
- 80:80
- 443:443
volumes:
- $PWD:/usr/local/apache2:rw
command: apachectl -D FOREGROUND
根据docker-compose.yml,启动apache容器
wenca@wenca-node1:~/Servers/apache$ docker-compose -f docker-compose.yml up -d
Creating apache_testing ... done
wenca@wenca-node1:~/Servers/apache$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0613d6822448 httpd:latest "apachectl -D FOREGR…" 17 seconds ago Up 14 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp apache_testing
可以在宿主机上直接更改conf/目录下的httpd.conf、httpd-ssl.conf等配置文件,完成自定义配置,然后再执行一遍以下命令,既可以让配置生效。
wenca@wenca-node1:~/Servers/apache$ docker-compose -f docker-compose.yml up -d
apache_testing is up-to-date
直接运行上面命令有时候会有问题,建议先删除老的容器,再执行以上命令。