Docker 1.13 編排能力進化

摘要: 通過了近6個月的磨礪,Docker 1.13在2017年1月發佈,它標誌着 Docker 內置編排能力的進一步成熟。本文將介紹Docker在編排方面的新進展。mysql

14868225775139

通過了近6個月的磨礪,Docker 1.13在2017年1月發佈,它標誌着 Docker 內置編排能力的進一步成熟。本文將介紹Docker在編排方面的新進展。git

簡介

去年6月,Docker宣佈在1.12版的引擎中內置編排能力,也就是 Swarm Mode,在容器之上引入了服務(service)的概念,也實驗性的推出了應用棧(stack)來支持多服務應用的部署管理。可是 Docker 1.12 版本,服務的開發和操做缺少相似Docker Compose工具的支持,並且因爲Docker Compose v1/v2是面向容器編排設計,和Swarm Mode中的概念上有不少不一樣。只能夠用 docker-compose bundle 命令將已有 docker-compose.yml 轉換爲 Distributed Application Bundle 才能在Swarm mode中部署,很是不便,並且更爲嚴重的是不少功能不支持,致使不少現有編排模板沒法直接使用。github

在2017年1月發佈的 Docker 1.13版本中,Swarm mode迅速成熟,相應的工具支持也進一步完善。 Docker Compose v3 規範,已經全面支持 Swarm mode 概念。並且從 1.13 開始,Docker 命令行工具支持直接使用 v3 版本的 docker-compose.yml 文件來進行應用棧(stack)部署管理,這大大簡化了容器編排使用的複雜性。web

操做方式和功能簡要對比

  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多機測試環境

阿里雲環境

Wordpress示例

下面的 wordpress.yml 定義了包含兩個服務的Wordpress應用redis

  • 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 

使用以下命令進行操做sql

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 應用了docker

14868171810564

Redis 集羣示例

下面的 redis.yml 定義了包含三個服務的Redis集羣應用瀏覽器

  • redis-master服務:部署1個實例的redis:3容器做爲初始的Redis master
  • redis-slave服務:部署2個實例的redis:3容器做爲Redis slave
  • sentinel服務:部署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 

使用以下命令進行操做ruby

yili@yili-mbp:~$ 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 yili@yili-mbp:~$ 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_sharescpu_quotacpusetmem_limitmemswap_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的逐漸成熟,阿里雲容器服務也在積極開發對其的全面支持和與阿里雲產品的對接,相關功能將會在不久推出,爲用戶在雲中提供服務化的容器應用架構。

相關文章
相關標籤/搜索