1 Docker Compose
Docker Compose是一個單機的容器編排工具, 可以用來解決不同容器內(nèi)應用之間的依賴關(guān)系
并且可以代替docker命令對容器進行創(chuàng)建, 啟動和停止等手工操作
docker-compose項目是Docker官方的開源項目, 負責實現(xiàn)對docker容器集群的快速編排
其將管理的容器分為三層, 分別是工程(project), 服務(wù)(service),以及容器(container)
docker-compose只適用于單機的容器編排, 對于容器集群, 還需要使用k8s去實現(xiàn)
2 安裝和準備
2.1 安裝
docker compose多種安裝方式
1. pip安裝, 因為docker-compose本身就是Python開發(fā)的
2. 通過github下載對應版本, 安裝
3. 利用deb或yum安裝, 不過版本比較老舊
github安裝docker-compose
官方在github提供docker-compose資源, 而其本身就是一個二進制程序, 因此, 直接下載, 保存到PATH變量目錄, 修改權(quán)限即可使用
v1.26.2
root@docker-compose:~# ll -t /usr/sbin
total 24320
-rwxr-xr-x 1 root root 12254160 Feb 9 04:34 docker-compose* # 需要添加x權(quán)限, 本身是沒有執(zhí)行權(quán)限的
2.2 命令使用
常用選項:
-f File # 指定docker-compose使用的文件, 默認會使用同目錄下的docker-compose.yml文件
-p NAME # 指定項目名稱, 默認將使用當前所在目錄名稱作為項目名, 因此, 執(zhí)行docker-compose命令最好進入到對應的項目目錄下
常用命令:
build 構(gòu)建鏡像
bundle 從當前docker-compose文件生成一個以<當前目錄>為名稱的json格式的Docker Bundle備份文件
config -q 查看當前配置, 沒有錯誤不輸出任何信息
create 創(chuàng)建服務(wù), 較少使用
down 停止和刪除所有容器, 網(wǎng)絡(luò), 鏡像和數(shù)據(jù)卷
events 從容器接收實時事件可以指定json日志格式, 較少使用
exec 進入指定容器進行操作
help 顯示幫助信息
images 顯示鏡像信息, 較少使用
kill 強制終止運行中的容器
logs 查看容器的日志
pause 暫停服務(wù)
port 查看端口
ps 列出容器, 較少使用
pull 重新拉取鏡像, 鏡像發(fā)生變化后, 需要重新拉取鏡像, 較少使用
push 上傳鏡像
restart 重啟服務(wù), 較少使用
rm 刪除已經(jīng)停止的服務(wù)
run 一次性運行容器
scale 設(shè)置指定服務(wù)運行的容器個數(shù)
start 啟動服務(wù), 較少使用
stop 停止服務(wù), 較少使用
top 顯示容器運行狀態(tài)
unpause 取消暫停
up 創(chuàng)建并啟動容器, 較少使用
3 docker-compose 文件格式
docker-compose使用yaml文件, 格式要求嚴格的行首縮進
默認docker-compose命令會調(diào)用當前目錄下的docker-compose.yml的文件, 因此一般執(zhí)行docker-compose命令前, 先進入docker-compose.yml文件所在目錄
4 從docker compose啟動容器
4.1 創(chuàng)建docker compose文件
docker compose文件可在任意目錄, 創(chuàng)建文件名為docker-compose.yml配置文件, 要注意前后的縮進
root@docker-compose:~# mkdir /data/docker-compose
root@docker-compose:~# cd /data/docker-compose
root@docker-compose:/data/docker-compose# vim docker-compose.yml
server-nginx-web:
image: nginx
container_name: nginx-web
expose:
- 80
- 443
ports:
- "80:80"
- "443:443"
4.2 檢查配置和格式
root@docker-compose:/data/docker-compose# docker-compose config
services:
server-nginx-web:
container_name: nginx-web
expose:
- 80
- 443
image: nginx
network_mode: bridge
ports:
- 80:80/tcp
- 443:443/tcp
version: '2.1'
root@docker-compose:/data/docker-compose# docker-compose config -q
4.3 啟動容器
必須在docker-compose文件所在的目錄執(zhí)行
前臺啟動
docker-compose up
Status: Downloaded newer image for nginx:latest
Creating nginx-web ... done
Attaching to nginx-web
nginx-web | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
nginx-web | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
nginx-web | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
nginx-web | 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
nginx-web | 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
nginx-web | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
nginx-web | /docker-entrypoint.sh: Configuration complete; ready for start up
root@docker-compose:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ba4372e946d5 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp nginx-web
圖片.png
換到另一個終端, 進入容器
root@docker-compose:/data/docker-compose# docker-compose exec server-nginx-web bash
4.4 退出前臺運行的容器
ctrl + c
Stopping nginx-web ... done
root@docker-compose:/data/docker-compose# docker-compose ps
Name Command State Ports
-----------------------------------------------------------
nginx-web /docker-entrypoint.sh ngin ... Exit 0
4.5 啟動退出的容器
root@docker-compose:/data/docker-compose# docker-compose start
Starting server-nginx-web ... done
docker-compose up 前臺啟動
docker-composeu up -d 后臺啟動
4.6 退出容器
root@docker-compose:/data/docker-compose# docker-compose kill
Killing nginx-web ... done
root@docker-compose:/data/docker-compose# docker-compose ps
Name Command State Ports
-------------------------------------------------------------
nginx-web /docker-entrypoint.sh ngin ... Exit 137
4.7 刪除容器
4.7.1 只刪除停止的容器
root@docker-compose:/data/docker-compose# docker-compose rm
Going to remove nginx-web
Are you sure? [yN] y
Removing nginx-web ... done
4.7.2 直接刪除正在工作的容器
后臺啟動
root@docker-compose:/data/docker-compose# docker-compose up -d
Creating nginx-web ... done
root@docker-compose:/data/docker-compose# docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------
nginx-web /docker-entrypoint.sh ngin ... Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
停止并刪除容器
root@docker-compose:/data/docker-compose# docker-compose down
Stopping nginx-web ... done
Removing nginx-web ... done
root@docker-compose:/data/docker-compose# docker-compose ps
Name Command State Ports
------------------------------
鏡像也會被刪除
root@docker-compose:/data/docker-compose# docker-compose images
Container Repository Tag Image Id Size
----------------------------------------------
基礎(chǔ)鏡像還在, 所以在啟動,也無需重新拉鏡像, 但是是重新創(chuàng)建docker-compose
相當于利用拉取的鏡像, 在創(chuàng)建為docker-compose鏡像
[root@Ubuntu-1804-2:/apps/harbor]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.0.29/alpine-test/alpine v1.0 e50c909a8df2 11 days ago 5.61MB
alpine latest e50c909a8df2 11 days ago 5.61MB
goharbor/chartmuseum-photon v0.8.1-v1.7.6 ca4e65cc8cbf 17 months ago 114MB
goharbor/harbor-migrator v1.7.6 bd65976b2563 17 months ago 680MB
goharbor/redis-photon v1.7.6 477066fd0e02 17 months ago 109MB
goharbor/clair-photon v2.0.8-v1.7.6 a65550304aa5 17 months ago 165MB
goharbor/notary-server-photon v0.6.1-v1.7.6 1bfca6aac750 17 months ago 136MB
goharbor/notary-signer-photon v0.6.1-v1.7.6 8535add7bfa5 17 months ago 133MB
goharbor/harbor-registryctl v1.7.6 bb06dcda87fa 17 months ago 103MB
goharbor/registry-photon v2.6.2-v1.7.6 8fa930eedbea 17 months ago 87.7MB
goharbor/nginx-photon v1.7.6 fea7c162d250 17 months ago 37MB
goharbor/harbor-log v1.7.6 f9b50bc6e136 17 months ago 82.6MB
goharbor/harbor-jobservice v1.7.6 cfac2ab2d45a 17 months ago 85.1MB
goharbor/harbor-core v1.7.6 37379145c410 17 months ago 96.6MB
goharbor/harbor-portal v1.7.6 eafab006217d 17 months ago 41.7MB
goharbor/harbor-adminserver v1.7.6 2d91210e25ed 17 months ago 73.3MB
goharbor/harbor-db v1.7.6 f28a4ae69c04 17 months ago 146MB
4.8 后臺執(zhí)行
root@docker-compose:/data/docker-compose# docker-compose up -d
Creating nginx-web ... done
root@docker-compose:/data/docker-compose# docker-compose images
Container Repository Tag Image Id Size
-------------------------------------------------------
nginx-web nginx latest f6d0b4767a6c 133 MB
4.9 停止, 啟動, 重啟
root@docker-compose:/data/docker-compose# docker-compose stop
Stopping nginx-web ... done
root@docker-compose:/data/docker-compose# docker-compose start
Starting server-nginx-web ... done
root@docker-compose:/data/docker-compose# docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------
nginx-web /docker-entrypoint.sh ngin ... Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
root@docker-compose:/data/docker-compose# docker-compose restart
Restarting nginx-web ... done
root@docker-compose:/data/docker-compose# docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------
nginx-web /docker-entrypoint.sh ngin ... Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
4.10 日志查看
json格式查看
root@docker-compose:/data/docker-compose# docker-compose restart
Restarting nginx-web ... done
root@docker-compose:/data/docker-compose# docker-compose events --json
{"time": "2021-02-09T05:35:15.211387", "type": "container", "action": "kill", "id": "aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40", "service": "server-nginx-web", "attributes": {"name": "nginx-web", "image": "nginx"}}
{"time": "2021-02-09T05:35:15.282536", "type": "container", "action": "die", "id": "aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40", "service": "server-nginx-web", "attributes": {"name": "nginx-web", "image": "nginx"}}
{"time": "2021-02-09T05:35:15.405425", "type": "container", "action": "stop", "id": "aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40", "service": "server-nginx-web", "attributes": {"name": "nginx-web", "image": "nginx"}}
{"time": "2021-02-09T05:35:16.433548", "type": "container", "action": "start", "id": "aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40", "service": "server-nginx-web", "attributes": {"name": "nginx-web", "image": "nginx"}}
{"time": "2021-02-09T05:35:16.433600", "type": "container", "action": "restart", "id": "aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40", "service": "server-nginx-web", "attributes": {"name": "nginx-web", "image": "nginx"}}
默認格式查看
root@docker-compose:/data/docker-compose# docker-compose events
2021-02-09 05:36:07.859265 container kill aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40 (image=nginx, name=nginx-web)
2021-02-09 05:36:07.961174 container die aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40 (image=nginx, name=nginx-web)
2021-02-09 05:36:08.132842 container stop aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40 (image=nginx, name=nginx-web)
2021-02-09 05:36:08.893008 container start aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40 (image=nginx, name=nginx-web)
2021-02-09 05:36:08.893067 container restart aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40 (image=nginx, name=nginx-web)
4.11 指定同時啟動的容器的數(shù)量
通過docker-compose文件可以同時啟動多個不同服務(wù)的容器
root@docker-compose:/data/docker-compose# vim docker-compose.yml
server-nginx-web:
image: nginx
#container_name: nginx-web # 同時啟動多個同一鏡像的容器, 不要自定容器名稱, 否則會沖突
expose:
- 80
- 443
#ports: # 同時啟動多個同一鏡像的容器, 不要指定端口號, 否則會沖突
# - "80:80"
# - "443:443"
#再添加一個服務(wù)
server-tomcat-web:
image: tomcat
--scale用來指定要啟動的各種服務(wù)容器的數(shù)量, 如果, 沒有指定--scale, 而yml文件有寫了服務(wù), 那么就會默認啟動一個
root@docker-compose:/data/docker-compose# docker-compose up -d --scale server-nginx-web=2
root@docker-compose:/data/docker-compose# docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------
docker-compose_server-nginx-web_1 /docker-entrypoint.sh ngin ... Up 443/tcp, 80/tcp
docker-compose_server-nginx-web_2 /docker-entrypoint.sh ngin ... Up 443/tcp, 80/tcp
docker-compose_server-tomcat-web_1 catalina.sh run Up 8080/tcp