Docker 1.13 編排能力進化
摘要: 經過了近6個月的磨礪,Docker 1.13在2017年1月發布,它標誌著 Docker 內置編排能力的進一步成熟。本文將介紹Docker在編排方面的新進展。
經過了近6個月的磨礪,Docker 1.13在2017年1月發布,它標誌著 Docker 內置編排能力的進一步成熟。本文將介紹Docker在編排方面的新進展。
簡介
去年6月,Docker宣布在1.12版的引擎中內置編排能力,也就是 Swarm Mode,在容器之上引入了服務(service
)的概念,也實驗性的推出了應用棧(stack
)來支持多服務應用的部署管理。但是 Docker 1.12 版本,服務的開發和操作缺乏類似Docker Compose
docker-compose bundle
命令將已有 docker-compose.yml
轉換為 Distributed Application Bundle
才能在Swarm mode中部署,非常不便,而且更為嚴重的是很多功能不支持,導致很多現有編排模板無法直接使用。
在2017年1月發布的 Docker 1.13版本中,Swarm mode迅速成熟,相應的工具支持也進一步完善。 Docker Compose v3 規範,已經全面支持 Swarm mode 概念。而且從 1.13 開始,Docker 命令行工具支持直接使用 v3 版本的 docker-compose.yml
stack
)部署管理,這大大簡化了容器編排使用的復雜性。
操作方式和功能簡要對比
Docker Compose v1/v2 | Docker 1.13 | |
---|---|---|
啟動服務 | docker-compose up -d |
docker stack deploy --compose-file=docker-compose.yml |
伸縮服務 | docker-compose scale xxx=n |
docker service scale xxx=n |
停止服務 | docker-compose down |
docker stack rm |
跨宿主機 | 否 | 是 |
準備實驗
單機環境
- 首先你需要安裝 Docker 1.13 或以上版本的Docker for Windows/Mac/Linux
- 然後執行
docker swarm init
命令開啟 Docker Swarm 模式
Vagrant多機測試環境
- 可以參見 https://github.com/denverdino/docker-swarm-mode-vagrant 提供的安裝方法
阿裏雲環境
- 使用阿裏雲 Docker Machine 的 ECS 驅動,請參見 https://yq.aliyun.com/articles/55973#2 文中內容
Wordpress示例
下面的 wordpress.yml
定義了包含兩個服務的Wordpress應用
web
服務:部署3個實例的wordpress:4
容器mysql
服務:部署1個實例的mysql:5.7
容器
version: ‘3‘
services:
web:
image: wordpress:4
environment:
- WORDPRESS_DB_PASSWORD=password
- WORDPRESS_AUTH_KEY=changeme
- WORDPRESS_SECURE_AUTH_KEY=changeme
- WORDPRESS_LOGGED_IN_KEY=changeme
- WORDPRESS_NONCE_KEY=changeme
- WORDPRESS_AUTH_SALT=changeme
- WORDPRESS_SECURE_AUTH_SALT=changeme
- WORDPRESS_LOGGED_IN_SALT=changeme
- WORDPRESS_NONCE_SALT=changeme
- WORDPRESS_NONCE_AA=changeme
ports:
- 80:80
depends_on:
- mysql
deploy:
replicas: 3
restart_policy:
condition: on-failure
mysql:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=password
deploy:
restart_policy:
condition: on-failure
使用如下命令進行操作
yili@yili-mbp:~$ docker stack deploy -c wordpress.yml wordpress
Creating network wordpress_default
Creating service wordpress_web
Creating service wordpress_mysql
yili@yili-mbp:~$ docker stack ls
NAME SERVICES
wordpress 2
yili@yili-mbp:~$ docker stack services wordpress
ID NAME MODE REPLICAS IMAGE
fc7xhyqdu2b8 wordpress_mysql replicated 1/1 mysql:5.7
j9a61eaaxi8c wordpress_web replicated 3/3 wordpress:4
然後就可以通過瀏覽器來訪問 Wordpress 應用了
Redis 集群示例
下面的 redis.yml
定義了包含三個服務的Redis集群應用
redis-master
服務:部署1個實例的redis:3
容器作為初始的Redis masterredis-slave
服務:部署2個實例的redis:3
容器作為Redis slavesentinel
服務:部署3個實例的redis-sentinel:5.7
容器作為集群的sentinel
version: "3"
services:
redis-master:
image: redis:3
deploy:
restart_policy:
condition: on-failure
redis-slave:
image: redis:3
command: redis-server --slaveof redis-master 6379
deploy:
replicas: 2
restart_policy:
condition: on-failure
sentinel:
image: registry.aliyuncs.com/acs-sample/redis-sentinel:3
environment:
- SENTINEL_DOWN_AFTER=5000
- SENTINEL_FAILOVER=5000
deploy:
replicas: 3
restart_policy:
condition: on-failure
使用如下命令進行操作
[email protected]:~$ docker stack deploy -c redis.yml redis
Creating network redis_default
Creating service redis_sentinel
Creating service redis_redis-master
Creating service redis_redis-slave
[email protected]:~$ docker stack services redis
ID NAME MODE REPLICAS IMAGE
kbg7t2fs625f redis_redis-master replicated 1/1 redis:3
num1qjudt947 redis_redis-slave replicated 2/2 redis:3
xv24uy1cqu7u redis_sentinel replicated 3/3 registry.aliyuncs.com/acs-sample/redis-sentinel:3
註:關於利用 Docker 方式搭建 Redis 集群,請參考雲棲文章
Docker Compose v3 規範簡析
Docker Compose v3
和 v2
模板文件都采用yaml格式,但是語法上存在一定差距
首先,使用version: "3"
或 version: "3.1"
(Docker 1.13.1) 作為版本聲明
其次,由於 Swarm mode 中網絡的特殊性,Compose模板中一些聲明比如 expose
和 links
會被忽略。註意:不能再使用 link 定義的網絡別名來進行容器互聯,可以使用服務名連接。
另外, volumes_from
不再支持,只能使用命名數據卷來實現容器數據的持久化和共享;
v3 中引入了 deploy
指令,可對Swarm mode中服務部署的進行細粒度控制,包括
resources
:定義cpu_shares
,cpu_quota
,cpuset
,mem_limit
,memswap_limit
等容器資源控制。(v1/v2中相應指令不再支持)mode
:支持global
和replicated
(缺省) 模式的服務;replicas
:定義replicated
模式的服務的復本數量placement
:定義服務容器的部署放置約束條件update_config
:定義服務的更新方式restart_policy
:定義服務的重啟條件 (v1/v2中restart
指令不再支持)service
:定義服務的標簽
Docker 命令行和 Docker Compose 的不同
雖然 Docker CLI 已經提供了對Docker Compose v3模板的支持。但是 Docker Compose 依然可以作為一個開發工具獨立使用,並同時繼續支持v1/v2/v2.1等版本已有編排模板。但是當利用 docker-compose up
或 docker-compose run
來部署v3模板時,模板中的 deploy
指令將被忽略
Docker CLI只支持v3模板,但是不支持模板中的 build
指令,只允許構建好的鏡像來啟動服務的容器。
總結
本文介紹了Docker 1.13引入的Docker Compose v3 規範和操作方式,也對比了不同版本之間的差異,幫助用戶實現應用的遷移。
隨著Docker Swarm mode的逐漸成熟,阿裏雲容器服務也在積極開發對其的全面支持和與阿裏雲產品的對接,相關功能將會在不久推出,為用戶在雲中提供服務化的容器應用架構。
Docker 1.13 編排能力進化