Docker——Docker Compose

介紹

容許用戶經過一個單獨的 docker-compose.yml 模板文件(YAML 格式)來定義一組相關聯的應用容器爲一個項目(project)。php

兩個重要的概念:mysql

  • 服務 (service):一個應用容器,實際上能夠運行多個相同鏡像的實例。
  • 項目 (project):由一組關聯的應用容器組成的一個完整業務單元。

一個項目能夠由多個服務(容器)關聯而成,Compose 面向項目進行管理。nginx

compose 模版文件

默認的模板文件名稱爲 docker-compose.yml,格式爲 YAML 格式。web

每一個服務都必須經過 image 指令指定鏡像或 build 指令(須要 Dockerfile)等來自動構建生成鏡像。redis

若是使用 build 指令,在 Dockerfile 中設置的選項(例如:CMD, EXPOSE, VOLUME, ENV 等) 將會自動被獲取,無需在 docker-compose.yml 中再次設置。sql

version: '3'
services:

  web:
    build: .
    ports:
     - "5000:5000"

  redis:
    image: "redis:alpine"
複製代碼

build

指定 Dockerfile 所在文件夾的路徑(能夠是絕對路徑,或者相對 docker-compose.yml 文件的路徑)。 Compose 將會利用它自動構建這個鏡像,而後使用這個鏡像。docker

build: docker/redis
# 使用 context 指令指定 Dockerfile 所在文件夾的路徑
# 使用 dockerfile 指令指定 Dockerfile 文件名
# 使用 arg 指令指定構建鏡像時的變量。
# 使用 cache_from 指定構建鏡像的緩存
build:
    context: .
    dockerfile: docker/nginx-php7/Dockerfile
    args:
        buildno: 1
    cache_from:
        - alpine:latest
        - corp/web_app:3.14

複製代碼

image

指定爲鏡像名稱或鏡像 ID。若是鏡像在本地不存在,Compose 將會嘗試拉取這個鏡像。ubuntu

image: ubuntu
複製代碼

command

覆蓋容器啓動後默認執行的命令緩存

command: echo "hello world"
複製代碼

container_name

指定容器名稱。默認將會使用 項目名稱_服務名稱_序號 這樣的格式。bash

container_name: docker-web-container
複製代碼

devices

指定設備映射關係

devices:
  - "/dev/ttyUSB1:/dev/ttyUSB0"
複製代碼

depends_on

解決容器的依賴、啓動前後的問題。如下例子中會先啓動 redis db 再啓動 web

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

  redis:
    image: redis

  db:
    image: postgres
複製代碼

dns

自定義 DNS 服務器。能夠是一個值,也能夠是一個列表。

dns: 8.8.8.8

dns:
  - 8.8.8.8
  - 114.114.114.114
複製代碼

env_file

從文件中獲取環境變量,能夠爲單獨的文件路徑或列表。

env_file: .env

env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env
複製代碼

environment

設置環境變量。若是變量名稱或者值中用到 true|false,yes|no 等表達 布爾 含義的詞彙,最好放到引號裏

environment:
  RACK_ENV: development
  SESSION_SECRET:

environment:
  - RACK_ENV=development
  - SESSION_SECRET
複製代碼

expose

暴露端口,但不映射到宿主機,只被鏈接的服務訪問,僅能夠指定內部端口爲參數

expose:
 - "3000"
 - "8000"
複製代碼

ports

暴露端口信息。使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者僅僅指定容器的端口(宿主將會隨機選擇端口)均可以。

ports:
 - "3000"
 - "8000:8000"
 - "49100:22"
 - "127.0.0.1:8001:8001"
複製代碼

labels

爲容器添加 Docker 元數據(metadata)信息。例如能夠爲容器添加輔助說明信息。

labels:
  com.startupteam.description: "webapp for a startup team"
  com.startupteam.department: "devops department"
  com.startupteam.release: "rc3 for v1.0"
複製代碼

networks

配置容器鏈接的網絡

networks:
  some-network:
  other-network:
複製代碼

secrets

存儲敏感數據,例如 mysql 服務密碼。

mysql:
  image: mysql
  environment:
    MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
  secrets:
    - db_root_password
    - my_other_secret
複製代碼

volumes

數據卷所掛載路徑設置。能夠設置宿主機路徑 (HOST:CONTAINER) 或加上訪問模式 (HOST:CONTAINER:ro)。

該指令中路徑支持相對路徑。

volumes:
 - /var/lib/mysql
 - cache/:/tmp/cache
 - ~/configs:/etc/configs/:ro
複製代碼

讀取變量

Compose 模板文件支持動態讀取主機的系統環境變量和當前目錄下的 .env 文件中的變量。經過${變量名}讀取

# ${MONGO_VERSION}會讀取env文件中的值
version: "3"
services:
db:
  image: "mongo:${MONGO_VERSION}"
複製代碼

compose 命令

對於 Compose 來講,大部分命令的對象既能夠是項目自己,也能夠指定爲項目中的服務或者容器。若是沒有特別的說明,命令對象將是項目,這意味着項目中全部的服務都會受到命令影響。

build

構建(從新構建)項目中的服務鏡像

up

運行 compose 項目

# 在後臺啓動並運行全部的容器
$ docker-compose up -d
複製代碼

down

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

config

驗證 Compose 文件格式是否正確,若正確則顯示配置,若格式錯誤顯示錯誤緣由。

exec

進入指定的容器

$ docker-compose exec <容器名(docker-compose.yml定義的名)> bash
複製代碼

images

列出 Compose 文件中包含的鏡像

kill

強制中止服務容器

$ docker-compose kill [容器名(docker-compose.yml定義的名)]
複製代碼

logs

$ docker-compose log [容器名(docker-compose.yml定義的名)]
複製代碼

pause

暫停服務容器

$ docker-compose pause [容器名(docker-compose.yml定義的名)]
複製代碼

ps

列出項目中目前的容器

$ docker-compose ps [容器名(docker-compose.yml定義的名)]
# 只打印容器ID
$ docker-compose ps -q [容器名(docker-compose.yml定義的名)]
複製代碼

pull

拉取服務依賴的鏡像

$ docker-compose pull [容器名(docker-compose.yml定義的名)]
複製代碼

restart

重啓項目中的服務

$ docker-compose restart [容器名(docker-compose.yml定義的名)]
複製代碼

rm

刪除全部(中止狀態的)服務容器。

須要執行 docker-compose stop 命令來中止容器。

$ docker-compose rm [容器名(docker-compose.yml定義的名)]
複製代碼

start

$ docker-compose start [容器名(docker-compose.yml定義的名)]
複製代碼

stop

$ docker-compose stop [容器名(docker-compose.yml定義的名)]
複製代碼
相關文章
相關標籤/搜索