Docker技術入門與實戰 第二版-學習筆記-9-Docker Compose 項目-2-Compose 命令說明

Compose 命令說明 html

1)命令對象與格式 python

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

userdeMBP:compose-haproxy-web user$ docker-compose --help
...
Options:
  -f, --file FILE             Specify an alternate compose file (default: docker-compose.yml) 指定使用的 Compose 模板文件,默認爲docker-compose.yml,能夠屢次指定
  -p, --project-name NAME     Specify an alternate project name(default: directory name)指定項目名稱,默認將使用所在目錄名稱做爲項目名
  --verbose                   Show more output 輸出更多調試信息
  --log-level LEVEL           Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL) 設置日誌級別
  --no-ansi                   Do not print ANSI control characters 不輸出ANSI控制字符
  -v, --version               Print version and exit 打印版本並退出
  -H, --host HOST             Daemon socket to connect to Daemon socket鏈接的主機
  --x-networking              使用Docker的可拔插網絡後段特性(須要Docker1.9及之後版本)
  --x-network-driver          DRIVER指定網絡後端的驅動,默認爲bridge(須要Docker1.9及之後版本)

格式:nginx

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

 

 

2)命令使用說明 web

1> buildredis

build [options] [--build-arg key=val...] [SERVICE...]

構建(從新構建)項目中的服務容器 sql

服務容器一旦構建後,將會帶上一個標記名,例如對於 web 項目中的一個 db 容 器,多是 web_dbchrome

 

能夠隨時在項目目錄下運行docker-compose build來從新構建服務
docker

Options:
    --compress              Compress the build context using gzip. 使用gzip壓縮構建上下文
    --force-rm              Always remove intermediate containers. 刪除構建過程當中的臨時容器
    --no-cache              Do not use cache when building the image. 構建鏡像過程當中不使用 cache(這將加長構建過程)
    --pull                  Always attempt to pull a newer version of the image. 始終嘗試經過 pull 來獲取更新版本的鏡像
    -m, --memory MEM        Sets memory limit for the build container. 爲構建容器設置內存限制
    --build-arg key=val     Set build-time variables for services. 爲服務設置構建時間變量
    --parallel              Build images in parallel. 並行構建鏡像

 

2> helpshell

得到一個命令的幫助

 

3> kill

格式及選項:

Usages : docker-compose kill [options] [SERVICE...]
Options:
    -s SIGNAL         SIGNAL to send to the container.Default signal is SIGKILL.指定發送的信號,默認發送 SIGKILL 信號來強制中止服務容器

 

4> logs

格式及選項

Usage: docker-compose logs [options] [SERVICE...]

Options:
    --no-color          Produce monochrome output.關閉顏色
    -f, --follow        Follow log output. 跟蹤日誌輸出 
    -t, --timestamps    Show timestamps. 展現時間戳
    --tail="all"        Number of lines to show from the end of the logs for each container.展現每一個容器日誌結尾的行數

查看服務容器的輸出。默認狀況下,docker-compose 將對不一樣的服務輸出使用不同的顏色來區分。

能夠經過--no-color來關閉顏色。該命令在調試問題的時候十分有用。

 

5> pause

格式:

Usage: docker-compose pause [SERVICE...]

暫停一個服務容器

 

6> port

格式及選項:

Usage: docker-compose port [options] SERVICE PRIVATE_PORT

Options:
    --protocol=proto  tcp or udp [default: tcp] 指定端口協議,tcp(默認值)或者 udp
    --index=index     index of the container if there are multiple instances of a service [default: 1]若是同一服務存在多個容器,指定命令對象容器的序號(默認爲1)

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

 

7> ps

Usage: docker-compose ps [options] [SERVICE...]

Options:
    -q, --quiet          Only display IDs 只打印容器的 ID 信息
    --services           Display services  顯示服務
    --filter KEY=VAL     Filter services by a property 經過屬性過濾服務

 

8> pull

格式和選項:

Usage: docker-compose pull [options] [SERVICE...]

Options: 
    --ignore-pull-failures  Pull what it can and ignores images with pull failures. 忽略拉取鏡像過程當中的錯誤
    --parallel              Deprecated, pull multiple images in parallel (enabled by default). 棄用,並行拉取多個鏡像(默承認用)
    --no-parallel           Disable parallel pulling. 不可並行拉取
    -q, --quiet             Pull without printing progress information 沒有打印進程信息的拉取
    --include-deps          Also pull services declared as dependencies 也拉取聲稱爲依賴的服務

 

9> restart

格式和選項:

Usage: docker-compose restart [options] [SERVICE...]

Options:
  -t, --timeout TIMEOUT      Specify a shutdown timeout in seconds.(default: 10)指定重啓前中止容器的超時(默認爲 10 秒)

 

10> rm

格式和選項:

Usage: docker-compose rm [options] [SERVICE...]

Options:
    -f, --force   Don't ask to confirm removal 強制直接刪除,包括非中止狀態的容器。通常儘可能不要使用該選項
    -s, --stop    Stop the containers, if required, before removing 若是須要,在移除前先中止該容器
    -v            Remove any anonymous volumes attached to containers 刪除容器所掛載的數據卷
    -a, --all     Deprecated - no effect. 棄用-沒有影響

 

11> run

格式和選項:

Usage:
    docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] [-l KEY=VALUE...] SERVICE [COMMAND] [ARGS...]

Options:
    -d, --detach          Detached mode: Run container in the background, print new container name. 分離模式:後臺運行容器,打印新容器名
    --name NAME           Assign a name to the container 爲容器指定一個名字
    --entrypoint CMD      Override the entrypoint of the image.覆蓋默認的容器啓動指令
    -e KEY=VAL            Set an environment variable (can be used multiple times) 設置環境變量值,可屢次使用選項來設置多個環境變量
    -l, --label KEY=VAL   Add or override a label (can be used multiple times) 添加或覆寫標籤,可屢次使用
    -u, --user=""         Run as specified username or uid 指定運行容器的用戶名或者 uid
    --no-deps             Don't start linked services. 不自動啓動關聯的服務容器
    --rm                  Remove container after run. Ignored in detached mode. 運行命令後自動刪除容器, -d模式下將忽略
    -p, --publish=[]      Publish a container's port(s) to the host 映射容器端口到本地主機
    --service-ports       Run command with the service's ports enabled and mapped to the host. 配置服務端口並映射到本地主機
    --use-aliases         Use the service's network aliases in the network(s) the container connects to. 在容器鏈接的網絡中使用服務網絡的別名
    -v, --volume=[]       Bind mount a volume (default []) 鏈接掛載數據卷,默認爲[]
    -T                    Disable pseudo-tty allocation. By default `docker-compose run` allocates a TTY. 不分配僞 tty,意味着依賴 tty 的指令將沒法運行
    -w, --workdir=""      Working directory inside the container 在容器中的運行目錄

這裏run的service必定是以前docker-compose up命令開啓的容器中的一種

在指定服務上執行一個命令,好比:

 

userdeMacBook-Pro:compose-haproxy-web user$ docker-compose run weba env
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=db02a3babdb3
TERM=xterm
COMPOSE_HAPROXY_WEB_WEBA_1_PORT=tcp://172.17.0.4:80
COMPOSE_HAPROXY_WEB_WEBA_1_PORT_80_TCP=tcp://172.17.0.4:80
COMPOSE_HAPROXY_WEB_WEBA_1_PORT_80_TCP_ADDR=172.17.0.4
COMPOSE_HAPROXY_WEB_WEBA_1_PORT_80_TCP_PORT=80
COMPOSE_HAPROXY_WEB_WEBA_1_PORT_80_TCP_PROTO=tcp
COMPOSE_HAPROXY_WEB_WEBA_1_NAME=/compose-haproxy-web_weba_run_e5f54aba4fd5/compose-haproxy-web_weba_1
COMPOSE_HAPROXY_WEB_WEBA_1_ENV_LANG=C.UTF-8
COMPOSE_HAPROXY_WEB_WEBA_1_ENV_PYTHONIOENCODING=UTF-8
COMPOSE_HAPROXY_WEB_WEBA_1_ENV_GPG_KEY=C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF
COMPOSE_HAPROXY_WEB_WEBA_1_ENV_PYTHON_VERSION=2.7.15
COMPOSE_HAPROXY_WEB_WEBA_1_ENV_PYTHON_PIP_VERSION=18.1
WEBA_PORT=tcp://172.17.0.4:80
WEBA_PORT_80_TCP=tcp://172.17.0.4:80
WEBA_PORT_80_TCP_ADDR=172.17.0.4
WEBA_PORT_80_TCP_PORT=80
WEBA_PORT_80_TCP_PROTO=tcp
WEBA_NAME=/compose-haproxy-web_weba_run_e5f54aba4fd5/weba
WEBA_ENV_LANG=C.UTF-8
WEBA_ENV_PYTHONIOENCODING=UTF-8
WEBA_ENV_GPG_KEY=C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF
WEBA_ENV_PYTHON_VERSION=2.7.15
WEBA_ENV_PYTHON_PIP_VERSION=18.1
WEBA_1_PORT=tcp://172.17.0.4:80
WEBA_1_PORT_80_TCP=tcp://172.17.0.4:80
WEBA_1_PORT_80_TCP_ADDR=172.17.0.4
WEBA_1_PORT_80_TCP_PORT=80
WEBA_1_PORT_80_TCP_PROTO=tcp
WEBA_1_NAME=/compose-haproxy-web_weba_run_e5f54aba4fd5/weba_1
WEBA_1_ENV_LANG=C.UTF-8
WEBA_1_ENV_PYTHONIOENCODING=UTF-8
WEBA_1_ENV_GPG_KEY=C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF
WEBA_1_ENV_PYTHON_VERSION=2.7.15
WEBA_1_ENV_PYTHON_PIP_VERSION=18.1
LANG=C.UTF-8
PYTHONIOENCODING=UTF-8
GPG_KEY=C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF
PYTHON_VERSION=2.7.15
PYTHON_PIP_VERSION=18.1
HOME=/root

 

將會啓動一個 web 服務容器,並執行命令。 默認狀況下,若是存在關聯,則全部關聯的服務將會自動被啓動,除非這些服務已經在運行中。

該命令相似啓動容器後運行指定的命令,相關卷、連接等等都將會按照配置自動創建。

兩個不一樣點:

  • 給定命令將會覆蓋原有的自動運行命令;
  • 不會自動建立端口,以免衝突。

若是不但願自動啓動關聯的容器,可使用 --no-deps選項,例如

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

將不會啓動 web 容器所關聯的其它容器。

 

12> scale

格式及選項:

Usage: docker-compose scale [options] [SERVICE=NUM...]

Options:
  -t, --timeout TIMEOUT      Specify a shutdown timeout in seconds.(default: 10)指定重啓前中止容器的超時(默認爲 10 秒)

設置指定服務運行的容器個數。

經過 SERVICE=NUM的參數來設置數量。例如:

 $ docker-compose scale web=3 db=2

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

通常的,當指定數目多於該服務當前實際運行容器,將新建立並啓動容器;反之,將中止容器。

 

13> start

格式:

docker-compose start [SERVICE...]

啓動已經存在的服務容器

 

14> stop

格式及選項:

Usage: docker-compose stop [options] [SERVICE...]

Options:
  -t, --timeout TIMEOUT      Specify a shutdown timeout in seconds.(default: 10)指定重啓前中止容器的超時(默認爲 10 秒)

中止已經處於運行狀態的容器,但不刪除它。經過 docker-compose start能夠再次啓動這些容器。

 

15> unpause

格式:

Usage: docker-compose unpause [SERVICE...]

恢復處於暫停狀態中的服務

 

16> up

Usage: docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]

Options:
    -d, --detach               Detached mode: Run containers in the background,print new container names. Incompatible with --abort-on-container-exit. 分離模式:在後臺運行服務容器,打印新容器名。不與--abort-on-container-exit兼容
    --no-color                 Produce monochrome output. 不使用顏色來區分不一樣的服務的控制檯輸出
    --quiet-pull               Pull without printing progress information 不帶打印過程信息地拉取
    --no-deps                  Don't start linked services. 不啓動服務所連接的容器
    --force-recreate           Recreate containers even if their configuration and image haven't changed. 即便他們的配置和鏡像沒有改變,也強制從新建立容器,不能與--no-recreate連用
    --always-recreate-deps     Recreate dependent containers.Incompatible with --no-recreate. 從新建立依賴鏡像,不能與--no-recreate連用
    --no-recreate              If containers already exist, don't recreate them. Incompatible with --force-recreate and -V. 若是容器已經存在了,則不從新建立,不能與--force-recreate連用
    --no-build                 Don't build an image, even if it's missing. 再也不構建鏡像,即便丟失
    --no-start                 Don't start the services after creating them. 在建立後再也不開啓服務
    --build                    Build images before starting containers. 在開啓容器時構建鏡像
    --abort-on-container-exit  Stops all containers if any container was stopped. Incompatible with -d. 若是有任意容器中止了,就中止全部的容器。與-d參數不連用
    -t, --timeout TIMEOUT      Use this timeout in seconds for container shutdown when attached or when containers are already running. (default: 10) 當鏈接容器或容器已經運行時或中止容器時候的超時(默認爲 10 秒)
    -V, --renew-anon-volumes   Recreate anonymous volumes instead of retrieving data from the previous containers.從新建立匿名數據捲來替代從之前的容器中檢索數據
    --remove-orphans           Remove containers for services not defined in the Compose file. 移除Compose文件中的服務沒有定義的容器
    --exit-code-from SERVICE   Return the exit code of the selected service container. Implies --abort-on-container-exit. 運行已選服務容器的exit代碼,同時實現--abort-on-container-exit參數功能
    --scale SERVICE=NUM        Scale SERVICE to NUM instances. Overrides the `scale` setting in the Compose file if present. 將服務擴展到NUM個實例。覆蓋Compose文件中存在的`scale`設置

該命令十分強大,它將嘗試自動完成包括構建鏡像,(從新)建立服務,啓動服務,並關聯服務相關容器的一系列操做。

連接的服務都將會被自動啓動,除非已經處於運行狀態

能夠說,大部分時候均可以直接經過該命令來啓動一個項目

默認狀況,若是服務容器已經存在, docker-compose up將會嘗試中止容器, 而後從新建立(保持使用 volumes-from掛載的卷),以保證新啓動的服務匹配docker-compose.yml文件的最新內容

若是用戶不但願容器被中止並從新建立,可使用--no-recreate參數 。這樣將只會啓動處於中止狀態的容器,而忽略已經運行的服務。

若是用戶只想從新部署某個服務,可使用 docker-compose up --no-deps -d <SERVICE_NAME>來從新建立服務並後臺停止舊服務,啓動新服務,並不會影響到其所依賴的服務

 

17> migrate-to-labels(如今好像已經沒有這個功能了)

從新建立容器,並添加 label
主要用於升級 1.2 及更早版本中建立的容器,添加缺失的容器標籤。 實際上,最􏰀底的辦法固然是刪除項目,而後從新建立。

 

18> version

userdeMacBook-Pro:~ user$ docker-compose version
docker-compose version 1.23.2, build 1110ad01
docker-py version: 3.6.0
CPython version: 3.6.6
OpenSSL version: OpenSSL 1.1.0h  27 Mar 2018

打印版本信息

 

 

2) Compose 模板文件

模板文件是使用 Compose 的核心,涉及到的指令關鍵字也比較多。但你們不用擔心,這裏面大部分指令跟docker run 相關參數的含義都是相似的

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

版本2和版本1 最大的不一樣:
  • 添加了版本信息
  • 須要將全部的服務放到services根下面
version: "2"
services:
  webapp: //服務
    image: examples/web //該服務的鏡像
    ports: //開放端口及其映射
      - "80:80"
    volumes: //掛載的數據卷
      - "/data"

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

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

 

3)模版文件的指令

1> build

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

build: /path/to/build/dir

 

2> cap_add, cap_drop

指定容器的內核能力(capacity)分配。

例如,讓容器擁有全部能力能夠指定爲:

cap_add:
  - ALL

去掉 NET_ADMIN 能力能夠指定爲:

cap_drop:
  - NET_ADMIN

 

3> command

覆蓋容器啓動後默認執行的命令,如:

 command: echo "hello world"

 

4> cgroup_parent(這是什麼???)

指定父 cgroup 組,意味着將繼承該組的資源限制。 例如,建立了一個 cgroup 組名稱爲 cgroups_1:

 cgroup_parent: cgroups_1

 

5> container_name

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

 container_name: docker-web-container

須要注意,指定容器名稱後,該服務將沒法進行擴展(scale),由於 Docker 不允 許多個容器具備相同的名稱

 

 

6> devices

指定設備映射關係,如:

devices:
  - "/dev/ttyUSB1:/dev/ttyUSB0"

 

7> dns

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

dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9

 

8> dns_search

配置 DNS 搜索域。能夠是一個值,也能夠是一個列表

dns_search: example.com
dns_search:
  - domain1.example.com
  - domain2.example.com

 

9> dockerfile

若是須要指定額外的編譯鏡像的 Dockefile 文件,能夠經過該指令來指定,如:

 dockerfile: Dockerfile-alternate

注意,該指令不能跟 image同時使用,不然 Compose 將不知道根據哪一個指令來 生成最終的服務鏡像

 

10> env_file

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

若是經過 docker-compose -f FILE方式來指定 Compose 模板文件,則 env_file中變量的路徑會基於模板文件路徑:

若是有變量名稱與 environment指令衝突,則按照慣例,之後者爲準

env_file: .env
env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env

環境變量文件中每一行必須符合格式,支持 開頭的註釋行

# common.env: Set development environment
PROG_ENV=development

 

11> environment

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

只給定名稱的變量會自動獲取運行 Compose 主機上對應變量的值,能夠用來防止泄露沒必要要的數據,如:

environment:
  RACK_ENV: development
  SESSION_SECRET:

或:

environment:
  - RACK_ENV=development
  - SESSION_SECRET

注意,若是變量名稱或者值中用到 true|fale,yes|no 等表達布爾含義的詞彙,最好放到引號裏,避免 YAML 自動解析某些內容爲對應的布爾語義。

http://yaml.org/type/bool.html中給出了這些特定詞彙,包括:

 y|Y|yes|Yes|YES|n|N|no|No|NO
|true|True|TRUE|false|False|FALSE
|on|On|ON|off|Off|OFF

 

12> expose

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

 

expose:
 - "3000"
 - "8000"

 

 

13> extends

基於其它模板文件進行擴展

例如咱們已經有了一個 webapp 服務,定義一個基礎模板文件爲 common.yml:

# common.yml
webapp:
  build: ./webapp
  environment:
    - DEBUG=false
    - SEND_EMAILS=false

再編寫一個新的 development.yml文件,使用 common.yml中的 webapp 服務進行擴展。

# development.yml
web:
  extends:
    file: common.yml
    service: webapp
  ports:
    - "8000:8000"
  links:
    - db
  environment:
    - DEBUG=true
db:
  image: postgres

後者會自動繼承 common.yml 中的 webapp 服務及環境變量定義。 使用 extends 須要注意:

  • 要避免出現循環依賴,例如 A依賴B,B依賴C,C返回來依賴A的狀況
  • extends 不會繼承 links volumes_from 中定義的容器和數據卷資源

通常的,推薦在基礎模板中只定義一些能夠共享的鏡像和環境變量,在擴展模板中具體指定應用變量、連接、數據卷等信息

 

14> external_links

連接到 docker-compose.yml 外部的容器,甚至 並不是Compose管理的外部容器。參數格式跟 links相似:

external_links:
 - redis_1
 - project_db_1:mysql
 - project_db_1:postgresql

 

15> external_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

 

16> image

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

image: ubuntu

 

17> labels

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

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

 

18> links

連接到其它服務中的容器。使用服務名稱(同時做爲別名)或服務名稱:服務別名 (SERVICE:ALIAS)格式均可以:

links:
 - db
 - db:database
 - redis

使用的別名將會自動在服務容器中的 /etc/hosts裏建立。例如:

172.17.2.186  db
172.17.2.186  database
172.17.2.187  redis

被連接容器中相應的環境變量也將被建立

 

19> log_driver

相似 Docker 中的 --log-driver參數,指定日誌驅動類型;

目前支持三種日誌驅動類型:

log_driver: "json-file"
log_driver: "syslog"
log_driver: "none"

 

20> log_opt

日誌驅動的相關參數,如:

log_driver: "syslog"
log_opt:
  syslog-address: "tcp://192.168.0.42:123"

 

21> net

設置網絡模式。使用和 docker client的 --net 參數同樣的值:

net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"

 

22> pid

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

 pid: "host"

 

23> ports

暴露端口信息

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

ports:
 - "3000"
 - "8000:8000"
 - "49100:22"
 - "127.0.0.1:8001:8001"

注意:當使用 HOST:CONTAINER格式來映射端口時,若是你使用的容器端口小於 60 而且沒放到引號裏,可能會獲得錯誤結果,由於yaml會自動解析 XX:YY

這種數字格式爲 60 進制。爲避免出現這種問題,建議數字串都採用引號包括起來的字符串格式。

 

24> security_opt

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

security_opt:
    - label:user:USER
    - label:role:ROLE

 

25> ulimits

指定容器的 ulimits 限制值。

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

  nproc: 65535
  nofile:
    soft: 20000
    hard: 40000

 

26> volumes

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

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

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

 

27> volumes_driver

較新版本的 Docker 支持數據卷的插件驅動。 用戶能夠先使用第三方驅動建立一個數據卷,而後使用名稱來訪問它。 此時,能夠經過 volumes_driver來指定驅動。

 volume_driver: mydriver

 

28> volumes_from

從另外一個服務或容器掛載它的數據卷:

volumes_from:
 - service_name
 - container_name

 

29> 其它指令

還有如cpu_shares,cpuset,domainname,entrypoint,hostname,ipc,mac_address,mem_limit,memswap_limit,privileged,read_only,restart,stdin_open,tty,user,working_dir等指令,基本上和docker-run中對應的參數的功能一致

例如,指定使用 cpu 0 和 核 1,只用 50% CPU 資源:

cpu_shares: 73
cpuset: 0,1

指定服務容器啓動後執行的命令:

 entrypoint: /code/entrypoint.sh

指定容器中運行應用的用戶名:

 user: nginx

指定容器中工做目錄

working_dir: /code

指定容器中搜索域名、主機名、mac 地址等

domainname: your_website.com
hostname: test
mac_address: 08-00-27-00-0C-0A

指定容器中實現進程間通訊:

ipc: host

指定容器中內存和內存交換區限制都爲 1G

mem_limit: 1g
memswap_limit: 1g

容許容器中運行一些特權命令:

privileged: true

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

 restart: always

以只讀模式掛載容器的 root 文件系統,意味着不能對容器內容進行修改:

 read_only: true

打開標準輸入,能夠接受外部輸入:

 stdin_open: true

模擬一個假的遠程控制檯:

 tty: true

 

30>讀取環境變量

 

1.5.0 版本開始,Compose 模板文件支持動態讀取主機的系統環境變量。

例如,下面的 Compose 文件將從運行它的環境中讀取變量 ${MONGO_VERSION} 的值,並寫入執行的指令中。

db:
  image: "mongo:${MONGO_VERSION}"

若是執行MONGO_VERSION=3.0 docker-compose up則會啓動一個mongo:3.2鏡像的容器;若是執行MONGO_VERSION=3.0 docker-compose up,則會啓動一個mongo:2.8鏡像的容器

相關文章
相關標籤/搜索