# docker-compose ## compose安裝 ### Compose 簡介 Compose 是用於定義和運行多容器 Docker 應用程式的工具。通過 Compose,您可以使用 YML 文件來配置應用程式需要的所有服務。然後,使用一個命令,就可以從 YML 文件配置中創建並啟動所有服 ...
docker-compose
compose安裝
Compose 簡介
Compose 是用於定義和運行多容器 Docker 應用程式的工具。通過 Compose,您可以使用 YML 文件來配置應用程式需要的所有服務。然後,使用一個命令,就可以從 YML 文件配置中創建並啟動所有服務。
Compose 使用的三個步驟:
- 使用 Dockerfile 定義應用程式的環境。
- 使用 docker-compose.yml 定義構成應用程式的服務,這樣它們可以在隔離環境中一起運行。
- 最後,執行 docker-compose up 命令來啟動並運行整個應用程式。
Linux 上我們可以從 Github 上下載它的二進位包來使用,最新發行的版本地址。運行以下命令以下載 Docker Compose 的當前穩定版本:
curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
要安裝其他版本的 Compose,請替換 v2.20.2。
將可執行許可權應用於二進位文件:
sudo chmod +x /usr/local/bin/docker-compose
創建軟鏈:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
測試是否安裝成功:
docker-compose version
nginx示例
docker-compose.yml配置案例如下,官方文檔
version: "3.8"
services:
nginx-demo:
image: nginx
restart: always
networks:
- network_test
volumes:
- /Users/wandaren/develop/docker-nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /Users/wandaren/develop/docker-nginx/log:/var/log/nginx
- /Users/wandaren/develop/docker-nginx/html:/usr/share/nginx/html
environment:
APP_ENV: dev
dns: 114.114.115.115
ports:
- 80
networks:
network_test:
driver: bridge
ipam:
driver: default
config:
- subnet: 188.18.0.0/16
啟動:
# 創建
docker-compose create nginx-demo
# 載入配置並啟動
docker-compose up -d nginx-demo
# 重新讀取配置內容
docker-compose up -d
# 啟動
docker-compose start nginx-demo
# 停止
docker-compose stop nginx-demo
# 停止並刪除
docker-compose down nginx-demo
動態擴容
docker-compose up -d --scale nginx-demo=2
Swarm(分散式)
簡介
Docker Swarm 是 Docker 的集群管理工具。它將 Docker 主機池轉變為單個虛擬 Docker 主機。 Docker Swarm 提供了標準的 Docker API,所有任何已經與 Docker 守護程式通信的工具都可以使用 Swarm 輕鬆地擴展到多個主機。
支持的工具包括但不限於以下各項:
- Dokku
- Docker Compose
- Docker Machine
- Jenkins
原理
如下圖所示,swarm 集群由管理節點(manager)和工作節點(work node)構成。
- swarm mananger:負責整個集群的管理工作包括集群配置、服務管理等所有跟集群有關的工作。
- work node:即圖中的 available node,主要負責運行相應的服務來執行任務(task)。
使用
1、創建 swarm 集群管理節點(manager)
初始化 swarm 集群,進行初始化的這台機器,就是集群的管理節點。
# 172.16.156.158為虛擬機本機ip
docker swarm init --advertise-addr 172.16.156.158
以上輸出,證明已經初始化成功。需要把以下這行複製出來,在增加工作節點時會用到:
docker swarm join --token SWMTKN-1-4dq96unmcsz9v0m99vapdtegt5y0kym3ths69r6enlgofbgja7-7ml2skxa3y5x5cjly8uxfwoae 172.16.156.158:2377
2、創建 swarm 集群工作節點(worker)
分別進入兩個機器里,指定添加至上一步中創建的集群,這裡會用到上一步複製的內容。
3、查看集群信息
進入管理節點,執行:docker info 可以查看當前集群的信息。
docker info
通過畫紅圈的地方,可以知道當前運行的集群中,有三個節點,其中有一個是管理節點。
進入管理節點,執行:docker node ls 查看集群信息:
docker node ls
4、部署服務到集群中
註意:跟集群管理有關的任何操作,都是在管理節點上操作的。
以下例子,在一個工作節點上創建一個名為 nginx_swarm 的nginx服務,這裡是隨機指派給一個工作節點:
docker service create --replicas 1 -p 80:80 --name nginx_swarm nginx
5、查看服務部署情況
查看 nginx_swarm 服務運行在哪個節點上,可以看到目前是在 wq 節點:
docker service ps nginx_swarm
查看 nginx_swarm 部署的具體信息:
docker service inspect --pretty nginx_swarm
6、擴展集群服務
調整節點個數
# docker service update --replicas <num> <service id/name>
docker service update --replicas 2 nginx_swarm
服務擴展
docker service scale nginx_swarm=3
7、滾動升級服務
以下實例,我們將介紹 redis 版本如何滾動升級至更高版本。
創建一個 3.0.6 版本的 redis。
docker service create --replicas 1 --name redis --update-delay 10s redis:3.0.6
滾動升級 redis
docker service update --image redis:3.0.7 redis
8、刪除服務
docker service rm nginx_swarm
9、停止某個節點接收新的任務
停止節點001
docker node update --availability drain 001
註意:001 狀態變為 Drain。不會影響到集群的服務,只是 001 節點不再接收新的任務,集群的負載能力有所下降。
可以通過以下命令重新激活節點:
docker node update --availability active 001
10、節點退出集群
docker swarm leave
刪除退出集群的節點
docker node rm sysn25urcm4elywoiexiov431