docker compose官方編排項(xiàng)目

2018年7月18日11:17:45 發(fā)表評(píng)論 3,666 ℃

在Linux 64 位系統(tǒng)上直接下載對(duì)應(yīng)的二進(jìn)制包

#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補(bǔ)全命令

#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 模板文件,默認(rèn)為 docker-compose.yml ,可以多次指定。

-p, --project-name NAME 指定項(xiàng)目名稱,默認(rèn)將使用所在目錄名稱作為項(xiàng)目名。

--x-networking 使用 Docker 的可拔插網(wǎng)絡(luò)后端特性

--x-network-driver DRIVER 指定網(wǎng)絡(luò)后端的驅(qū)動(dòng),默認(rèn)為 bridge

--verbose 輸出更多調(diào)試信息。

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

onfig 驗(yàn)證compose文件格式

dow/up 停止/啟動(dòng)容器

exec 進(jìn)入指定的容器

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

kill 強(qiáng)制停止服務(wù)容器

   -s 指定發(fā)送的信號(hào)

       #docker-compose kill -s SIGINT

logs  查看服務(wù)容器的輸出

pause  暫停一個(gè)服務(wù)容器

port 打印某個(gè)容器端口所映射的公共端口

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

     --index=index  如果同一服務(wù)存在多個(gè)容器,指定命令對(duì)象容器的序號(hào)(默認(rèn)為 1)

ps 列出項(xiàng)目中目前的所有容器

    -q 只打印容器的ID信息

pull  拉取服務(wù)依賴的鏡像

    --ignore-pull-failures 忽略拉取鏡像過(guò)程中的錯(cuò)誤

push 推送服務(wù)依賴的鏡像到docker鏡像倉(cāng)庫(kù)

restart 重啟項(xiàng)目中的服務(wù)

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

start 啟動(dòng)已經(jīng)存在的服務(wù)容器

stop 停止處于運(yùn)行狀態(tài)的容器

unpause 恢復(fù)處理暫停狀態(tài)中的服務(wù)

rm  刪除所有(停止?fàn)顟B(tài))服務(wù)容器

    -f , --force 強(qiáng)制直接刪除,包括非停止?fàn)顟B(tài)容器

    -v 刪除容器所掛載的數(shù)據(jù)卷

run 在指定服務(wù)上執(zhí)行一個(gè)命令

 -d 后臺(tái)運(yùn)行容器。

    --name NAME 為容器指定一個(gè)名字。

 --entrypoint CMD 覆蓋默認(rèn)的容器啟動(dòng)指令。

 -e KEY=VAL 設(shè)置環(huán)境變量值,可多次使用選項(xiàng)來(lái)設(shè)置多個(gè)環(huán)境變量。

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

 --no-deps 不自動(dòng)啟動(dòng)關(guān)聯(lián)的服務(wù)容器。

 --rm 運(yùn)行命令后自動(dòng)刪除容器, d 模式下將忽略。

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

 --service-ports 配置服務(wù)端口并映射到本地主機(jī)。

 -T 不分配偽 tty,意味著依賴 tty 的指令將無(wú)法運(yùn)行。

 # docker-compose run ubuntu ping docker.com

     將會(huì)啟動(dòng)一個(gè) ubuntu 服務(wù)容器,并執(zhí)行 ping docker.com 命令

  默認(rèn)情況下,如果存在關(guān)聯(lián),則所有關(guān)聯(lián)的服務(wù)將會(huì)自動(dòng)被啟動(dòng),除非這些服務(wù)已經(jīng)在運(yùn)行中。

     該命令類似啟動(dòng)容器后運(yùn)行指定的命令,相關(guān)卷、鏈接等等都將會(huì)按照配置自動(dòng)創(chuàng)建。兩個(gè)不同點(diǎn):

        給定命令將會(huì)覆蓋原有的自動(dòng)運(yùn)行命令;

        不會(huì)自動(dòng)創(chuàng)建端口,以避免沖突。

     如果不希望自動(dòng)啟動(dòng)關(guān)聯(lián)的容器,可以使用 --no-deps 選項(xiàng),例如

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

      將不會(huì)啟動(dòng)web容器所關(guān)聯(lián)的其他容器

scale

 設(shè)置指定服務(wù)運(yùn)行的容器個(gè)數(shù),通過(guò)service=num 的參數(shù)來(lái)設(shè)置數(shù)量

 #docker-compose scale web=3 db=2

 將啟動(dòng)3個(gè)容器運(yùn)行web服務(wù),2個(gè)容器運(yùn)行db服務(wù)

 一般的,當(dāng)指定數(shù)目多于該服務(wù)當(dāng)前實(shí)際運(yùn)行容器,將新創(chuàng)建并啟動(dòng)容器;反之,將停止容器。

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

top 查看各個(gè)服務(wù)容器內(nèi)運(yùn)行的進(jìn)程

up  自動(dòng)完成包括構(gòu)建鏡像,(重新)創(chuàng)建服務(wù),啟動(dòng)服務(wù),并關(guān)聯(lián)

服務(wù)相關(guān)容器

 -d 后臺(tái)啟動(dòng)并運(yùn)行所有的容器

 --no-color 不使用顏色來(lái)區(qū)分不同的服務(wù)的控制臺(tái)輸出。

 --no-deps 不啟動(dòng)服務(wù)所鏈接的容器。

 --force-recreate 強(qiáng)制重新創(chuàng)建容器,不能與 --no-recreate 同時(shí)使用。

 --no-recreate 如果容器已經(jīng)存在了,則不重新創(chuàng)建,不能與 --force-recreate 同時(shí)使用。

 --no-build 不自動(dòng)構(gòu)建缺失的服務(wù)鏡像。

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

Compose 模板文件

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

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

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

 使用 arg 指令指定構(gòu)建鏡像時(shí)的變量。

 使用 cache_from 指定構(gòu)建鏡像的緩存

 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指定容器的內(nèi)核能力(capacity)分配讓容器擁有所有能力可以指定為:

  cap_add:

  - ALL

 去掉 NET_ADMIN 能力可以指定為:

  cap_drop:

   - NET_ADMIN

command 覆蓋容器啟動(dòng)后默認(rèn)執(zhí)行的命令

 command: echo "hello word"

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

 cgroup_parent: cgroups_1

container_name 指定容器名稱。默認(rèn)將會(huì)使用 項(xiàng)目名稱_服務(wù)名稱_序號(hào) 這樣的格式。

 container_name: docker-web-container

 注意: 指定容器名稱后,該服務(wù)將無(wú)法進(jìn)行擴(kuò)展(scale),因?yàn)?nbsp;Docker 不允許多個(gè)容器具有相同的名稱。

devices 定設(shè)備映射關(guān)系。

 devices:

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

depends_on 解決容器的依賴、啟動(dòng)先后的問(wèn)題。

 以下例子中會(huì)先啟動(dòng) redis  db 再啟動(dòng) web

 version: "3"

 services:

  web:

   build: .

   depends_on

    - db

    - redis

  redis:

   image: redis

  db:

   image: postges

  注意: web 服務(wù)不會(huì)等待 redis  db 「完全啟動(dòng)」之后才啟動(dòng)。dns 自定義DNS服務(wù)器??梢允且粋€(gè)值,也可以是一個(gè)列表

 dns: 8.8.8.8

 dns:

  - 8.8.8.8

  - 4.4.4.4

dns_search 配置 DNS 搜索域??梢允且粋€(gè)值,也可以是一個(gè)列表。

tmpfs 掛載一個(gè)tmpfs文件系統(tǒng)到容器

tmpfs: /run

tmpfs:

 - /run

 - /tmp

env_file 從文件中獲取環(huán)境變量,可以為單獨(dú)的文件路徑或列表。

environment 設(shè)置環(huán)境變量。你可以使用數(shù)組或字典兩種格式。

 environment:

  RACK_ENV: development

  SESSION_SECRET:

 environment:

  - RACK_NEW=development

  - SESSION_SECRET

expose 暴露端口,但不映射到宿主機(jī),只被連接的服務(wù)訪問(wèn)。

 expose:

  - "3000"

  - "8000"

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

 extra_hosts:

  - "googledns:8.8.8.8"

  - "dockerhub:52.1.157.61"

會(huì)在啟動(dòng)后的服務(wù)容器中 /etc/hosts 文件中添加如下兩條條目。

 8.8.8.8 googledns

 52.1.157.61 dockerhub

healthcheck 通過(guò)命令檢查容器是否健康運(yùn)行。

 healthcheck 

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

  interval: 1m30s

  timeout: 10s

  retries: 3

image 指定為鏡像名稱或鏡像 ID。如果鏡像在本地不存在, Compose 將會(huì)嘗試?yán)∵@個(gè)鏡像。

 image: ubuntu

 image: orchardup/postgresql

 image: a4bc65fd

logging 配置日志選項(xiàng)

 logging:

  driver: syslog

  options:

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

 目前支持三種日志驅(qū)動(dòng)類型

  driver: "json-file"

  driver: "syslog"

  driver: "none"

options:

 options:

  max-size: "200k"

  max-file: "10"

network_mode 設(shè)置網(wǎng)絡(luò)模式。使用和 docker run 的 --network 參數(shù)一樣的值。

 network_mode: "bridge"

 network_mode: "host"

 network_mode: "none"

 network_mode: "service:[service name]"

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

networks 配置容器連接的網(wǎng)絡(luò)

 version: "3"

 services:

  some-service:

   networks:

    - some-network

    - other-network

 networks:

  some-network:

  other-network:

pid 跟主機(jī)系統(tǒng)共享進(jìn)程命名空間。打開該選項(xiàng)的容器之間,以及容器和宿主機(jī)系統(tǒng)之間可以通過(guò)進(jìn)程 ID 來(lái)相互訪問(wèn)和操作。

 pid: "host"

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

 ports:

  - "3000"

  - "8000:8000"

  - "49100:22"

  - "127.0.0.1:8001:8001"

secrets 存儲(chǔ)敏感數(shù)據(jù),例如mysql服務(wù)密碼

 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 指定容器模板標(biāo)簽(label)機(jī)制的默認(rèn)屬性(用戶、角色、類型、級(jí)別等)。例如配置標(biāo)簽的用戶名和角色名。

 security_opt:

  - label:user:USER

  - label:role:ROLE

stop_signal 設(shè)置另一個(gè)信號(hào)來(lái)停止容器。在默認(rèn)情況下使用的是 SIGTERM 停止容器。

 stop_signal: SIGUSR1

sysctls 配置容器內(nèi)核參數(shù)

 sysctls:

  net.core.somaxconn: 1024

  net.ipv4.tcp_syncookies: 0

 sysctls:

  - net.core.somaxconn=1024

  - net.ipv4.tcp_syncookies=0

ulimits 指定容器的 ulimits 限制值。

 例如,指定最大進(jìn)程數(shù)為 65535,指定文件句柄數(shù)為 20000(軟限制,應(yīng)用可以隨時(shí)修改,不能超過(guò)硬限制) 和 40000(系統(tǒng)硬限制,只能 root 用戶提高)。

 ulimits:

  nproc: 65535

  nofile:

   soft: 20000

   hard: 40000

volumes 數(shù)據(jù)卷所掛載路徑設(shè)置??梢栽O(shè)置宿主機(jī)路徑 ( HOST:CONTAINER ) 或加上訪問(wèn)模式( HOST:CONTAINER:ro )。

 volumes:

  - /var/lib/mysql

  - cache/:/tmp/cache

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

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

 restart: always

從運(yùn)行它的環(huán)境中讀取變量 ${MONGO_VERSION} 的值,并寫入執(zhí)行的指令中。  

version: "3"

services:

 db:

  image: "mongo:${MONGO_VERSION}"

【騰訊云】云服務(wù)器、云數(shù)據(jù)庫(kù)、COS、CDN、短信等云產(chǎn)品特惠熱賣中

發(fā)表評(píng)論

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