Docker_學習筆記系列之docker-compose

docker官方提供的用於批量容器編排,compose是官方提供的開源項目node

主要的目的是實現一個應用同時須要多個子服務協同完成,根據docker-compose文件將不一樣的服務部署到不一樣的容器中python

單臺機器,編排多個容器【如一個項目須要:redis,mysql,Nginx,web,至關於4個關聯的容器】mysql

官網文檔:https://docs.docker.com/compose/git

1.docker-compose安裝github

# 下載
官方:sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

備用:sudo curl -L https://dn-dao-github-mirror.daocloud.io/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" > /usr/local/bin/docker-compose

# 賦權目錄
sudo chmod +x /usr/local/bin/docker-compose

# 查看
docker-compose --version

docker-compose version 1.17.1, build 6d101fb
docker-py version: 2.6.1
CPython version: 2.7.5
OpenSSL version: OpenSSL 1.0.2k-fips  26 Jan 2017

2.運用docker-compose三步驟web

Using Compose is basically a three-step process:

1. Define your app’s environment with a Dockerfile so it can be reproduced anywhere.

2. Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.

3. Run docker-compose up and Compose starts and runs your entire app.

3.docker-compose.yaml文件編排規則redis

官方文檔:https://docs.docker.com/compose/compose-file/sql

yaml文件版本和docker引擎的版本有關聯docker

dockerfile文件同樣都是鍵值對形式
# 第一層:版本層
version: '版本號'
# 第二層:服務層
services:
服務1:
# 服務配置
images
build
networks
volumes
服務2:
服務3:
# 第三層其它配置
volumes:
networks:
configs:

# 關鍵字介紹
version 版本號,不一樣的版本號對應着不一樣的docker引擎,默認向下兼容,詳細見上面的官方文檔
Services 服務名稱,定義不一樣的服務
networks 網絡,指定的網絡,每一個服務也能夠指定本身的網絡,前提該網絡必須先存在或者最外層networks定義的網絡,默認建立 bridge 網絡,若是使用相同的網絡,docker就容許服務間經過服務名互相通訊了
volumes 用於指引 Docker 來建立新的卷

# 經常使用配置範例以下
version: "3.8"
services:

redis:  # 將建立單獨的容器的redis服務
  image: redis:alpine    # 指定鏡像,通常是包含倉庫地址的鏡像名,會自動去倉庫拉取
  ports:
    - "6379:6379"        # 指定容器映射出的端口
    - "5000:5000"
  volumes:
    - type: volume        # 定義一個volume新卷,注意不管在宿主機仍是容器中修改內容都會實時反應到對應文件中
    source: myredis-data  # 定義卷名,經過docker volume inspect myredis-data 可查看卷名對應的宿主機目錄位置
    target: /app         # 定義上面的卷與redis服務中的/app目錄
  networks:
    - frontend        # 指定容器使用的網絡,必須在構建前先存在
  command: python /app/AsyncIssuedMain.py -type 2  # 指定容器啓動時啓動的命令,默認覆蓋dockerfile中cmd指定的命令
  secrets:
    - source: web_token  # 指定密鑰的名字,須要在外層已經定義存在的,以普通文件掛載到副本中,在宿主機的位置爲/run/secrets
    target: secret-name # 定義的密鑰文件名,即在副本中爲/run/secrets/secret-name
  stop_grace_period: 1m30s  # 定義優雅的停服時間,停容器時給id爲1的進程發送SIGTERM信號,默認10s,若是10s後沒有處理該信號,則會被SIGKILL信號強制殺掉
  deploy:        # 此節點是用於集羣模式在多臺服務器上建立多個副本即多個相同的容器不容的ip和容器名,提高併發
    replicas: 2  # 建立n個副本,默認爲1
    update_config:  # 定義在滾動升級update時的具體操做
      parallelism: 2  # 每次更新副本的數量
      failure_action: rollback   # 定義升級失敗後自動回滾,默認是pause升級失敗自動阻止其餘副本升級
    restart_policy:  # 定義容器異常退出時的策略
      condition: on-failure  # 容器以非0返回值退出,會當即重啓
      max_attempts: 3    # 最多重啓次數
      window: 120s  # 最多等待時間確認是否重啓成功
      delay: 10s   # 每次重啓的間隔時間
    placement:   # 定義本服務和主機屬性相關的副本中的限制
      max_replicas_per_node: 1   # 定義最大副本的數量
      constraints:
        - "node.role==manager"  # 表示只在管理節點上部署副本,支持副本id、hostname、引擎標籤、自定義標籤指定

db:
  build: .   # 基於當前yaml文件目錄下的dockerfile文件構建鏡像,默認鏡像名爲:compose文件目錄名_compose文件定義的服務名
  volumes:
    - /usr/db-data:/var/lib/postgresql/data  # 指定主機與容器對應的映射目錄
    - /configs/config.py:/app/config.py  # 宿主機目錄中的文件在容器第一次啓動時會覆蓋容器中對應文件名的內容
  networks:
    - backend
  secrets:
    - db_password  # 指定使用的密鑰
  environment:  # 在副本中添加環境變量
    DB_USER: SUN
    DB_PASSWD_FILE: /run/secrets/db_password  # 密碼的位置(掛載到每一個服務副本中的密鑰)
    DB_NAME: ORDER
  deploy:
    placement:   # 定義本服務和主機屬性相關的副本中的限制
      constraints:
- 'node.role == worker'   # 部署在工做節點上
# 自定義標籤須要經過docker node update --label-add db_center=yes 工做節點主機名,部署前提交建立
          - 'node.labels.db_center == yes'  # 且工做節點的自定義標籤爲db_center的機器上
networks:
frontend:
backend:
driver: overlay # 默認都是採用此網絡驅動
driver_opts:
encrypted: 'yes'  # 是否加密數據層,通常涉及數據庫支付等時根據需求配置,會增長開銷
volumes:
db-data:
secrets:  # 數據層加密時配置密鑰
db_password:
  external: true   # 密鑰定義爲stack部署前必須存在
web_token:
  file: ./devsecrets/payment_token   # 部署時按需建立密鑰,須要在主機路勁下的文件中配置所需的值,不安全
實戰部署wordpress博客程序

官方文檔:https://docs.docker.com/compose/wordpress/

經常使用命令

執行下面全部的命令前提是,切換到含有docker-compose.yml文件的目錄下

# 幫助命令
docker-compose --hlep
# 加-d之後臺運行服務
docker-compose up -d
# 按指定的文件構建容器,默認是當前目錄下的docker-compose.yml文件構建
docker-compose -f docker-compose-beijin.yml up -d
# 中止而且刪除服務,並刪掉全部的資源如容器、網絡等鏡像和映射不會刪
docker-compose down
# 查看服務運行狀況
docker-compose ps
# 查看服務的啓動日誌及服務標準輸出日誌
docker-compose logs
# 重啓服務
docker-compose restart
# 中止服務運行
docker-compose stop
# 查看容器中的運行的進程狀況,默認每一個服務的進程id爲1
docker-compose top
# stop掉服務了,刪除資源使用以下命令
docker-compose rm
相關文章
相關標籤/搜索