Docker筆記(十二):Docker Compose入門

1. Compose簡介

Docker Compose是Docker官方的用於對Docker容器集羣實現編排,快速部署分佈式應用的開源項目。Docker Compose經過docker-compose.yml文件來定義一組相關聯的應用容器的編排,這組相關聯的應用容器通常經過互相交互做爲一個總體項目提供服務,好比一個Web項目,既包含業務服務容器,也包含數據庫服務容器與緩存服務容器等。mysql

Compose中兩個重要的概念:git

  • 服務(service): 包含多個運行相同鏡像的容器實例github

  • 項目(project): 由一組關聯的應用容器(服務)組成一個完整的業務服務單元,在docker-compose.yml(即Compose的模板文件)中定義 web

Copmpose項目由Python編寫,經過調用Docker服務提供的API來對容器進行管理。Compose默認的管理對象是項目,能夠經過子命令對項目中的一組容器進行生命週期管理。redis

 

2. Compose安裝

在macOS與Win10下,Docker安裝自帶了docker-compose的二進制文件,能夠直接使用。
Linux下,sql

[root@iZwz ~]# curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

[root@iZwz ~]# chmod +x /usr/local/bin/docker-compose

 

驗證 docker

[root@iZwz ~]# docker-compose version
docker-compose version 1.24.1, build 4667896b
docker-py version: 3.7.3
CPython version: 3.6.8
OpenSSL version: OpenSSL 1.1.0j  20 Nov 2018

 

 

3. Compose模板文件 數據庫

模板文件是使用Compose的核心,定義了一組相關聯的應用容器,使之構成一個項目,裏面大部分指令跟docker run相關參數的含義是相似的。默認的模板文件名稱爲docker-compose.yml,爲YAML格式,如數組

version: '3'
services:
    web:
        build: .
        depends_on:
            - db
            - redis
    
    redis:
        image: redis
    
    db:
        image: mysql

 

Compose模板文件能夠動態讀取主機的系統環境變量與當前目錄下.env文件中的變量,經過${xx}引用。 緩存

 

模板文件中的經常使用指令說明

  • build
    指定Dockerfile所在文件夾的路徑,能夠是絕對路徑或相對模板文件的路徑。Compose將會自動構建鏡像,而後使用該鏡像。也能夠經過以下方式詳細指定。cache_from指定構建鏡像的緩存

    build:
        context: ./dir
        dockerfile: Dockerfile-alternate
        args:
            buildno: 1
        cache_from:
            - alpine:latest
            - corp/web_app:3.14
  • command
    覆蓋容器啓動後默認執行的命令。

  • container_name
    Compose默認會使用 項目名稱服務名稱序號的格式做爲容器名稱。通常不須要特別指定,由於指定具體名稱後,服務將沒法進行擴展(scale),由於不容許多個容器具備相同的名稱。

  • depends_on
    解決容器的依賴、啓動前後順序的問題,可是服務不會等待依賴的服務「徹底啓動」以後才啓動。

  • env_file
    指定環境變量定義文件,能夠爲單獨文件路徑或列表,當與environment中有同名衝突時,以environment爲準。

  • environment
    設置環境變量,支持數組或字典兩種格式。只有名稱的變量會自動獲取運行Compose主機上的對應變量的值,以防止信息泄露

    environment:
        RACK_ENV: development
        SESSION_SECRET:
    
    environment:
        - RACK_ENV=development
        - SESSION_SECRET
  • expose
    暴露端口,不映射到宿主機,只被鏈接的服務訪問

  • healthcheck
    經過命令檢查容器是否健康運行,如

    healthcheck:
        test: ["CMD", "curl", "-f", "http://localhost"]
        interval: 1m30s
        timeout: 10s
        retries: 3
  • image
    指定鏡像名稱或鏡像ID,全部服務都必要要麼經過build,要麼經過image來指定鏡像。

  • labels
    爲容器添加Docker元數據信息

  • network_mode
    設置網絡模式,與docker run的–network同樣,如bridge,host,none等,也能夠是以下形式

    network_mode: "service:[service name]"
    network_mode: "container:[container name/id]"
  • networks
    配置容器鏈接的網絡,如

    services:
        service1:
            networks:
                - some-network
                - other-network
    networks:
        some-network:
        other-network:
  • ports
    暴露端口信息,遵循端口映射規則。

  • secrets
    存儲敏感數據,如密碼等信息

    mysql:
        image: mysql
        environment:
            MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
        secrets:
            - db_root_password
            - my_other_secret
    
    secrets:
        my_secret:
            file: ./my_secret.txt
        my_other_secret:
            external: true
  • volumes
    容器的數據卷掛在路徑設置,能夠設置多個,與docker -v相似,如

    volumes:
        - /var/lib/mysql
        - cache/:/tmp/cache
        - ~/configs:/etc/configs/:ro

     

 

4. Compose命令

Compose命令默認是針對項目自己,也能夠指定爲項目中的服務或容器。
docker-compose 命令的基本使用格式爲

docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]

 

命令選項 

  • -f, –file 指定模板文件,默認爲docker-compose.yml,可屢次指定

  • -p, –project-name 指定項目名稱,默認爲所在目錄名稱

  • –x-networking 使用Docker的可插拔網絡特性

  • –x-networking-driver 指定網絡驅動,默認爲bridge

  • –verbose 輸出更多調試信息

  • -v, –version 打印版本信息

 

命令使用說明

  • build 格式爲docker-compose build [options] [SERVICE...],構建項目中的服務容器,選項包括 –force-rm(刪除構建過程當中的臨時容器),–no-cache(構建鏡像過程不使用cache),–pull(始終嘗試經過pull來獲取最新版本鏡像)

  • config 驗證模板文件格式是否正確

  • down 中止up命令啓動的容器,並移除網絡

  • exec 進入指定的容器

  • images 列出compose文件中包含的鏡像

  • kill 格式爲docker-compose kill [options] [SERVICE...],強制中止服務容器

  • logs 格式爲docker-compose logs [options] [SERVICE...],查看服務容器的輸出

  • pause 格式爲docker-compose pause [SERVICE...], 暫停一個服務容器

  • port 格式爲docker-compose port [options] SERVICE PRIVATE_PORT,打印容器端口所映射的公共端口,–index=index(指定容器序號,默認爲1)

  • ps 格式爲docker-compose ps [options] [SERVICE...],列出項目中目前的全部容器

  • pull 格式爲docker-compose pull [options] [SERVICE...],拉去服務依賴的鏡像

  • push 推送服務依賴的鏡像到Docker鏡像倉庫

  • restart 重啓項目中服務,格式爲docker-compose restart [options] [SERVICE...]

  • rm 刪除全部中止的服務容器,格式docker-compose rm [options] [SERVICE...], -f(強制直接刪除)

  • run 在指定服務上執行一個命令,不會自動建立端口,以免衝突

  • scale 格式docker-compose scale [options] [SERVICE=NUM...],設置指定服務運行的容器個數,少則新建,多則刪除

  • start 格式docker-compose start [SERVICE...],啓動已經存在的服務容器

  • stop 中止運行中的容器

  • top 查看各個服務容器內運行的進程

  • unpause 格式docker-compose unpause [SERVICE...],恢復處於暫停狀態的服務

  • up 格式docker-compose up [options] [SERVICE...],嘗試自動完成包括構建鏡像,建立服務,啓動服務,關聯服務相關容器的一系列操做,大部分時候均可以經過該命令來啓動一個項目,-d(在後臺啓動全部容器)。docker-compose up --no-recreate只啓動處於中止狀態的容器,忽略已經運行的服務,docker-compose up --no-deps -d <SERVICE_NAME>從新建立服務,但不影響到它所依賴的服務

 

5. 總結

Compose是Docker官方的服務容器編排工具,對一些簡單的但包含多個組件的服務能夠藉助Compose來快速搭建環境,如開源的錯誤監控系統sentry,包括sentry服務自己,redis,postgres。對於業務生產環境,則通常使用功能更爲豐富的第三方編排系統如Kubernetes來部署。

 


歡迎關注個人微信公衆號:jboost-ksxy

相關文章
相關標籤/搜索