Docker的常規(guī)應(yīng)用手冊(cè)

一 蚕礼、什么是 Docker

Docker 最初是 dotCloud 公司創(chuàng)始人 Solomon Hykes 在法國(guó)期間發(fā)起的一個(gè)公司內(nèi)部項(xiàng)目苗分,它是基于 dotCloud 公司多年云服務(wù)技術(shù)的一次革新,并于 2013 年 3月以 Apache 2.0 授權(quán)協(xié)議開源)汪榔,主要項(xiàng)目代碼在 GitHub 上進(jìn)行維護(hù)。Docker 項(xiàng)目后來(lái)還加入了 Linux 基金會(huì)仓蛆,并成立推動(dòng)開放容器聯(lián)盟睬涧。其主要特點(diǎn)有:

源碼開源,免費(fèi)

使用 Google公司推出的 Go 語(yǔ)言進(jìn)行開發(fā)實(shí)現(xiàn)

基于 Linux 內(nèi)核技術(shù)矗晃,對(duì)進(jìn)程進(jìn)行封裝隔離仑嗅,屬于操作系統(tǒng)層面的虛擬化技術(shù)

由于隔離的進(jìn)程獨(dú)立于宿主和其它的隔離的進(jìn)程,因此也稱其為容器

比虛擬機(jī)技術(shù)更為輕便张症、快捷:傳統(tǒng)虛擬機(jī)技術(shù)是虛擬出一套硬件后仓技,在其上運(yùn)行一個(gè)完整操作系統(tǒng),在該系統(tǒng)上再運(yùn)行所需應(yīng)用進(jìn)程俗他;而容器內(nèi)的應(yīng)用進(jìn)程直接運(yùn)行于宿主的內(nèi)核脖捻,容器內(nèi)沒(méi)有自己的內(nèi)核,而且也沒(méi)有進(jìn)行硬件虛擬兆衅。因此容器要比傳統(tǒng)虛擬機(jī)更為輕便地沮。

更高效的利用系統(tǒng)資源:由于容器不需要進(jìn)行硬件虛擬以及運(yùn)行完整操作系統(tǒng)等額外開銷嗜浮,Docker 對(duì)系統(tǒng)資源的利用率更高。無(wú)論是應(yīng)用執(zhí)行速度摩疑、內(nèi)存損耗或者文件存儲(chǔ)速度危融,都要比傳統(tǒng)虛擬機(jī)技術(shù)更高效

更快速的啟動(dòng)時(shí)間:由于直接運(yùn)行于宿主內(nèi)核,無(wú)需啟動(dòng)完整的操作系統(tǒng)未荒,因此可以做到秒級(jí)专挪、甚至毫秒級(jí)的啟動(dòng)時(shí)間

一致的運(yùn)行環(huán)境:Docker 的鏡像提供了除內(nèi)核外完整的運(yùn)行時(shí)環(huán)境,確保了應(yīng)用運(yùn)行環(huán)境一致性片排,從而不會(huì)再出現(xiàn) “這段代碼在我機(jī)器上沒(méi)問(wèn)題啊” 這類問(wèn)題寨腔。

持續(xù)交付和部署:Docker 可以通過(guò)定制應(yīng)用鏡像來(lái)實(shí)現(xiàn)持續(xù)集成、持續(xù)交付率寡、部署迫卢。開發(fā)人員可以通過(guò) Dockerfile 來(lái)進(jìn)行鏡像構(gòu)建,并結(jié)合 持續(xù)集成(Continuous Integration) 系統(tǒng)進(jìn)行集成測(cè)試冶共,而運(yùn)維人員則可以直接在生產(chǎn)環(huán)境中快速部署該鏡像乾蛤,甚至結(jié)合持續(xù)部署(Continuous Delivery/Deployment) 系統(tǒng)進(jìn)行自動(dòng)部署。

更輕松的遷移:Docker 可以在很多平臺(tái)上運(yùn)行捅僵,無(wú)論是物理機(jī)家卖、虛擬機(jī)、公有云庙楚、私有云上荡,甚至是筆記本,其運(yùn)行結(jié)果是一致的馒闷。因此用戶可以很輕易的將在一個(gè)平臺(tái)上運(yùn)行的應(yīng)用酪捡,遷移到另一個(gè)平臺(tái)上

更輕松的維護(hù)和擴(kuò)展:Docker 使用的分層存儲(chǔ)以及鏡像的技術(shù),使得應(yīng)用重復(fù)部分的復(fù)用更為容易纳账,也使得應(yīng)用的維護(hù)更新更加簡(jiǎn)單逛薇,基于基礎(chǔ)鏡像進(jìn)一步擴(kuò)展鏡像也變得非常簡(jiǎn)單。此外疏虫,Docker 團(tuán)隊(duì)同各個(gè)開源項(xiàng)目團(tuán)隊(duì)一起維護(hù)了一大批高質(zhì)量的官方鏡像永罚,既可以直接在生產(chǎn)環(huán)境使用,又可以作為基礎(chǔ)進(jìn)一步定制卧秘,大大的降低了應(yīng)用服務(wù)的鏡像制作成本呢袱。


二斯议、基本概念

Docker 包括三個(gè)基本概念

鏡像(Image):相當(dāng)于是一個(gè)含操作系統(tǒng)的完整的 root 文件系統(tǒng)。除了提供容器運(yùn)行時(shí)所需的程序坯临、庫(kù)液肌、資源谤祖、配置等文件外,還包含了一些為運(yùn)行時(shí)準(zhǔn)備的一些配置參數(shù)老速,鏡像系統(tǒng)設(shè)計(jì)為分層存儲(chǔ)的架構(gòu)粥喜,由多層文件系統(tǒng)聯(lián)合組成,鏡像構(gòu)建時(shí)橘券,會(huì)一層層構(gòu)建额湘,前一層是后一層的基礎(chǔ)。每一層構(gòu)建完就不會(huì)再發(fā)生改變旁舰,后一層上的任何改變只發(fā)生在自己這一層锋华。

容器(Container):鏡像是靜態(tài)的定義,容器是鏡像運(yùn)行時(shí)的實(shí)體箭窜。容器可以被創(chuàng)建毯焕、啟動(dòng)、停止绽快、刪除芥丧、暫停等。容器的實(shí)質(zhì)是進(jìn)程坊罢,但與直接在宿主執(zhí)行的進(jìn)程不同续担,容器進(jìn)程運(yùn)行于屬于自己的獨(dú)立的 命名空間,每一個(gè)容器運(yùn)行時(shí)活孩,是以鏡像為基礎(chǔ)層物遇,在其上創(chuàng)建一個(gè)當(dāng)前容器的存儲(chǔ)層,當(dāng)容器消亡時(shí)憾儒,容器存儲(chǔ)層也隨之消亡询兴。因此,任何保存于容器存儲(chǔ)層的信息都會(huì)隨容器刪除而丟失起趾。因此诗舰,所有的文件寫入操作,都應(yīng)該使用 數(shù)據(jù)卷(Volume)训裆、或者綁定宿主目錄眶根,在這些位置的讀寫會(huì)跳過(guò)容器存儲(chǔ)層蜀铲,直接對(duì)宿主(或網(wǎng)絡(luò)存儲(chǔ))發(fā)生讀寫,其性能和穩(wěn)定性更高属百。數(shù)據(jù)卷的生存周期獨(dú)立于容器记劝,容器消亡,數(shù)據(jù)卷不會(huì)消亡族扰。

倉(cāng)庫(kù)(Repository):一個(gè)集中的存儲(chǔ)厌丑、分發(fā)鏡像的服務(wù),Docker Registry就是這樣的服務(wù)渔呵。一個(gè) Docker Registry 中可以包含多個(gè)倉(cāng)庫(kù)(Repository)怒竿;每個(gè)倉(cāng)庫(kù)可以包含多個(gè)標(biāo)簽(Tag);每個(gè)標(biāo)簽對(duì)應(yīng)一個(gè)鏡像厘肮。一個(gè)倉(cāng)庫(kù)包含的是同一個(gè)軟件的不同版本的鏡像愧口,而標(biāo)簽則用于對(duì)應(yīng)于軟件的的不同版本。我們可以通過(guò) <倉(cāng)庫(kù)名>:<標(biāo)簽> 的格式來(lái)指定具體是哪個(gè)版本的鏡像类茂。如果不給出標(biāo)簽耍属,將以 latest 作為默認(rèn)標(biāo)簽。例如:ubuntu:14.04 巩检、 ubuntu:16.04來(lái)具體指定所需哪個(gè)版本的鏡像厚骗,而ubuntu ,那將視為ubuntu:latest兢哭。


三领舰、CentOS中的安裝

使用yum源安裝

yum –y install docker

使用官方安裝腳本安裝

curl -sSL?https://get.docker.com/?| sh

使用阿里云的安裝腳本安裝

curl -sSL?http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

版本查詢

docker -v


三、啟動(dòng) Docker 引擎

systemctl enable docker

systemctl start docker


四迟螺、Docker compose項(xiàng)目

使用docker就不得不提Docker Compose冲秽,它是 Docker 官方編排(Orchestration)項(xiàng)目之一,負(fù)責(zé)快速在集群中部署分布式應(yīng)用矩父。它允許用戶通過(guò)一個(gè)單獨(dú)的 docker-compose.

yml 模板文件(YAML 格式)來(lái)定義一組相關(guān)聯(lián)的應(yīng)用容器為一個(gè)項(xiàng)目(project)锉桑。就是說(shuō),你可以通過(guò)docker-compose.yml 模板文件來(lái)定義一個(gè)服務(wù)器集群窍株,服務(wù)器集群中的每個(gè)服務(wù)器就是一個(gè)容器民轴,可以配置多個(gè)容器之間的網(wǎng)絡(luò)連接、端口球订,容器服務(wù)器名稱后裸、服務(wù)器中運(yùn)行的鏡像、服務(wù)器的環(huán)境配置冒滩、啟動(dòng)命令等微驶。使用的鏡像,可以手動(dòng)拉取鏡像开睡,也可以自動(dòng)以docker-compose.yml 構(gòu)建環(huán)境后自動(dòng)拉取因苹。

Compose 中有兩個(gè)重要的概念:

服務(wù)(service):一個(gè)應(yīng)用的容器较店,實(shí)際上可以包括若干運(yùn)行相同鏡像的容器實(shí)例。

項(xiàng)目(project):由一組關(guān)聯(lián)的應(yīng)用容器組成的一個(gè)完整業(yè)務(wù)單元容燕,在 dockercompose.yml 文件中定義。


五婚度、Docker compose安裝與卸載

Compose 目前支持 Linux 和 Mac OS 平臺(tái)蘸秘,兩者的安裝過(guò)程大同小異。安裝 Compose 之前蝗茁,要先安裝 Docker(需要 Docker Engine 1.7.1+)醋虏,Compose 可以通過(guò) Python 的 pip 工具進(jìn)行安裝,可以直接下載編譯好的二進(jìn)制文件使用哮翘,甚至直接運(yùn)行在 Docker 容器中颈嚼。

1)首先安裝epel擴(kuò)展源:

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 命令有兩大類饭寺,客戶端命令和服務(wù)端命令阻课。前者是主要的操作接口,后者用來(lái)啟動(dòng) Docker daemon艰匙。

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

服務(wù)端命令:基本命令格式為?docker daemon [OPTIONS] 。

可以通過(guò) man docker 或 docker help 來(lái)查看這些命令员凝。

1)服務(wù)端命令:docker daemon [OPTIONS] 署驻,[OPTIONS] 的選項(xiàng)有:

--api-cors-header="":CORS 頭部域,默認(rèn)不允許 CORS健霹,要允許任意的跨域訪問(wèn)旺上,可以指定為 “*”;?

--authorization-plugin="":載入認(rèn)證的插件糖埋;

-b="":將容器掛載到一個(gè)已存在的網(wǎng)橋上宣吱。指定為 'none' 時(shí)則禁用容器的網(wǎng)絡(luò),與 --bip 選項(xiàng)互斥阶捆;

--bip="":讓動(dòng)態(tài)創(chuàng)建的 docker0 網(wǎng)橋采用給定的 CIDR 地址; 與 -b 選項(xiàng)互斥凌节;

--cgroup-parent="":指定 cgroup 的父組,默認(rèn) fs cgroup 驅(qū)動(dòng)為/docker 洒试,systemd cgroup 驅(qū)動(dòng)為 system.slice 倍奢;

--cluster-store="":構(gòu)成集群(如 Swarm)時(shí),集群鍵值數(shù)據(jù)庫(kù)服務(wù)地址垒棋;

--cluster-advertise="":構(gòu)成集群時(shí)卒煞,自身的被訪問(wèn)地址,可以為host:port 或 interface:port 叼架;

--cluster-store-opt="":構(gòu)成集群時(shí)畔裕,鍵值數(shù)據(jù)庫(kù)的配置選項(xiàng)衣撬;

--config-file="/etc/docker/daemon.json":daemon 配置文件路徑;

--containerd="":containerd 文件的路徑扮饶;

-D, --debug=true|false:是否使用 Debug 模式具练。缺省為 false;

--default-gateway="":容器的 IPv4 網(wǎng)關(guān)地址甜无,必須在網(wǎng)橋的子網(wǎng)段內(nèi)扛点;

--default-gateway-v6="":容器的 IPv6 網(wǎng)關(guān)地址;

--default-ulimit=[]:默認(rèn)的 ulimit 值岂丘;

--disable-legacy-registry=true|false:是否允許訪問(wèn)舊版本的鏡像倉(cāng)庫(kù)服務(wù)器陵究;

--dns="":指定容器使用的 DNS 服務(wù)器地址;

--dns-opt="":DNS 選項(xiàng)奥帘;

--dns-search=[]:DNS 搜索域铜邮;

--exec-opt=[]:運(yùn)行時(shí)的執(zhí)行選項(xiàng);

--exec-root="":容器執(zhí)行狀態(tài)文件的根路徑寨蹋,默認(rèn)為 /var/run/docker 松蒜;

--fixed-cidr="":限定分配 IPv4 地址范圍;

--fixed-cidr-v6="":限定分配 IPv6 地址范圍已旧;

-G, --group="":分配給 unix 套接字的組牍鞠,默認(rèn)為 docker ;

-g, --graph="":Docker 運(yùn)行時(shí)的根路徑评姨,默認(rèn)為 /var/lib/docker 难述;

-H, --host=[]:指定命令對(duì)應(yīng) Docker daemon 的監(jiān)聽接口,可以為 unix 套接字(unix:///path/to/socket)吐句,文件句柄(fd://socketfd)或 tcp 套接字(tcp://[host[:port]])胁后,默認(rèn)為 unix:///var/run/docker.sock;

--icc=true|false:是否啟用容器間以及跟 daemon 所在主機(jī)的通信嗦枢。默認(rèn)為true攀芯。

--insecure-registry=[]:允許訪問(wèn)給定的非安全倉(cāng)庫(kù)服務(wù);

--ip="":綁定容器端口時(shí)候的默認(rèn) IP 地址文虏。缺省為 0.0.0.0侣诺;

--ip-forward=true|false:是否檢查啟動(dòng)在 Docker 主機(jī)上的啟用 IP 轉(zhuǎn)發(fā)服務(wù),默認(rèn)開啟氧秘。注意關(guān)閉該選項(xiàng)將不對(duì)系統(tǒng)轉(zhuǎn)發(fā)能力進(jìn)行任何檢查修改年鸳;

--ip-masq=true|false:是否進(jìn)行地址偽裝,用于容器訪問(wèn)外部網(wǎng)絡(luò)丸相,默認(rèn)開啟搔确;

--iptables=true|false:是否允許 Docker 添加 iptables 規(guī)則。缺省為 true;

--ipv6=true|false:是否啟用 IPv6 支持膳算,默認(rèn)關(guān)閉座硕;

-l, --log-level="debug|info|warn|error|fatal":指定日志輸出級(jí)別;?

--label="[]":添加指定的鍵值對(duì)標(biāo)注涕蜂;

--log-driver="jsonfile|syslog|journald|gelf|fluentd|awslogs|splunk|etwlogs|gcplogs|none":指定日志后端驅(qū)動(dòng)华匾,默認(rèn)為 json-file;

--log-opt=[]:日志后端的選項(xiàng)机隙;

--mtu=VALUE:指定容器網(wǎng)絡(luò)的 mtu瘦真;

-p="":指定 daemon 的 PID 文件路徑。缺省為 /var/run/docker.pid 黍瞧;

--raw-logs:輸出原始,未加色彩的日志信息原杂;

--registry-mirror=://:指定 docker pull 時(shí)使用的注冊(cè)服務(wù)器鏡像地址印颤;

-s, --storage-driver="":指定使用給定的存儲(chǔ)后端;

--selinux-enabled=true|false:是否啟用 SELinux 支持穿肄。缺省值為 false年局。SELinux 目前尚不支持 overlay 存儲(chǔ)驅(qū)動(dòng);

--storage-opt=[]:驅(qū)動(dòng)后端選項(xiàng)咸产;

--tls=true|false:是否對(duì) Docker daemon 啟用 TLS 安全機(jī)制矢否,默認(rèn)為否;

--tlscacert= /.docker/ca.pem:TLS CA 簽名的可信證書文件路徑脑溢;

--tlscert= /.docker/cert.pem:TLS 可信證書文件路徑僵朗;

--tlscert= /.docker/key.pem:TLS 密鑰文件路徑;

--tlsverify=true|false:?jiǎn)⒂?TLS 校驗(yàn)屑彻,默認(rèn)為否验庙;

--userland-proxy=true|false:是否使用用戶態(tài)代理來(lái)實(shí)現(xiàn)容器間和出容器的回環(huán)通信,默認(rèn)為 true社牲;

--userns-remap=default|uid:gid|user:group|user|uid:指定容器的用戶命名空間粪薛,默認(rèn)是創(chuàng)建新的 UID 和 GID 映射到容器內(nèi)進(jìn)程。

2)客戶端命令:docker [OPTIONS] COMMAND [arg...] 搏恤;[OPTIONS] 的選項(xiàng)有:

--config="":指定客戶端配置文件违寿,默認(rèn)為 /.docker ;?

-D=true|false:是否使用 debug 模式熟空。默認(rèn)不開啟藤巢;

-H, --host=[]:指定命令對(duì)應(yīng) Docker daemon 的監(jiān)聽接口,可以為 unix 套接字(unix:///path/to/socket)息罗,文件句柄(fd://socketfd)或 tcp 套接字(tcp://[host[:port]])菌瘪,默認(rèn)為 unix:///var/run/docker.sock;

-l, --log-level="debug|info|warn|error|fatal":指定日志輸出級(jí)別;

--tls=true|false:是否對(duì) Docker daemon 啟用 TLS 安全機(jī)制俏扩,默認(rèn)為否糜工;

--tlscacert= /.docker/ca.pem:TLS CA 簽名的可信證書文件路徑;

--tlscert= /.docker/cert.pem:TLS 可信證書文件路徑录淡;

--tlscert= /.docker/key.pem:TLS 密鑰文件路徑捌木;

--tlsverify=true|false:?jiǎn)⒂?TLS 校驗(yàn),默認(rèn)為否嫉戚。

3)客戶端命令:docker [OPTIONS] COMMAND [arg...] 刨裆;COMMAND的選項(xiàng)有:

可以使用:docker?? COMMAND? --help 來(lái)查看每個(gè)命令的具體用法

attach:依附到一個(gè)正在運(yùn)行的容器中;?

build:從一個(gè) Dockerfile 創(chuàng)建一個(gè)鏡像彬檀;

commit:從一個(gè)容器的修改中創(chuàng)建一個(gè)新的鏡像帆啃;

cp:在容器和本地宿主系統(tǒng)之間復(fù)制文件中;

create:創(chuàng)建一個(gè)新容器窍帝,但并不運(yùn)行它努潘;

diff:檢查一個(gè)容器內(nèi)文件系統(tǒng)的修改,包括修改和增加坤学;

events:從服務(wù)端獲取實(shí)時(shí)的事件疯坤;

exec:在運(yùn)行的容器內(nèi)執(zhí)行命令;?

export:導(dǎo)出容器內(nèi)容為一個(gè) tar 包深浮;

history:顯示一個(gè)鏡像的歷史信息压怠;

images:列出存在的鏡像;

import:導(dǎo)入一個(gè)文件(典型為 tar 包)路徑或目錄來(lái)創(chuàng)建一個(gè)本地鏡像飞苇;

info:顯示一些相關(guān)的系統(tǒng)信息菌瘫;

inspect:顯示一個(gè)容器的具體配置信息;

kill:關(guān)閉一個(gè)運(yùn)行中的容器 (包括進(jìn)程和所有相關(guān)資源)布卡;

load:從一個(gè) tar 包中加載一個(gè)鏡像突梦;

login:注冊(cè)或登錄到一個(gè) Docker 的倉(cāng)庫(kù)服務(wù)器;

logout:從 Docker 的倉(cāng)庫(kù)服務(wù)器登出羽利;

logs:獲取容器的 log 信息宫患;

network:管理 Docker 的網(wǎng)絡(luò),包括查看这弧、創(chuàng)建娃闲、刪除、掛載匾浪、卸載等皇帮;

node:管理 swarm 集群中的節(jié)點(diǎn),包括查看蛋辈、更新属拾、刪除将谊、提升/取消管理節(jié)點(diǎn)等;

pause:暫停一個(gè)容器中的所有進(jìn)程渐白;

port:查找一個(gè) nat 到一個(gè)私有網(wǎng)口的公共口尊浓;

ps:列出主機(jī)上的容器;

pull:從一個(gè)Docker的倉(cāng)庫(kù)服務(wù)器下拉一個(gè)鏡像或倉(cāng)庫(kù)纯衍;

push:將一個(gè)鏡像或者倉(cāng)庫(kù)推送到一個(gè) Docker 的注冊(cè)服務(wù)器栋齿;

rename:重命名一個(gè)容器;

restart:重啟一個(gè)運(yùn)行中的容器襟诸;

rm:刪除給定的若干個(gè)容器瓦堵;

rmi:刪除給定的若干個(gè)鏡像;

run:創(chuàng)建一個(gè)新容器歌亲,并在其中運(yùn)行給定命令菇用;

save:保存一個(gè)鏡像為 tar 包文件;

search:在 Docker index 中搜索一個(gè)鏡像陷揪;

service:管理 Docker 所啟動(dòng)的應(yīng)用服務(wù)惋鸥,包括創(chuàng)建、更新鹅龄、刪除等;

start:?jiǎn)?dòng)一個(gè)容器亭畜;

stats:輸出(一個(gè)或多個(gè))容器的資源使用統(tǒng)計(jì)信息扮休;

stop:終止一個(gè)運(yùn)行中的容器;

swarm:管理 Docker swarm 集群拴鸵,包括創(chuàng)建玷坠、加入、退出劲藐、更新等八堡;

tag:為一個(gè)鏡像打標(biāo)簽;

top:查看一個(gè)容器中的正在運(yùn)行的進(jìn)程信息聘芜;

unpause:將一個(gè)容器內(nèi)所有的進(jìn)程從暫停狀態(tài)中恢復(fù)兄渺;

update:更新指定的若干容器的配置信息;

version:輸出 Docker 的版本信息汰现;?

volume:管理 Docker volume挂谍,包括查看、創(chuàng)建瞎饲、刪除等口叙;

wait:阻塞直到一個(gè)容器終止,然后輸出它的退出符嗅战。

4)Docker 刪除命令實(shí)例

a)刪除一個(gè)容器

docker rm

b)強(qiáng)制刪除一個(gè)容器

docker rm -f

c)強(qiáng)制刪除全部容器

docker rm -f $(docker ps -aq)

d)刪除一個(gè)鏡像:

docker rmi

e)強(qiáng)制刪除一個(gè)鏡像:

docker rmi -f

f)強(qiáng)制刪除全部鏡像

docker rmi -f $(docker images -q)

5)一張圖總結(jié) Docker 的命令

container事件狀態(tài)圖?

Docker 命令分布圖:


七妄田、Docker Compose命令查詢

對(duì)于 Compose 來(lái)說(shuō),大部分命令的對(duì)象既可以是項(xiàng)目本身,也可以指定為項(xiàng)目中的服務(wù)或者容器疟呐。如果沒(méi)有特別的說(shuō)明脚曾,命令對(duì)象將是項(xiàng)目,這意味著項(xiàng)目中所有的服務(wù)都會(huì)受到命令影響萨醒。執(zhí)行 docker-compose [COMMAND] --help 或者 docker-compose help [COMMAND] 可以查看具體某個(gè)命令的使用格式斟珊。

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

docker-compose [-f=...] [options] [COMMAND] [ARGS...]

[options]?選項(xiàng):

-f, --file FILE 指定使用的 Compose 模板文件,默認(rèn)為 dockercompose.yml 富纸,可以多次指定囤踩。?

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

--x-networking 使用 Docker 的可拔插網(wǎng)絡(luò)后端特性(需要 Docker 1.9 及以后版本)堵漱。

--x-network-driver DRIVER 指定網(wǎng)絡(luò)后端的驅(qū)動(dòng),默認(rèn)為 bridge (需要 Docker 1.9 及以后版本)涣仿。

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

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

[COMMAND] 選項(xiàng):

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

構(gòu)建(重新構(gòu)建)項(xiàng)目中的服務(wù)容器好港。服務(wù)容器一旦構(gòu)建后愉镰,將會(huì)帶上一個(gè)標(biāo)記名,例如對(duì)于 web 項(xiàng)目中的一個(gè) db 容器钧汹,可能是 web_db丈探。可以隨時(shí)在項(xiàng)目目錄下運(yùn)行 docker-compose build 來(lái)重新構(gòu)建服務(wù)拔莱。

它的[options] 選項(xiàng)包括:

--force-rm 刪除構(gòu)建過(guò)程中的臨時(shí)容器碗降。?

--no-cache 構(gòu)建鏡像過(guò)程中不使用 cache(這將加長(zhǎng)構(gòu)建過(guò)程)。

--pull 始終嘗試通過(guò) pull 來(lái)獲取更新版本的鏡像塘秦。

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

通過(guò)發(fā)送 SIGKILL 信號(hào)來(lái)強(qiáng)制停止服務(wù)容器讼渊。支持通過(guò) -s 參數(shù)來(lái)指定發(fā)送的信號(hào),例如通過(guò)如下指令發(fā)送 SIGINT 信號(hào):docker-compose kill -s SIGINT

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

查看服務(wù)容器的輸出尊剔。默認(rèn)情況下爪幻,docker-compose 將對(duì)不同的服務(wù)輸出使用不同的顏色來(lái)區(qū)分⌒胛螅可以通過(guò) --no-color 來(lái)關(guān)閉顏色笔咽。該命令在調(diào)試問(wèn)題的時(shí)候十分有用。

4)pause:格式為 docker-compose pause [SERVICE...]?

暫停一個(gè)服務(wù)容器霹期。

5)port:格式為 docker-compose port [options] SERVICE PRIVATE_PORT?

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

[options] 選項(xiàng):

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

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

6)ps:格式為 docker-compose ps [options] [SERVICE...]?

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

選項(xiàng):?

-q 只打印容器的 ID 信息侣监。

7)pull:格式為 docker-compose pull [options] [SERVICE...]?

拉取服務(wù)依賴的鏡像鸭轮。

選項(xiàng):

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

8)restart:格式為 docker-compose restart [options] [SERVICE...]?

重啟項(xiàng)目中的服務(wù)橄霉。

選項(xiàng):

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

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

刪除所有(停止?fàn)顟B(tài)的)服務(wù)容器。推薦先執(zhí)行 docker-compose stop 命令來(lái)停止容器姓蜂。?

選項(xiàng):

-f, --force 強(qiáng)制直接刪除按厘,包括非停止?fàn)顟B(tài)的容器。一般盡量不要使用該選項(xiàng)钱慢。

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

10)run:格式為 docker-compose run [options] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]?

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

例如:

$ 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)的其它容器添吗。

[options] 選項(xiàng):

-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)行毙玻。

11)scale:格式為 docker-compose scale [options] [SERVICE=NUM...]?

設(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)容器幌氮;反之,停止容器戳吝。

選項(xiàng):

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

12)start:格式為 docker-compose start [SERVICE...]?

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

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

停止已經(jīng)處于運(yùn)行狀態(tài)的容器听哭,但不刪除它慢洋。通過(guò) docker-compose start 可以再次啟動(dòng)這些容器。?

選項(xiàng):

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

14)unpause:格式為 docker-compose unpause [SERVICE...] 普筹。

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

15)up:格式為 docker-compose up [options] [SERVICE...] 隘马。

該命令十分強(qiáng)大太防,它將嘗試自動(dòng)完成包括構(gòu)建鏡像,(重新)創(chuàng)建服務(wù)酸员,啟動(dòng)服務(wù)蜒车,并關(guān)聯(lián)服務(wù)相關(guān)容器的一系列操作。

鏈接的服務(wù)都將會(huì)被自動(dòng)啟動(dòng)幔嗦,除非已經(jīng)處于運(yùn)行狀態(tài)酿愧。可以說(shuō)邀泉,大部分時(shí)候都可以直接通過(guò)該命令來(lái)啟動(dòng)一個(gè)項(xiàng)目嬉挡。

默認(rèn)情況, docker-compose up 啟動(dòng)的容器都在前臺(tái)汇恤,控制臺(tái)將會(huì)同時(shí)打印所有容器的輸出信息庞钢,可以很方便進(jìn)行調(diào)試。當(dāng)通過(guò) Ctrl-C 停止命令時(shí)因谎,所有容器將會(huì)停止基括。

如果使用 docker-compose up -d ,將會(huì)在后臺(tái)啟動(dòng)并運(yùn)行所有的容器财岔。一般推薦生產(chǎn)環(huán)境下使用該選項(xiàng)风皿。

默認(rèn)情況饭冬,如果服務(wù)容器已經(jīng)存在, docker-compose up 將會(huì)嘗試停止容器揪阶,然后重新創(chuàng)建(保持使用 volumes-from 掛載的卷)昌抠,以保證新啟動(dòng)的服務(wù)匹配docker-compose.yml 文件的最新內(nèi)容。如果用戶不希望容器被停止并重新創(chuàng)建鲁僚,可以使用 docker-compose up --no-recreate 炊苫。這樣將只會(huì)啟動(dòng)處于停止?fàn)顟B(tài)的容器,而忽略已經(jīng)運(yùn)行的服務(wù)冰沙。如果用戶只想重新部署某個(gè)服務(wù)侨艾,可以使用docker-compose up --no-deps -d 來(lái)重新創(chuàng)建服務(wù)并后臺(tái)停止舊服務(wù),啟動(dòng)新服務(wù)拓挥,并不會(huì)影響到其所依賴的服務(wù)唠梨。

[options] 選項(xiàng):?

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

--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)建,不能與 --forcerecreate同時(shí)使用赁炎。

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

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

16)migrate-to-labels:格式為 docker-compose migrate-to-labels 徙垫。

重新創(chuàng)建容器讥裤,并添加 label。

主要用于升級(jí) 1.2 及更早版本中創(chuàng)建的容器姻报,添加缺失的容器標(biāo)簽己英。實(shí)際上,最徹底的辦法當(dāng)然是刪除項(xiàng)目逗抑,然后重新創(chuàng)建剧辐。

17)version:格式為 docker-compose version 寒亥。

打印版本信息邮府。

原文鏈接:http://blog.51cto.com/newthink/1898398

更詳細(xì)的了解參考:https://doc.yonyoucloud.com/doc/docker_practice/index.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市溉奕,隨后出現(xiàn)的幾起案子褂傀,更是在濱河造成了極大的恐慌,老刑警劉巖加勤,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仙辟,死亡現(xiàn)場(chǎng)離奇詭異同波,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)叠国,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門未檩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人粟焊,你說(shuō)我怎么就攤上這事冤狡。” “怎么了项棠?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵悲雳,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我香追,道長(zhǎng)合瓢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任透典,我火速辦了婚禮晴楔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘峭咒。我一直安慰自己滥崩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布讹语。 她就那樣靜靜地躺著钙皮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪顽决。 梳的紋絲不亂的頭發(fā)上短条,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音才菠,去河邊找鬼茸时。 笑死,一個(gè)胖子當(dāng)著我的面吹牛赋访,可吹牛的內(nèi)容都是我干的可都。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼蚓耽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼渠牲!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起步悠,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤签杈,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后鼎兽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體答姥,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铣除,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鹦付。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尚粘。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖敲长,靈堂內(nèi)的尸體忽然破棺而出背苦,到底是詐尸還是另有隱情,我是刑警寧澤潘明,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布行剂,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜魂角,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铲觉。 院中可真熱鬧,春花似錦吓坚、人聲如沸撵幽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盐杂。三九已至,卻和暖如春哆窿,著一層夾襖步出監(jiān)牢的瞬間链烈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工挚躯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留强衡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓码荔,卻偏偏與公主長(zhǎng)得像漩勤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缩搅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容