天天看點

Compose 指令說明

指令對象與格式

對于 Compose 來說,大部分指令的對象既可以是項目本身,也可以指定為項目中的服務或者容器。如果沒有特别的說明,指令對象将是項目,這意味着項目中所有的服務都會受到指令影響。

執行

docker-compose [COMMAND] --help

或者

docker-compose help [COMMAND]

可以檢視具體某個指令的使用格式。

docker-compose

指令的基本的使用格式是

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

指令選項

  • -f, --file FILE

    指定使用的 Compose 模闆檔案,預設為

    docker-compose.yml

    ,可以多次指定。
  • -p, --project-name NAME

    指定項目名稱,預設将使用所在目錄名稱作為項目名。
  • --x-networking

    使用 Docker 的可拔插網絡後端特性
  • --x-network-driver DRIVER

    指定網絡後端的驅動,預設為

    bridge

  • --verbose

    輸出更多調試資訊。
  • -v, --version

    列印版本并退出。

指令使用說明

build

格式為

docker-compose build [options] [SERVICE...]

建構(重新建構)項目中的服務容器。

服務容器一旦建構後,将會帶上一個标記名,例如對于 web 項目中的一個 db 容器,可能是 web_db。

可以随時在項目目錄下運作

docker-compose build

來重新建構服務。

選項包括:

  • --force-rm

    删除建構過程中的臨時容器。
  • --no-cache

    建構鏡像過程中不使用 cache(這将加長建構過程)。
  • --pull

    始終嘗試通過 pull 來擷取更新版本的鏡像。

config

驗證 Compose 檔案格式是否正确,若正确則顯示配置,若格式錯誤顯示錯誤原因。

down

此指令将會停止

up

指令所啟動的容器,并移除網絡

exec

進入指定的容器。

help

獲得一個指令的幫助。

images

列出 Compose 檔案中包含的鏡像。

kill

docker-compose kill [options] [SERVICE...]

通過發送

SIGKILL

信号來強制停止服務容器。

支援通過

-s

參數來指定發送的信号,例如通過如下指令發送

SIGINT

信号。

$ docker-compose kill -s SIGINT
           

logs

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

檢視服務容器的輸出。預設情況下,docker-compose 将對不同的服務輸出使用不同的顔色來區分。可以通過

--no-color

來關閉顔色。

該指令在調試問題的時候十分有用。

pause

docker-compose pause [SERVICE...]

暫停一個服務容器。

port

docker-compose port [options] SERVICE PRIVATE_PORT

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

選項:

  • --protocol=proto

    指定端口協定,tcp(預設值)或者 udp。
  • --index=index

    如果同一服務存在多個容器,指定指令對象容器的序号(預設為 1)。

ps

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

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

  • -q

    隻列印容器的 ID 資訊。

pull

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

拉取服務依賴的鏡像。

  • --ignore-pull-failures

    忽略拉取鏡像過程中的錯誤。

push

推送服務依賴的鏡像到 Docker 鏡像倉庫。

restart

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

重新開機項目中的服務。

  • -t, --timeout TIMEOUT

    指定重新開機前停止容器的逾時(預設為 10 秒)。

rm

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

删除所有(停止狀态的)服務容器。推薦先執行

docker-compose stop

指令來停止容器。

  • -f, --force

    強制直接删除,包括非停止狀态的容器。一般盡量不要使用該選項。
  • -v

    删除容器所挂載的資料卷。

run

docker-compose run [options] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]

在指定服務上執行一個指令。

例如:

$ docker-compose run ubuntu ping docker.com
           

将會啟動一個 ubuntu 服務容器,并執行

ping docker.com

指令。

預設情況下,如果存在關聯,則所有關聯的服務将會自動被啟動,除非這些服務已經在運作中。

該指令類似啟動容器後運作指定的指令,相關卷、連結等等都将會按照配置自動建立。

兩個不同點:

  • 給定指令将會覆寫原有的自動運作指令;
  • 不會自動建立端口,以避免沖突。

如果不希望自動啟動關聯的容器,可以使用

--no-deps

選項,例如

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

将不會啟動 web 容器所關聯的其它容器。

  • -d

    背景運作容器。
  • --name NAME

    為容器指定一個名字。
  • --entrypoint CMD

    覆寫預設的容器啟動指令。
  • -e KEY=VAL

    設定環境變量值,可多次使用選項來設定多個環境變量。
  • -u, --user=""

    指定運作容器的使用者名或者 uid。
  • --no-deps

    不自動啟動關聯的服務容器。
  • --rm

    運作指令後自動删除容器,

    d

    模式下将忽略。
  • -p, --publish=[]

    映射容器端口到本地主機。
  • --service-ports

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

    不配置設定僞 tty,意味着依賴 tty 的指令将無法運作。

scale

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

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

通過

service=num

的參數來設定數量。例如:

$ docker-compose scale web=3 db=2
           

将啟動 3 個容器運作 web 服務,2 個容器運作 db 服務。

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

  • -t, --timeout TIMEOUT

    停止容器時候的逾時(預設為 10 秒)。

start

docker-compose start [SERVICE...]

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

stop

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

停止已經處于運作狀态的容器,但不删除它。通過

docker-compose start

可以再次啟動這些容器。

  • -t, --timeout TIMEOUT

top

檢視各個服務容器内運作的程序。

unpause

docker-compose unpause [SERVICE...]

恢複處于暫停狀态中的服務。

up

docker-compose up [options] [SERVICE...]

該指令十分強大,它将嘗試自動完成包括建構鏡像,(重新)建立服務,啟動服務,并關聯服務相關容器的一系列操作。

連結的服務都将會被自動啟動,除非已經處于運作狀态。

可以說,大部分時候都可以直接通過該指令來啟動一個項目。

預設情況,

docker-compose up

啟動的容器都在前台,控制台将會同時列印所有容器的輸出資訊,可以很友善進行調試。

當通過

Ctrl-C

停止指令時,所有容器将會停止。

如果使用

docker-compose up -d

,将會在背景啟動并運作所有的容器。一般推薦生産環境下使用該選項。

預設情況,如果服務容器已經存在,

docker-compose up

将會嘗試停止容器,然後重新建立(保持使用

volumes-from

挂載的卷),以保證新啟動的服務比對

docker-compose.yml

檔案的最新内容。如果使用者不希望容器被停止并重新建立,可以使用

docker-compose up --no-recreate

。這樣将隻會啟動處于停止狀态的容器,而忽略已經運作的服務。如果使用者隻想重新部署某個服務,可以使用

docker-compose up --no-deps -d <SERVICE_NAME>

來重新建立服務并背景停止舊服務,啟動新服務,并不會影響到其所依賴的服務。

  • -d

    在背景運作服務容器。
  • --no-color

    不使用顔色來區分不同的服務的控制台輸出。
  • --no-deps

    不啟動服務所連結的容器。
  • --force-recreate

    強制重新建立容器,不能與

    --no-recreate

    同時使用。
  • --no-recreate

    如果容器已經存在了,則不重新建立,不能與

    --force-recreate

  • --no-build

    不自動建構缺失的服務鏡像。
  • -t, --timeout TIMEOUT

version

docker-compose version

列印版本資訊。