1. 程式人生 > >Docker 使用指南 —— 基本操作

Docker 使用指南 —— 基本操作

監聽 文件中 nat save 密鑰 官方 tty title 下使用

Docker 是一個能夠把開發應用程序自動部署到容器的開源引擎。它由Docker公司的團隊編寫,基於Apache 2.0開源協議授權。它提供了一個簡單、輕量的建模方式,使開發生命周期更高效快速,鼓勵了面向服務的架構設計。Docker 項目的目標是實現輕量級的操作系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。在 LXC 的基礎上 Docker 進行了進一步的封裝,讓用戶不需要去關心容器的管理,使得操作更為簡便。用戶操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單。

Docker 的特點:

  1. 更快速的交付和部署
  2. 更高效的虛擬化
  3. 更輕松的遷移和擴展
  4. 更簡單的管理
  • 容器技術與傳統虛擬機性能對比
    技術分享圖片

  • Docker與虛擬機建構對比
    技術分享圖片

Docker 容器本質上是宿主機上的一個進程。Docker 通過 namespace 實現了資源隔離,通過 cgroups 實現了資源的限制,通過寫時復制機制(copy-on-write)實現了高效的文件操作。

Docker有五個命名空間:進程、網絡、掛載、宿主和共享內存,為了隔離有問題的應用,Docker運用Namespace將進程隔離,為進程或進程組創建已隔離的運行空間,為進程提供不同的命名空間視圖。這樣,每一個隔離出來的進程組,對外就表現為一個container(容器)。需要註意的是,Docker讓用戶誤以為自己占據了全部資源,但這並不是”虛擬機”。

Docker 中的三個概念:鏡像,容器,倉庫

  1. 鏡像(image):Docker 鏡像就是一個只讀的模板,鏡像可以用來創建 Docker 容器。Docker 提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以直接從其他人那裏下載一個已經做好的鏡像來直接使用。
    鏡像是一種文件結構。Dockerfile中的每條命令都會在文件系統中創建一個新的層次結構,文件系統在這些層次上構建起來,鏡像就構建於這些聯合的文件系統之上。Docker官方網站專門有一個頁面來存儲所有可用的鏡像,網址是:index.docker.io。

  2. 容器( Container):容器是從鏡像創建的運行實例。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。可以把容器看做是一個簡易版的 Linux 環境,Docker 利用容器來運行應用。鏡像是只讀的,容器在啟動的時候創建一層可寫層作為最上層。

  3. 倉庫:倉庫是集中存放鏡像文件的場所,倉庫註冊服務器(Registry)上往往存放著多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標簽(tag)。目前,最大的公開倉庫是 Docker Hub,存放了數量龐大的鏡像供用戶下載。

Docker倉庫用來保存我們的images,當我們創建了自己的image之後我們就可以使用push命令將它上傳到公有或者私有倉庫,這樣下次要在另外一臺機器上使用這個image時候,只需要從倉庫上pull下來就可以了。Docker 倉庫的概念跟 Git 類似,註冊服務器可以理解為 GitHub 這樣的托管服務。

一.安裝 Docker

本次實驗環境:騰訊雲服務器 CentOS 6.7 x86_64

前提條件:
Docker運行對內核要求比較高,因此一般建議直接在Ubuntu這樣的平臺運行。但作為一個容器標準,Docker也是支持其他如CentOS, Mac OS X, Windows等平臺。目前Docker支持以下版本CentOS:

  • CentOS 7(64位)
  • CentOS 6.5(64位)及以後
  • 在運行CentOS 6.5及以後版本時,需要內核版本>=2.6.32-431,因為這些內核包含了運行Docker的一些特定修改。

Docker默認使用AUFS作為存儲驅動,但是AUFS並沒有被包括在Linux的主線內核中。CentOS中可以使用Device Mapper作為存儲驅動,這是在2.6.9內核版本引入的新功能。我們需要先確認是否啟用該功能:

CentOS 7

Docker RPM包已經包含在CentOS-Extra倉庫中,所以我們可以直接使用Yum安裝:

# yum install docker

CentOS 6.6

需要註意的是,CentOS6.6中,已經有一個同名docker的可執行系統程序包。所以Docker RPM包命名為docker-io,我們先卸掉docker。

# yum -y remove docker

第三步 Install Docker-IO

# yum -y install docker-io

這樣完成了Docker的安裝。

# /etc/init.d/docker start #啟動docker
# docker info #查看 docker 基本信息

二. Docker 基本操作

# docker run -d --name mynginx nginx   #啟動nginx鏡像,沒有會自動pull
# docker stop bfd094233f96   #停止一個容器,根據容器 id 進行刪除
# docker rm bfd094233f96   #刪除一個容器
# docker attach d20f3dc6cd92  #進入一個正在運行的容器

-t 選項讓Docker分配一個偽終端(pseudo-tty)並綁定到容器的標準輸入上,
-i 則讓容器的標準輸入保持打開。
–name 使用一個自定義的名字

此命令不太好用,建議使用以下命令進入容器:

[root@localhost docker] docker inspect --format "{{.State.Pid}}" mynginx  #獲取容器pid 19769
[root@localhost docker] nsenter --target 19769 --mount --uts --ipc --net --pid  #進入容器(推薦方法)
docker run -d -p 91:80 --name mynginx2 nginx    # -p 指定端口映射,將80映射為host的91

存儲鏡像:

# docker save -o ubuntu_14.04.tar ubuntu:14.04

載入鏡像:

# docker load < ubuntu_14.04.tar  或者使用 
# cat ubuntu.tar |  docker import - test/ubuntu:v1.0

移除本地鏡像:

# docker rmi training/sinatra
清理所有未打過標簽的本地鏡像:

# docker rmi $(docker images -q -f "dangling=true")
其中 -q 和 -f 是 quiet,–filter 的縮寫, 完整的命令其實可以寫著下面這樣,是不是更容易理解一點?

# docker rmi $(docker images --quiet --filter "dangling=true")
註: 容器是否會長久運行,是和docker run指定的命令有關,和 -d 參數無關。

要獲取容器的輸出信息,可以通過 docker logs 命令。
# docker logs [container ID or NAMES]

刪除容器:
# docker rm 默認並不會刪除運行中的容器

有關容器和鏡像的底層信息:
# docker inspect container/image

可以查看:
容器實例的IP地址
端口綁定列表
特定端口映射的搜索
收集配置的詳細信息

從容器內復制文件到指定的路徑上:
# docker cp container:path hostpath

使用Dockerfile來構建鏡像:
# docker build [options] PATH | URL

–rm=true表示構建成功後,移除所有中間容器
–no-cache=false表示在構建過程中不使用緩存

更多信息:https://www.w3cschool.cn/use_docker/

四、Docker compose項目

使用docker就不得不提Docker Compose,它是 Docker 官方編排(Orchestration)項目之一,負責快速在集群中部署分布式應用。它允許用戶通過一個單獨的 docker-compose.
yml 模板文件(YAML 格式)來定義一組相關聯的應用容器為一個項目(project)。就是說,你可以通過docker-compose.yml 模板文件來定義一個服務器集群,服務器集群中的每個服務器就是一個容器,可以配置多個容器之間的網絡連接、端口,容器服務器名稱、服務器中運行的鏡像、服務器的環境配置、啟動命令等。使用的鏡像,可以手動拉取鏡像,也可以自動以docker-compose.yml 構建環境後自動拉取。

Compose 中有兩個重要的概念:

服務(service):一個應用的容器,實際上可以包括若幹運行相同鏡像的容器實例。

項目(project):由一組關聯的應用容器組成的一個完整業務單元,在 dockercompose.yml 文件中定義。

五、Docker compose安裝與卸載

Compose 目前支持 Linux 和 Mac OS 平臺,兩者的安裝過程大同小異。安裝 Compose 之前,要先安裝 Docker(需要 Docker Engine 1.7.1+),Compose 可以通過 Python 的 pip 工具進行安裝,可以直接下載編譯好的二進制文件使用,甚至直接運行在 Docker 容器中。

1)首先安裝epel擴展源:

sudo yum -y install epel-release

2)然後安裝python-pip

sudo yum -y install python-pip

pip install docker-compose

3)版本查詢

docker-compose –v

4)卸載

pip uninstall docker-compose

六、Docker 命令查詢

Docker 命令有兩大類,客戶端命令和服務端命令。前者是主要的操作接口,後者用來啟動 Docker daemon。

客戶端命令:基本命令格式為 docker [OPTIONS] COMMAND [arg...] ;

服務端命令:基本命令格式為 docker daemon [OPTIONS] 。

可以通過 man docker 或 docker help 來查看這些命令。

1)服務端命令:docker daemon [OPTIONS] ,[OPTIONS] 的選項有:

--api-cors-header="":CORS 頭部域,默認不允許 CORS,要允許任意的跨域訪問,可以指定為 “*”;
--authorization-plugin="":載入認證的插件;
-b="":將容器掛載到一個已存在的網橋上。指定為 ‘none‘ 時則禁用容器的網絡,與 --bip 選項互斥;
--bip="":讓動態創建的 docker0 網橋采用給定的 CIDR 地址; 與 -b 選項互斥;
--cgroup-parent="":指定 cgroup 的父組,默認 fs cgroup 驅動為/docker ,systemd cgroup 驅動為 system.slice ;
--cluster-store="":構成集群(如 Swarm)時,集群鍵值數據庫服務地址;
--cluster-advertise="":構成集群時,自身的被訪問地址,可以為host:port 或 interface:port ;
--cluster-store-opt="":構成集群時,鍵值數據庫的配置選項;
--config-file="/etc/docker/daemon.json":daemon 配置文件路徑;
--containerd="":containerd 文件的路徑;
-D, --debug=true|false:是否使用 Debug 模式。缺省為 false;
--default-gateway="":容器的 IPv4 網關地址,必須在網橋的子網段內;
--default-gateway-v6="":容器的 IPv6 網關地址;
--default-ulimit=[]:默認的 ulimit 值;
--disable-legacy-registry=true|false:是否允許訪問舊版本的鏡像倉庫服務器;
--dns="":指定容器使用的 DNS 服務器地址;
--dns-opt="":DNS 選項;
--dns-search=[]:DNS 搜索域;
--exec-opt=[]:運行時的執行選項;
--exec-root="":容器執行狀態文件的根路徑,默認為 /var/run/docker ;
--fixed-cidr="":限定分配 IPv4 地址範圍;
--fixed-cidr-v6="":限定分配 IPv6 地址範圍;
-G, --group="":分配給 unix 套接字的組,默認為 docker ;
-g, --graph="":Docker 運行時的根路徑,默認為 /var/lib/docker ;
-H, --host=[]:指定命令對應 Docker daemon 的監聽接口,可以為 unix 套接字(unix:///path/to/socket),文件句柄(fd://socketfd)或 tcp 套接字(tcp://[host[:port]]),默認為 unix:///var/run/docker.sock;
--icc=true|false:是否啟用容器間以及跟 daemon 所在主機的通信。默認為true。
--insecure-registry=[]:允許訪問給定的非安全倉庫服務;
--ip="":綁定容器端口時候的默認 IP 地址。缺省為 0.0.0.0;
--ip-forward=true|false:是否檢查啟動在 Docker 主機上的啟用 IP 轉發服務,默認開啟。註意關閉該選項將不對系統轉發能力進行任何檢查修改;
--ip-masq=true|false:是否進行地址偽裝,用於容器訪問外部網絡,默認開啟;
--iptables=true|false:是否允許 Docker 添加 iptables 規則。缺省為 true;
--ipv6=true|false:是否啟用 IPv6 支持,默認關閉;

-l, --log-level="debug|info|warn|error|fatal":指定日誌輸出級別;
--label="[]":添加指定的鍵值對標註;
--log-driver="jsonfile|syslog|journald|gelf|fluentd|awslogs|splunk|etwlogs|gcplogs|none":指定日誌後端驅動,默認為 json-file;
--log-opt=[]:日誌後端的選項;
--mtu=VALUE:指定容器網絡的 mtu;
-p="":指定 daemon 的 PID 文件路徑。缺省為 /var/run/docker.pid ;
--raw-logs:輸出原始,未加色彩的日誌信息;
--registry-mirror=://:指定 docker pull 時使用的註冊服務器鏡像地址;
-s, --storage-driver="":指定使用給定的存儲後端;
--selinux-enabled=true|false:是否啟用 SELinux 支持。缺省值為 false。SELinux 目前尚不支持 overlay 存儲驅動;
--storage-opt=[]:驅動後端選項;
--tls=true|false:是否對 Docker daemon 啟用 TLS 安全機制,默認為否;
--tlscacert= /.docker/ca.pem:TLS CA 簽名的可信證書文件路徑;
--tlscert= /.docker/cert.pem:TLS 可信證書文件路徑;
--tlscert= /.docker/key.pem:TLS 密鑰文件路徑;
--tlsverify=true|false:啟用 TLS 校驗,默認為否;
--userland-proxy=true|false:是否使用用戶態代理來實現容器間和出容器的回環通信,默認為 true;
--userns-remap=default|uid:gid|user:group|user|uid:指定容器的用戶命名空間,默認是創建新的 UID 和 GID 映射到容器內進程。

2)客戶端命令:docker [OPTIONS] COMMAND [arg...] ;[OPTIONS] 的選項有:

--config="":指定客戶端配置文件,默認為 /.docker ;
-D=true|false:是否使用 debug 模式。默認不開啟;
-H, --host=[]:指定命令對應 Docker daemon 的監聽接口,可以為 unix 套接字(unix:///path/to/socket),文件句柄(fd://socketfd)或 tcp 套接字(tcp://[host[:port]]),默認為 unix:///var/run/docker.sock;
-l, --log-level="debug|info|warn|error|fatal":指定日誌輸出級別;
--tls=true|false:是否對 Docker daemon 啟用 TLS 安全機制,默認為否;
--tlscacert= /.docker/ca.pem:TLS CA 簽名的可信證書文件路徑;
--tlscert= /.docker/cert.pem:TLS 可信證書文件路徑;
--tlscert= /.docker/key.pem:TLS 密鑰文件路徑;
--tlsverify=true|false:啟用 TLS 校驗,默認為否。

3)客戶端命令:docker [OPTIONS] COMMAND [arg...] ;COMMAND的選項有:

可以使用:docker COMMAND --help 來查看每個命令的具體用法

attach:依附到一個正在運行的容器中;
build:從一個 Dockerfile 創建一個鏡像;
commit:從一個容器的修改中創建一個新的鏡像;
cp:在容器和本地宿主系統之間復制文件中;
create:創建一個新容器,但並不運行它;
diff:檢查一個容器內文件系統的修改,包括修改和增加;
events:從服務端獲取實時的事件;

exec:在運行的容器內執行命令;
export:導出容器內容為一個 tar 包;
history:顯示一個鏡像的歷史信息;
images:列出存在的鏡像;
import:導入一個文件(典型為 tar 包)路徑或目錄來創建一個本地鏡像;
info:顯示一些相關的系統信息;
inspect:顯示一個容器的具體配置信息;
kill:關閉一個運行中的容器 (包括進程和所有相關資源);
load:從一個 tar 包中加載一個鏡像;
login:註冊或登錄到一個 Docker 的倉庫服務器;
logout:從 Docker 的倉庫服務器登出;
logs:獲取容器的 log 信息;
network:管理 Docker 的網絡,包括查看、創建、刪除、掛載、卸載等;
node:管理 swarm 集群中的節點,包括查看、更新、刪除、提升/取消管理節點等;
pause:暫停一個容器中的所有進程;
port:查找一個 nat 到一個私有網口的公共口;
ps:列出主機上的容器;
pull:從一個Docker的倉庫服務器下拉一個鏡像或倉庫;
push:將一個鏡像或者倉庫推送到一個 Docker 的註冊服務器;
rename:重命名一個容器;
restart:重啟一個運行中的容器;
rm:刪除給定的若幹個容器;
rmi:刪除給定的若幹個鏡像;
run:創建一個新容器,並在其中運行給定命令;
save:保存一個鏡像為 tar 包文件;
search:在 Docker index 中搜索一個鏡像;
service:管理 Docker 所啟動的應用服務,包括創建、更新、刪除等;
start:啟動一個容器;
stats:輸出(一個或多個)容器的資源使用統計信息;
stop:終止一個運行中的容器;
swarm:管理 Docker swarm 集群,包括創建、加入、退出、更新等;
tag:為一個鏡像打標簽;
top:查看一個容器中的正在運行的進程信息;
unpause:將一個容器內所有的進程從暫停狀態中恢復;
update:更新指定的若幹容器的配置信息;

version:輸出 Docker 的版本信息;
volume:管理 Docker volume,包括查看、創建、刪除等;
wait:阻塞直到一個容器終止,然後輸出它的退出符。

4)Docker 刪除命令實例

a)刪除一個容器

docker rm <containerID>

b)強制刪除一個容器

docker rm -f <containerID>

c)強制刪除全部容器

docker rm -f $(docker ps -aq)

d)刪除一個鏡像:

docker rmi <imageID>

e)強制刪除一個鏡像:

docker rmi -f <imageID>

f)強制刪除全部鏡像

docker rmi -f $(docker images -q)

5)一張圖總結 Docker 的命令

container事件狀態圖
技術分享圖片

Docker 命令分布圖:

技術分享圖片

七、Docker Compose命令查詢

對於 Compose 來說,大部分命令的對象既可以是項目本身,也可以指定為項目中的服務或者容器。如果沒有特別的說明,命令對象將是項目,這意味著項目中所有的服務都會受到命令影響。執行 docker-compose [COMMAND] --help 或者 docker-compose help [COMMAND] 可以查看具體某個命令的使用格式。

Compose 命令的基本的使用格式是:

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

[options] 選項:

-f, --file FILE 指定使用的 Compose 模板文件,默認為 dockercompose.yml ,可以多次指定。
-p, --project-name NAME 指定項目名稱,默認將使用所在目錄名稱作為項目名。
--x-networking 使用 Docker 的可拔插網絡後端特性(需要 Docker 1.9 及以後版本)。
--x-network-driver DRIVER 指定網絡後端的驅動,默認為 bridge (需要 Docker 1.9 及以後版本)。
--verbose 輸出更多調試信息。
-v, --version 打印版本並退出。

[COMMAND] 選項:

1)build:格式為 docker-compose build [options] [SERVICE...]

構建(重新構建)項目中的服務容器。服務容器一旦構建後,將會帶上一個標記名,例如對於 web 項目中的一個 db 容器,可能是 web_db。可以隨時在項目目錄下運行 docker-compose build 來重新構建服務。

它的[options] 選項包括:

--force-rm 刪除構建過程中的臨時容器。
--no-cache 構建鏡像過程中不使用 cache(這將加長構建過程)。
--pull 始終嘗試通過 pull 來獲取更新版本的鏡像。

2)kill:格式為 docker-compose kill [options] [SERVICE...]

通過發送 SIGKILL 信號來強制停止服務容器。支持通過 -s 參數來指定發送的信號,例如通過如下指令發送 SIGINT 信號:docker-compose kill -s SIGINT

3)logs:格式為 docker-compose logs [options] [SERVICE...]

查看服務容器的輸出。默認情況下,docker-compose 將對不同的服務輸出使用不同的顏色來區分。可以通過 --no-color 來關閉顏色。該命令在調試問題的時候十分有用。

4)pause:格式為 docker-compose pause [SERVICE...]
暫停一個服務容器。

5)port:格式為 docker-compose port [options] SERVICE PRIVATE_PORT
打印某個容器端口所映射的公共端口。
[options] 選項:
--protocol=proto 指定端口協議,tcp(默認值)或者 udp。
--index=index 如果同一服務存在多個容器,指定命令對象容器的序號(默認為 1)。

6)ps:格式為 docker-compose ps [options] [SERVICE...]
列出項目中目前的所有容器。

選項:
-q 只打印容器的 ID 信息。

7)pull:格式為 docker-compose pull [options] [SERVICE...]
拉取服務依賴的鏡像。
選項:
--ignore-pull-failures 忽略拉取鏡像過程中的錯誤。

8)restart:格式為 docker-compose restart [options] [SERVICE...]
重啟項目中的服務。
選項:
-t, --timeout TIMEOUT 指定重啟前停止容器的超時(默認為 10 秒)。

9)rm:格式為 docker-compose rm [options] [SERVICE...]

刪除所有(停止狀態的)服務容器。推薦先執行 docker-compose stop 命令來停止容器。
選項:
-f, --force 強制直接刪除,包括非停止狀態的容器。一般盡量不要使用該選項。
-v 刪除容器所掛載的數據卷。

10)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 容器所關聯的其它容器。
[options] 選項:

-d 後臺運行容器。
--name NAME 為容器指定一個名字。
--entrypoint CMD 覆蓋默認的容器啟動指令。
-e KEY=VAL 設置環境變量值,可多次使用選項來設置多個環境變量。
-u, --user="" 指定運行容器的用戶名或者 uid。
--no-deps 不自動啟動關聯的服務容器。
--rm 運行命令後自動刪除容器, d 模式下將忽略。
-p, --publish=[] 映射容器端口到本地主機。
--service-ports 配置服務端口並映射到本地主機。
-T 不分配偽 tty,意味著依賴 tty 的指令將無法運行。

11)scale:格式為 docker-compose scale [options] [SERVICE=NUM...]
設置指定服務運行的容器個數。通過 service=num 的參數來設置數量。例如:
$ docker-compose scale web=3 db=2
將啟動 3 個容器運行 web 服務,2 個容器運行 db 服務。一般的,當指定數目多於該服務當前實際運行容器,將新創建並啟動容器;反之,停止容器。
選項:
-t, --timeout TIMEOUT 停止容器時候的超時(默認為 10 秒)。

12)start:格式為 docker-compose start [SERVICE...]
啟動已經存在的服務容器。

13)stop:格式為 docker-compose stop [options] [SERVICE...]

停止已經處於運行狀態的容器,但不刪除它。通過 docker-compose start 可以再次啟動這些容器。
選項:
-t, --timeout TIMEOUT 停止容器時候的超時(默認為 10 秒)。

14)unpause:格式為 docker-compose unpause [SERVICE...] 。
恢復處於暫停狀態中的服務。

15)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> 來重新創建服務並後臺停止舊服務,啟動新服務,並不會影響到其所依賴的服務。

[options] 選項:
-d 在後臺運行服務容器。

--no-color 不使用顏色來區分不同的服務的控制臺輸出。
--no-deps 不啟動服務所鏈接的容器。
--force-recreate 強制重新創建容器,不能與 --no-recreate 同時使用。
--no-recreate 如果容器已經存在了,則不重新創建,不能與 --forcerecreate同時使用。
--no-build 不自動構建缺失的服務鏡像。
-t, --timeout TIMEOUT 停止容器時候的超時(默認為 10 秒)。

16)migrate-to-labels:格式為 docker-compose migrate-to-labels 。
重新創建容器,並添加 label。
主要用於升級 1.2 及更早版本中創建的容器,添加缺失的容器標簽。實際上,最徹底的辦法當然是刪除項目,然後重新創建。
17)version:格式為 docker-compose version 。
打印版本信息。

Docker 使用指南 —— 基本操作