Compose簡(jiǎn)介
Compose項(xiàng)目是Docker官方的開(kāi)源項(xiàng)目,負(fù)責(zé)實(shí)現(xiàn)對(duì)Docker容器集群的快速編排。其代碼目前在https://github.com/docker/compose
上開(kāi)源。
Compose定位是定義和運(yùn)行多個(gè)Docker容器的應(yīng)用,其前身是開(kāi)源項(xiàng)目Fig。
通過(guò)前面內(nèi)容的介紹,我們知道使用一個(gè)Dockerfile模板文件,可以讓用戶很方便的定義一個(gè)單獨(dú)的應(yīng)用容器。然而,在日常工作中,經(jīng)常會(huì)碰到需要多個(gè)容器相互配合來(lái)完成某任務(wù)的情況。例如要實(shí)現(xiàn)一個(gè)Web項(xiàng)目,除了Web服務(wù)容器本身,往往還需要加上后端的數(shù)據(jù)庫(kù)服務(wù)容器,甚至還包括負(fù)載均衡容器等。
Compose恰好滿足了這樣的需求。它允許用戶通過(guò)一個(gè)單獨(dú)的docker-compose.yml模板文件來(lái)定義一組相關(guān)聯(lián)的應(yīng)用容器為一個(gè)項(xiàng)目(project)。
Compose中有兩個(gè)重要的概念:
* 服務(wù)(service):一個(gè)應(yīng)用的容器,實(shí)際上可以包括若干運(yùn)行相同鏡像的容器實(shí)例。
* 項(xiàng)目(project):由一組關(guān)聯(lián)的應(yīng)用容器組成的一個(gè)完整業(yè)務(wù)單元。
Compose的默認(rèn)管理對(duì)象是項(xiàng)目,通過(guò)子命令對(duì)項(xiàng)目中的一組容器進(jìn)行便捷地生命周期管理。
Compose項(xiàng)目由Python編寫,實(shí)現(xiàn)上調(diào)用了Docker服務(wù)提供的API來(lái)對(duì)容器進(jìn)行管理。
安裝和卸載
Compose支持Linux、macOS、Windows10三大平臺(tái)。
Compose可以通過(guò)Python的包管理工具pip進(jìn)行安裝,也可以直接下載編譯好的二進(jìn)制文件使用,甚至能夠直接在Docker容器中運(yùn)行。
Docker for Mac、Docker for Windows自帶docker-compose二進(jìn)制文件,安裝Docker之后可以直接使用。
docker-compose --version
Linux系統(tǒng)需要單獨(dú)使用二進(jìn)制或者pip方式進(jìn)行安裝。
Linux安裝docker-compose
二進(jìn)制包
在Linux上的安裝十分簡(jiǎn)單,從官方GitHub Release處直接下載編譯好的二進(jìn)制文件即可。例如,在Linux64位系統(tǒng)上直接下載對(duì)應(yīng)的二進(jìn)制包。
sudo curl -L
"https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname
-s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x
/usr/local/bin/docker-compose #賦予可執(zhí)行權(quán)限
PIP安裝
如果您計(jì)算機(jī)的架構(gòu)是ARM(例如,樹(shù)莓派),建議使用pip安裝。
sudo pip install -U docker-compose
使用
場(chǎng)景:最常見(jiàn)的項(xiàng)目是web網(wǎng)站,一般的web網(wǎng)站都會(huì)依賴第三方提供的服務(wù)(比如:DB和cache),我們拿dubbo-admin進(jìn)行講解(dubbo-admin依賴zookeeper)。
Compose構(gòu)建dubbo-admin服務(wù)
從github上獲取dubbo-admin的master分支源碼
git clone -b master https://github.com/apache/incubator-dubbo-ops.git
修改admin中的application配置,把zookeeper地址改為zookeeper://zookeeper:2181
使用maven進(jìn)行編譯打包
mvn clean package -Dmaven.test.skip=true
在dubbo-admin目錄下編寫Dockerfile文件,內(nèi)容為
# FROM,表示使用JDK8環(huán)境為基礎(chǔ)鏡像,如果鏡像不是本地會(huì)從DockerHub進(jìn)行下載 FROM openjdk:8-jdk-alpine # 作者
MAINTAINER Simon<[email protected]> VOLUME /tmp # ADD,拷貝文件并且重命名 ADD
./target/dubbo-admin-0.0.1-SNAPSHOT.jar app.jar #
ENTRYPOINT,為了縮短Tomcat啟動(dòng)時(shí)間,添加java.security.egd的系統(tǒng)屬性指向/dev/urandom作為ENTRYPOINT
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
使用docker build -t dubbo-admin:1.0 .命令進(jìn)行構(gòu)建。
在項(xiàng)目根目錄下編寫docker-compose.yml文件,這個(gè)是Compose使用的主模板文件。
version: '3.4' services: zk_server: image: zookeeper:3.4 ports: - 2181:2181
dubbo-admin: image: dubbo-admin:1.0 links: - zk_server:zookeeper depends_on: -
zk_server ports: - 7001:7001
在docker-compose.yml文件所在目錄執(zhí)行:
docker-compose up
在瀏覽器中訪問(wèn)http://服務(wù)器ip:7001 進(jìn)行驗(yàn)證,用戶名密碼為:root/root guest/guest
Compose命令說(shuō)明
命令對(duì)象與格式
執(zhí)行docker-compose [COMMAND] --help或者docker-compose help
[COMMAND]可以查看具體某個(gè)命令的使用格式。
docker-compose命令的基本的使用格式是:
docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
命令選項(xiàng)
* -f,--file FILE指定模板文件,默認(rèn)為docker-compose.yml,可以多次指定。
* -p,--project-name NAME指定項(xiàng)目名稱,默認(rèn)將使用所在目錄名稱作為項(xiàng)目名。
* --x-networking使用Docker的可拔插網(wǎng)絡(luò)后端特性
* --x-network-driver DRIVER指定網(wǎng)絡(luò)后端的驅(qū)動(dòng),默認(rèn)為bridge
* --verbose輸出更多調(diào)試信息。
* -v,--version打印版本并退出。
build
格式為docker-compose build [options] [SERVICE...]。 構(gòu)建(重新構(gòu)建)項(xiàng)目中的服務(wù)容器。
可以隨時(shí)在項(xiàng)目目錄下運(yùn)行docker-compose build來(lái)重新構(gòu)建服務(wù)。 選項(xiàng)包括: * --force-rm 刪除構(gòu)建過(guò)程中的臨時(shí)容器。 *
--no-cache 構(gòu)建鏡像過(guò)程中不使用cache(將加長(zhǎng)構(gòu)建過(guò)程)。 * --pull 始終嘗試通過(guò)pull來(lái)獲取更新版本的鏡像。
logs
格式為docker-compose logs [options] [SERVICE...]。
查看服務(wù)容器的輸出。默認(rèn)情況下,docker-compose將對(duì)不同的服務(wù)輸出使用不同的顏色來(lái)區(qū)分??梢酝ㄟ^(guò)--no-color來(lái)關(guān)閉顏色。
port
格式為docker-compose port [options] SERVICE PRIVATE_PORT。 打印某個(gè)容器端口所映射的公共端口。 選項(xiàng):
--protocol=proto指定端口協(xié)議,tcp(默認(rèn)值)或者udp。
--index=index如果同一服務(wù)存在多個(gè)容器,指定命令對(duì)象容器的序號(hào)(默認(rèn)為1)。
ps
格式為docker-compose ps [options] [SERVICE...] 列出項(xiàng)目中目前的所有容器。 選項(xiàng): -q只打印容器的ID信息。
pull
格式為docker-compose pull [options] [SERVICE...]。 拉取服務(wù)依賴的鏡像。 選項(xiàng):
--ignore-pull-failures忽略拉取鏡像過(guò)程中的錯(cuò)誤。
restart
格式為docker-compose restart [options] [SERVICE...] 重啟項(xiàng)目中的服務(wù)。 選項(xiàng): -t,--timeout
TIMEOUT指定重啟前停止容器的超時(shí)(默認(rèn)為10秒)。
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ù)卷。
run
格式為docker-compose run[options] [-p PORT...][-e KEY=VAL...] SERVICE [COMMAND]
[ARGS...] 在指定服務(wù)上執(zhí)行一個(gè)命令。例如: docker-compose run ubuntu ping docker.com
scale
格式為docker-compose scal [options] [SERVICE=NUM...] 設(shè)置指定服務(wù)運(yùn)行的容器個(gè)數(shù)。例如:
docker-compose scale web=3 db=2 將啟動(dòng)3個(gè)容器運(yùn)行web服務(wù),2個(gè)容器運(yùn)行db服務(wù)。
up
該命令十分強(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)。
選項(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)建,不能與--force-recreate同時(shí)使用。 --no-build 不自動(dòng)構(gòu)建缺失的服務(wù)鏡像。
-t,--timeout TIMEOUT停止容器時(shí)候的超時(shí)(默認(rèn)為10秒)。
其它命令如下:
命令 說(shuō)明
version 格式為docker-compose version,打印版本信息
config 驗(yàn)證Compose格式是否正確,若正確則顯示配置,若格式錯(cuò)誤顯示錯(cuò)誤原因。
exec 進(jìn)入指定的容器
images 列出Compose文件中包含的鏡像
down 停止up命令所啟動(dòng)的容器,并移除網(wǎng)絡(luò)。
help 獲得一個(gè)命令的幫助
kill 通過(guò)發(fā)送SIGKILL信號(hào)來(lái)強(qiáng)制停止服務(wù)容器
pause 格式為docker-compose pause [SERVICE...],暫停一個(gè)服務(wù)容器。
push 推送服務(wù)依賴的鏡像到Docker鏡像倉(cāng)庫(kù)
start 格式為docker-compose start[SERVICE...],啟動(dòng)已經(jīng)存在的服務(wù)容器。
stop 停止已經(jīng)存在的服務(wù)容器。
top 查看各個(gè)服務(wù)容器內(nèi)運(yùn)行的進(jìn)程
unpause 格式為docker-compose unpause [SERVICE...],恢復(fù)處于暫停狀態(tài)中的服務(wù)。
Compose模板文件
模板文件是使用Compose的核心,涉及到的指令關(guān)鍵字也比較多,大部分指令跟docker run 相關(guān)參數(shù)的含義都類似。
默認(rèn)的模板文件名稱為docker-compose.yml,格式為YAML格式。
注意每個(gè)服務(wù)都必須通過(guò)image指令指定鏡像或build指令(需要Dockerfile)等來(lái)自動(dòng)構(gòu)建生成鏡像。
如果使用build指令,在Dockerfile中設(shè)置的選項(xiàng)(例如:CMD,EXPOSE,VOLUME,ENV等)將會(huì)自動(dòng)被獲取,無(wú)需在docker-compose.yml中再次設(shè)置。下面介紹常用指令的用法。
version: '3' services: webapp: build: context: ./dir dockerfile:
Dockerfile-alternate args: buildno: 1
build
指令Dockerfile所在文件夾的路徑(可以是絕對(duì)路徑,或者相對(duì)docker-compose.yml文件的路徑)。
Compose將會(huì)利用它自動(dòng)構(gòu)建這個(gè)鏡像,然后使用這個(gè)鏡像。 使用context指令指定Dockerfile所在文件夾的路徑
使用dockerfile指令指定Dockerfile文件名 使用arg指令指定構(gòu)建鏡像時(shí)的變量
command
覆蓋容器啟動(dòng)后默認(rèn)執(zhí)行的命令。
command:echo "hello world"
Container_name
指令容器名稱。默認(rèn)將會(huì)使用項(xiàng)目名稱_服務(wù)名稱_序號(hào)這樣的格式。
container_name:docker-web-container
configs
僅用于Swarm mode, 詳細(xì)內(nèi)容后頁(yè)面swarm mode會(huì)進(jìn)到。
deploy
僅用于Swarm mode,詳細(xì)內(nèi)容后面swarm mode會(huì)進(jìn)到。
devices
指定設(shè)備映射關(guān)系。
devices: - "/dev/ttyUSB1:/ttyUSB0"
depends_on
解決容器的依賴、啟動(dòng)先后的問(wèn)題。
dns
自定義DNS服務(wù)器??梢允且粋€(gè)值,也可以是一個(gè)列表。
dns: 8.8.8.8 dns: - 8.8.8.8 - 114.114.114.114
environment
設(shè)置環(huán)境變量。你可以使用數(shù)組或字典兩種格式。
只給定名稱的變量會(huì)自動(dòng)獲取運(yùn)行Compose主機(jī)上對(duì)應(yīng)變量的值,可以用來(lái)防止泄露不必要的數(shù)據(jù)。
environment: RACK_ENV: development SESSION_SECRET: environment: -
RACK_ENV=development - SESSION_SECRET
expose
顯露端口,但不映射到宿主機(jī),只被連接的服務(wù)訪問(wèn)。僅可以指定內(nèi)部端口為參數(shù)
expose: - "3000" - "8000"
extra_hosts
類似Docker中的--add-host參數(shù),指定額外的host名稱映射信息。
會(huì)在啟動(dòng)后的服務(wù)容器中/etc/hosts文件中添加一條條目。8.8.8.8 googledns
extra_hosts: - "googledns:8.8.8.8"
healthcheck
通過(guò)命令容器是否健康運(yùn)行。
healthcheck: test:["CMD","curl","-f","http://localhost"] interval:1m30s
timeout:10s retries:3
image
指定為鏡像名稱或鏡像ID。如果鏡像在本地不存在,Compose將會(huì)嘗試?yán)ミ@個(gè)鏡像
image:session-web:latest
lables
為容器添加Docker元數(shù)據(jù)(metadata)信息。例如可以為容器添加輔助說(shuō)明信息。
labels: com.study.department:"devops department" com.study.release:"v1.0"
links
連接到其他容器。注意:不推薦使用該指令。
應(yīng)該使用docker network,建立網(wǎng)絡(luò),而docker run
--network來(lái)連接特定網(wǎng)絡(luò)?;蛘呤褂胿ersion:'2'和更高版本的docker-compose.yml直接定義自定義網(wǎng)絡(luò)并使用。
network_mode
設(shè)置網(wǎng)絡(luò)模式。使用和docker run的--network參數(shù)一樣的值。
network_mode:"bridge" network_mode:"host" network_mode:"none"
networks
配置容器連接的網(wǎng)絡(luò)。
version:"3" services: some-service: networks: - some-network networks:
some-network:
ports
暴露端口信息。使用宿主端口:容器端口(HOST:CONTAINER)格式,或者僅僅指定容器的端口(宿主將會(huì)隨機(jī)選擇端口)都可以。
ports: - "3000" - "8000:8000"
volumes
數(shù)據(jù)卷所掛載路徑設(shè)置,可以設(shè)置宿主機(jī)路徑,同時(shí)支持相關(guān)路徑。
volumes: - /var/lib/mysql - cache/:/tmp/cache - ~/configs:/etc/configs/:ro
ulimits
指定容器的ulimits限制值。
例如,指定最大進(jìn)程數(shù)為65535,指定文件句柄數(shù)為20000(軟限制,應(yīng)用可以隨時(shí)修改,不能超過(guò)硬限制)和40000(系統(tǒng)硬限制,只能root用戶提高)。
ulimits: nproc: 65535 nofile: soft: 20000 hard: 40000
此外,還有包括domainname,entrypoint,hostname,ipc,mac_address,privileged,read_only,shm_size,restart,stdin_open,tty,user,working_dir等指令,基本跟docker
run中對(duì)應(yīng)參數(shù)的功能相同。
指定服務(wù)容器啟動(dòng)后執(zhí)行的入口文件
entrypoint: /code/entrypoint.sh
指定容器中運(yùn)行應(yīng)用的用戶名
user:nginx
指定容器中工作目錄
working_dir: /code
指定容器中搜索域名、主機(jī)名、mac地址等
domainname:your_website.com hostname:test mac_address:08-00-27-00-0C-0A
允許容器中運(yùn)行一些特權(quán)命令
privileged:true
指定容器退出后的重啟策略為始終重啟。在生產(chǎn)環(huán)境中推薦配置為always或者unless-stopped
restart:alwarys
以只讀模式掛載容器的root文件系統(tǒng),意味著不能對(duì)容器內(nèi)容進(jìn)行修改
read_only:true
打開(kāi)標(biāo)準(zhǔn)輸入,可以接受外部輸入
stdin_open:true
模擬一個(gè)偽終端
tty:true
Compose模板文件支持動(dòng)態(tài)讀取主機(jī)的系統(tǒng)環(huán)境變量和當(dāng)前目錄下的.env文件中的變量。例如,下面的Compose文件將從運(yùn)行它的環(huán)境中讀取變量${MONGO_VERSION}的值,并寫入執(zhí)行的指令中。
version: "3" services: db: image: "mongo:${MONGO_VERSION}"
如果執(zhí)行MONGO_VERSION=3.2 docker-compose
up則會(huì)啟動(dòng)一個(gè)mongo:3.2鏡像的容器。若當(dāng)前目錄存在.env文件,執(zhí)行docker-compose命令時(shí)將從該文件中讀取變量。
熱門工具 換一換

感谢您访问我们的网站,您可能还对以下资源感兴趣:
调教肉文小说-国产成本人片免费av-空姐av种子无码-在线观看免费午夜视频-综合久久精品激情-国产成人丝袜视频在线观看软件-大芭区三区四区无码-啊啊好爽啊啊插啊用力啊啊-wanch视频网-国产精品成人a免费观看