Docker學習筆記(五)-Docker Compose
背景
很多應用是很複雜的,需要多個容器共同支援,任何複雜的系統可能需要啟動的容器數量也很龐大,我們需要從Dockerfile build image或者docker hub拉取多個image,要建立並管理多個container,這個工作量是巨大的,docker compose應運而生。
Docker Compose是什麼
Docker Compose幫我們啟動錯綜複雜的容器,開發測試人員只要提供一份docker-compose.yml檔案即可,如圖:
- Docker Compose是一個基於docker的命令列工具
- 可以通過一個yml檔案定義多容器的docker應用
- 通過一條命令
docker-compose up
例如我們執行一個WordPress,需要執行兩個容器,一個執行WordPress,一個執行mysql服務,我們可以如下編寫docker-compose.yml:
version:3.4
services:
wordpress:
image:wordpress
ports:
--8080:80
environment:
WORDPRESS_DB_HOST:mysql
WORDPRESS_DB_PASSWORD:root
networks:
-mybridge
mysql:
image:mysql
environment:
MYSQL_ROOT_PASSWORD:root
MYSQL_DATABASE:wordpress
volumes:
-mysql-data:/var/lib/mysql
networks:
-mybridge
volumes:
mysql-data:
networks
mybridge:
driver:bridge
通過執行docker-compose up
docker-compose.yml有三個核心概念:
- services
- 一個service代表一個containe
- service的啟動類似docker run,可以指定network和volume
- volumes
- 定義容器使用的儲存
- networks
- 定義容器使用的網路
docker-compose up
和docker run
之間的關係,對於一個簡單的docker-compose.yml:
services
db:
image:mysql
volumes:
- "db-data:/var/lib/mysql/data"
networks:
- mynet
執行上述docker-compose.yml就相當於執行:
docker run -d --network mynet -v db-data:/var/lib/mysql/data mysql
Docker Compose安裝
(1)下載
sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
(2)賦予可執行許可權
sudo chmod +x /usr/local/bin/docker-compose
(3)測試安裝結果
docker-compose --version
Docker Compose相關命令
docker-compose up
(docker-compose up -d) # 後臺執行
docker-compose stop # 停止
docker-compose start # 啟動
docker-compose ps # 列出compose容器
docker-compose exec xxx bash # 進入compose容器內
docker-compose方便快速拓展,例如將某個服務中的web服務水平拓展成三個,可以通過如下命令:
docker-compose up --scale web=3 -d
容器編排-Docker Swarm簡介
以上所說的docker compose是建立在一個物理機器上的容器啟動,如果多個物理機執行多個容器的時候docker-compose就顯得有些捉襟見肘,這時候docker官方提供了Swarm來幫助我們管理多個容器,Docker Swarm是我們可以通過一個命令列管理多個物理機上的docker容器,如圖:
Docker Swarm可以幫助我們:
- 管理多個物理機的多個docker容器
- 方便容器的橫向拓展
- 自動回覆down掉的容器
- 在不影響業務的情況下更新容器
- 監控追蹤多個容器
- 保護隱私資料
- 等……
根據多個物理機我們可以搭建一個swarm叢集,通過swarm執行service相當於執行一個容器(和docker compose類似),會隨機在swarm節點上建立,對應命令為:
docker service create --name myswarm xxx/xxx
在容器編排技術中,Swarm,Kubernetes,Mesos各有所長,Swarm是docker原生的api,上手快速使用簡單。但是在功能和社群活躍度上比不上Kubernetes,Mesos,docker+kubernetes是目前大部分公司運維團隊容器編排使用的技術,後續會學習kubernetes。