docker compose官方編排項目

2018年7月18日11:17:45 發表評論 3,744 ℃

在Linux 64 位系統上直接下載對應的二進制包

#curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

#chmod +x /usr/local/bin/docker-compose

bash補全命令

#curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

compose命令

docker-compose

-f, --file FILE 指定使用的 Compose 模板文件,默認為 docker-compose.yml ,可以多次指定。

-p, --project-name NAME 指定項目名稱,默認將使用所在目錄名稱作為項目名。

--x-networking 使用 Docker 的可拔插網絡后端特性

--x-network-driver DRIVER 指定網絡后端的驅動,默認為 bridge

--verbose 輸出更多調試信息。

-v, --version 打印版本并退出。

onfig 驗證compose文件格式

dow/up 停止/啟動容器

exec 進入指定的容器

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

kill 強制停止服務容器

   -s 指定發送的信號

       #docker-compose kill -s SIGINT

logs  查看服務容器的輸出

pause  暫停一個服務容器

port 打印某個容器端口所映射的公共端口

     --protocol=proto 指定端口協議,tcp(默認值)或者udp

     --index=index  如果同一服務存在多個容器,指定命令對象容器的序號(默認為 1)

ps 列出項目中目前的所有容器

    -q 只打印容器的ID信息

pull  拉取服務依賴的鏡像

    --ignore-pull-failures 忽略拉取鏡像過程中的錯誤

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

restart 重啟項目中的服務

    -t , --timeout TIMEOUT 指定重啟前停止容器的超時(默認10秒)

start 啟動已經存在的服務容器

stop 停止處于運行狀態的容器

unpause 恢復處理暫停狀態中的服務

rm  刪除所有(停止狀態)服務容器

    -f , --force 強制直接刪除,包括非停止狀態容器

    -v 刪除容器所掛載的數據卷

run 在指定服務上執行一個命令

 -d 后臺運行容器。

    --name NAME 為容器指定一個名字。

 --entrypoint CMD 覆蓋默認的容器啟動指令。

 -e KEY=VAL 設置環境變量值,可多次使用選項來設置多個環境變量。

 -u, --user="" 指定運行容器的用戶名或者 uid。

 --no-deps 不自動啟動關聯的服務容器。

 --rm 運行命令后自動刪除容器, d 模式下將忽略。

 -p, --publish=[] 映射容器端口到本地主機。

 --service-ports 配置服務端口并映射到本地主機。

 -T 不分配偽 tty,意味著依賴 tty 的指令將無法運行。

 # docker-compose run ubuntu ping docker.com

     將會啟動一個 ubuntu 服務容器,并執行 ping docker.com 命令

  默認情況下,如果存在關聯,則所有關聯的服務將會自動被啟動,除非這些服務已經在運行中。

     該命令類似啟動容器后運行指定的命令,相關卷、鏈接等等都將會按照配置自動創建。兩個不同點:

        給定命令將會覆蓋原有的自動運行命令;

        不會自動創建端口,以避免沖突。

     如果不希望自動啟動關聯的容器,可以使用 --no-deps 選項,例如

      # docker-compose run --no-deps web python manage.py shell

      將不會啟動web容器所關聯的其他容器

scale

 設置指定服務運行的容器個數,通過service=num 的參數來設置數量

 #docker-compose scale web=3 db=2

 將啟動3個容器運行web服務,2個容器運行db服務

 一般的,當指定數目多于該服務當前實際運行容器,將新創建并啟動容器;反之,將停止容器。

  -t, --timeout TIMEOUT 停止容器時候的超時(默認為 10 秒)

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

up  自動完成包括構建鏡像,(重新)創建服務,啟動服務,并關聯

服務相關容器

 -d 后臺啟動并運行所有的容器

 --no-color 不使用顏色來區分不同的服務的控制臺輸出。

 --no-deps 不啟動服務所鏈接的容器。

 --force-recreate 強制重新創建容器,不能與 --no-recreate 同時使用。

 --no-recreate 如果容器已經存在了,則不重新創建,不能與 --force-recreate 同時使用。

 --no-build 不自動構建缺失的服務鏡像。

 -t, --timeout TIMEOUT 停止容器時候的超時(默認為 10 秒)。

Compose 模板文件

build  指定 Dockerfile 所在文件夾的路徑

 也可以使用 context 指令指定 Dockerfile 所在文件夾的路徑。

 使用 dockerfile 指令指定 Dockerfile 文件名。

 使用 arg 指令指定構建鏡像時的變量。

 使用 cache_from 指定構建鏡像的緩存

 version: '3'

 services:

  webapp:

   build:

    context: ./dir

    dockerfile: Dockerfile-alternate

    args:

     buildno: 1

    cache_from:

     - alpine:latest

     - corp/web_app:3.14

cap_add ,cap_drop指定容器的內核能力(capacity)分配讓容器擁有所有能力可以指定為:

  cap_add:

  - ALL

 去掉 NET_ADMIN 能力可以指定為:

  cap_drop:

   - NET_ADMIN

command 覆蓋容器啟動后默認執行的命令

 command: echo "hello word"

cgroup_parent 指定父 cgroup 組,意味著將繼承該組的資源限制。

 cgroup_parent: cgroups_1

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

 container_name: docker-web-container

 注意: 指定容器名稱后,該服務將無法進行擴展(scale),因為 Docker 不允許多個容器具有相同的名稱。

devices 定設備映射關系。

 devices:

  - "/dev/tyyUSB1:/dev/ttyUSB0" 

depends_on 解決容器的依賴、啟動先后的問題。

 以下例子中會先啟動 redis  db 再啟動 web

 version: "3"

 services:

  web:

   build: .

   depends_on

    - db

    - redis

  redis:

   image: redis

  db:

   image: postges

  注意: web 服務不會等待 redis  db 「完全啟動」之后才啟動。dns 自定義DNS服務器。可以是一個值,也可以是一個列表

 dns: 8.8.8.8

 dns:

  - 8.8.8.8

  - 4.4.4.4

dns_search 配置 DNS 搜索域。可以是一個值,也可以是一個列表。

tmpfs 掛載一個tmpfs文件系統到容器

tmpfs: /run

tmpfs:

 - /run

 - /tmp

env_file 從文件中獲取環境變量,可以為單獨的文件路徑或列表。

environment 設置環境變量。你可以使用數組或字典兩種格式。

 environment:

  RACK_ENV: development

  SESSION_SECRET:

 environment:

  - RACK_NEW=development

  - SESSION_SECRET

expose 暴露端口,但不映射到宿主機,只被連接的服務訪問。

 expose:

  - "3000"

  - "8000"

extra_hosts 類似 Docker 中的 --add-host 參數,指定額外的 host 名稱映射信息。

 extra_hosts:

  - "googledns:8.8.8.8"

  - "dockerhub:52.1.157.61"

會在啟動后的服務容器中 /etc/hosts 文件中添加如下兩條條目。

 8.8.8.8 googledns

 52.1.157.61 dockerhub

healthcheck 通過命令檢查容器是否健康運行。

 healthcheck 

  test: ["CMD", "curl", "-f","http://localhost"]

  interval: 1m30s

  timeout: 10s

  retries: 3

image 指定為鏡像名稱或鏡像 ID。如果鏡像在本地不存在, Compose 將會嘗試拉取這個鏡像。

 image: ubuntu

 image: orchardup/postgresql

 image: a4bc65fd

logging 配置日志選項

 logging:

  driver: syslog

  options:

   syslog-address: "tcp://192.168.1.2:123"

 目前支持三種日志驅動類型

  driver: "json-file"

  driver: "syslog"

  driver: "none"

options:

 options:

  max-size: "200k"

  max-file: "10"

network_mode 設置網絡模式。使用和 docker run 的 --network 參數一樣的值。

 network_mode: "bridge"

 network_mode: "host"

 network_mode: "none"

 network_mode: "service:[service name]"

 network_mode: "container:[container name/id]"

networks 配置容器連接的網絡

 version: "3"

 services:

  some-service:

   networks:

    - some-network

    - other-network

 networks:

  some-network:

  other-network:

pid 跟主機系統共享進程命名空間。打開該選項的容器之間,以及容器和宿主機系統之間可以通過進程 ID 來相互訪問和操作。

 pid: "host"

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

 ports:

  - "3000"

  - "8000:8000"

  - "49100:22"

  - "127.0.0.1:8001:8001"

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

 version: "3"

 services:

 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

security_opt 指定容器模板標簽(label)機制的默認屬性(用戶、角色、類型、級別等)。例如配置標簽的用戶名和角色名。

 security_opt:

  - label:user:USER

  - label:role:ROLE

stop_signal 設置另一個信號來停止容器。在默認情況下使用的是 SIGTERM 停止容器。

 stop_signal: SIGUSR1

sysctls 配置容器內核參數

 sysctls:

  net.core.somaxconn: 1024

  net.ipv4.tcp_syncookies: 0

 sysctls:

  - net.core.somaxconn=1024

  - net.ipv4.tcp_syncookies=0

ulimits 指定容器的 ulimits 限制值。

 例如,指定最大進程數為 65535,指定文件句柄數為 20000(軟限制,應用可以隨時修改,不能超過硬限制) 和 40000(系統硬限制,只能 root 用戶提高)。

 ulimits:

  nproc: 65535

  nofile:

   soft: 20000

   hard: 40000

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

 volumes:

  - /var/lib/mysql

  - cache/:/tmp/cache

  - ~/configs:/etc/configs/:ro

restart 指定容器退出后的重啟策略為始終重啟。該命令對保持服務始終運行十分有效,在生產環境中推薦配置為 always 或者 unless-stopped 。

 restart: always

從運行它的環境中讀取變量 ${MONGO_VERSION} 的值,并寫入執行的指令中。  

version: "3"

services:

 db:

  image: "mongo:${MONGO_VERSION}"

【騰訊云】云服務器、云數據庫、COS、CDN、短信等云產品特惠熱賣中

發表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: