本文所有的命令都是在宿主機上執行,不需要進入到容器,這也就是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
直接運行上面命令有時候會有問題,建議先刪除老的容器,再執行以上命令。