一 蚕礼、什么是 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