1. 程式人生 > >Docker學習筆記(五)-Docker Compose

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
    就可以根據yml檔案的定義去建立管理多個容器

例如我們執行一個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

命令啟動yml檔案,就可以啟動兩個service(container)組成一個WordPress服務。

docker-compose.yml有三個核心概念

  • services
    • 一個service代表一個containe
    • service的啟動類似docker run,可以指定network和volume
  • volumes
    • 定義容器使用的儲存
  • networks
    • 定義容器使用的網路

docker-compose updocker 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。