Docker 是一個可以把開發應用程序自動部署到容器的開源引擎。它由Docker公司的團隊編寫,基於Apache 2.0開源協議受權。它提供了一個簡單、輕量的建模方式,使開發生命週期更高效快速,鼓勵了面向服務的架構設計。Docker 項目的目標是實現輕量級的操做系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。在 LXC 的基礎上 Docker 進行了進一步的封裝,讓用戶不須要去關心容器的管理,使得操做更爲簡便。用戶操做 Docker 的容器就像操做一個快速輕量級的虛擬機同樣簡單。html
Docker 的特色:node
容器技術與傳統虛擬機性能對比
python
Docker與虛擬機建構對比
linux
Docker 容器本質上是宿主機上的一個進程。Docker 經過 namespace 實現了資源隔離,經過 cgroups 實現了資源的限制,經過寫時複製機制(copy-on-write)實現了高效的文件操做。nginx
Docker有五個命名空間:進程、網絡、掛載、宿主和共享內存,爲了隔離有問題的應用,Docker運用Namespace將進程隔離,爲進程或進程組建立已隔離的運行空間,爲進程提供不一樣的命名空間視圖。這樣,每個隔離出來的進程組,對外就表現爲一個container(容器)。須要注意的是,Docker讓用戶誤覺得本身佔據了所有資源,但這並非」虛擬機」。web
Docker 中的三個概念:鏡像,容器,倉庫docker
鏡像(image):Docker 鏡像就是一個只讀的模板,鏡像能夠用來建立 Docker 容器。Docker 提供了一個很簡單的機制來建立鏡像或者更新現有的鏡像,用戶甚至能夠直接從其餘人那裏下載一個已經作好的鏡像來直接使用。
鏡像是一種文件結構。Dockerfile中的每條命令都會在文件系統中建立一個新的層次結構,文件系統在這些層次上構建起來,鏡像就構建於這些聯合的文件系統之上。Docker官方網站專門有一個頁面來存儲全部可用的鏡像,網址是:index.docker.io。shell
容器( Container):容器是從鏡像建立的運行實例。它能夠被啓動、開始、中止、刪除。每一個容器都是相互隔離的、保證安全的平臺。能夠把容器看作是一個簡易版的 Linux 環境,Docker 利用容器來運行應用。鏡像是隻讀的,容器在啓動的時候建立一層可寫層做爲最上層。數據庫
倉庫:倉庫是集中存放鏡像文件的場所,倉庫註冊服務器(Registry)上每每存放着多個倉庫,每一個倉庫中又包含了多個鏡像,每一個鏡像有不一樣的標籤(tag)。目前,最大的公開倉庫是 Docker Hub,存放了數量龐大的鏡像供用戶下載。json
Docker倉庫用來保存咱們的images,當咱們建立了本身的image以後咱們就可使用push命令將它上傳到公有或者私有倉庫,這樣下次要在另一臺機器上使用這個image時候,只須要從倉庫上pull下來就能夠了。Docker 倉庫的概念跟 Git 相似,註冊服務器能夠理解爲 GitHub 這樣的託管服務。
本次實驗環境:騰訊雲服務器 CentOS 6.7 x86_64
前提條件:
Docker運行對內核要求比較高,所以通常建議直接在Ubuntu這樣的平臺運行。但做爲一個容器標準,Docker也是支持其餘如CentOS, Mac OS X, Windows等平臺。目前Docker支持如下版本CentOS:
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 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/
4、Docker compose項目
使用docker就不得不提Docker Compose,它是 Docker 官方編排(Orchestration)項目之一,負責快速在集羣中部署分佈式應用。它容許用戶經過一個單獨的 docker-compose.
yml 模板文件(YAML 格式)來定義一組相關聯的應用容器爲一個項目(project)。就是說,你能夠經過docker-compose.yml 模板文件來定義一個服務器集羣,服務器集羣中的每一個服務器就是一個容器,能夠配置多個容器之間的網絡鏈接、端口,容器服務器名稱、服務器中運行的鏡像、服務器的環境配置、啓動命令等。使用的鏡像,能夠手動拉取鏡像,也能夠自動以docker-compose.yml 構建環境後自動拉取。
Compose 中有兩個重要的概念:
服務(service):一個應用的容器,實際上能夠包括若干運行相同鏡像的容器實例。
項目(project):由一組關聯的應用容器組成的一個完整業務單元,在 dockercompose.yml 文件中定義。
5、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
6、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 的命令
Docker 命令分佈圖:
7、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 。 打印版本信息。