大家好,今天給大家分享Docker Compose的常用命令,以及docker-compose文件的屬性。Docker Compose 是一個(gè)用于定義和運(yùn)行多容器 Docker 應(yīng)用應(yīng)用的重要工具。它通過(guò)一個(gè)配置文件(docker-compose.yml)來(lái)詳細(xì)定義多個(gè)容器之間的關(guān)聯(lián)、網(wǎng)絡(luò)設(shè)置、服務(wù)端口等信息。使用一條簡(jiǎn)單的命令,就可以輕松啟動(dòng)、停止和管理這些容器,極大地簡(jiǎn)化了多容器應(yīng)用的部署與管理流程,方便實(shí)現(xiàn)應(yīng)用的快速構(gòu)建、開(kāi)發(fā)、測(cè)試以及部署。
Docker Compose 將所管理的容器劃分為三層,即工程(project)、服務(wù)(service)和容器(container)。在 Docker Compose 運(yùn)行目錄下,所有文件(主要是 docker-compose.yml)共同構(gòu)成一個(gè)工程。一個(gè)工程中包含多個(gè)服務(wù),每個(gè)服務(wù)中又定義了容器運(yùn)行所需的鏡像、參數(shù)和依賴等。并且,一個(gè)服務(wù)可以包含多個(gè)容器實(shí)例。
關(guān)于 Docker 的安裝和常用命令,本文不做詳細(xì)說(shuō)明,可以參考:
Docker在Windows與CentOS上的安裝
Docker常用命令
一、Docker Compose常用命令
執(zhí)行docker-compose命令時(shí),需要在執(zhí)行命令的目錄下存在 docker-compose.yml 或者 docker-compose.yaml
ps:列出所有運(yùn)行容器
docker-compose ps
build:構(gòu)建或者重新構(gòu)建服務(wù)
docker-compose build
logs:查看服務(wù)日志輸出
docker-compose logs
port:打印綁定的公共端口
# 輸出 mysql 服務(wù) 3306 端口所綁定的公共端口 docker-compose port mysql 3306
start:?jiǎn)?dòng)指定服務(wù)已存在的容器
docker-compose start mysql
stop:停止已運(yùn)行的服務(wù)的容器
docker-compose stop mysql
rm:刪除指定服務(wù)的容器
docker-composermmysql
scale:設(shè)置指定服務(wù)運(yùn)氣容器的個(gè)數(shù),以 service=num 形式指定
docker-compose mysql user=3 movie=3
run:在一個(gè)服務(wù)上執(zhí)行一個(gè)命令
docker-compose run web bash
up:構(gòu)建、啟動(dòng)容器
docker-compose up
注意:
? docker-compose的文件,只有在文件名為docker-compose時(shí)才可以使用docker-compose up命令,如果名字為自定義時(shí),需要指定文件名才行,命令為:
docker-compose -f my-compose.yml up
? docker-compose文件名后綴使用 .yml 或 .yaml都可。
? 若是要后臺(tái)運(yùn)行,加上-d
docker-compose up -d
kill:通過(guò)發(fā)送 SIGKILL 信號(hào)來(lái)停止指定服務(wù)的容器
docker-composekillmysql
pull:下載服務(wù)鏡像
docker-compose pull mysql:lasted
二、docker-compose.yaml文件屬性
Docker Compose 的 yaml 文件有著嚴(yán)格的縮進(jìn)和空格要求,一般來(lái)說(shuō),它主要由以下幾個(gè)部分構(gòu)成:
首先是版本(Version),這是 Docker Compose 文件的頂級(jí)元素,用于明確所采用的 Docker Compose 文件版本,進(jìn)而確定所使用的語(yǔ)法及支持的功能。
其次是服務(wù)(Services),該部分對(duì)應(yīng)用程序的各個(gè)服務(wù)或容器進(jìn)行定義。每個(gè)服務(wù)都擁有獨(dú)特的名稱,并囊括了該服務(wù)的配置信息,比如所應(yīng)用的鏡像、環(huán)境變量、端口映射、卷掛載等。
再者是網(wǎng)絡(luò)(Networks),這部分負(fù)責(zé)定義應(yīng)用程序的網(wǎng)絡(luò)配置。可以創(chuàng)建自定義網(wǎng)絡(luò),并明確容器連接到哪個(gè)網(wǎng)絡(luò)上,以實(shí)現(xiàn)容器之間的順暢通信。
還有卷(Volumes),該部分定義了應(yīng)用程序的卷掛載配置??梢灾付ㄈ萜髋c宿主機(jī)之間文件或目錄的映射關(guān)系,從而實(shí)現(xiàn)數(shù)據(jù)的持久化和共享。
另外,環(huán)境變量(Environment Variables)也是重要部分,在服務(wù)的配置中,可以通過(guò) environment 或 env_file 字段來(lái)指定環(huán)境變量,這些環(huán)境變量會(huì)被傳遞到容器內(nèi)運(yùn)行的應(yīng)用程序中。
同時(shí),端口映射(Port Mapping)也不可或缺,在服務(wù)的配置中,可以利用 ports 字段來(lái)明確容器端口與宿主機(jī)端口之間的映射關(guān)系,以此實(shí)現(xiàn)從宿主機(jī)訪問(wèn)容器內(nèi)運(yùn)行的服務(wù)。
最后是卷掛載(Volume Mounting),在服務(wù)的配置中,可以通過(guò) volumes 字段來(lái)指定容器內(nèi)路徑與宿主機(jī)路徑之間的映射關(guān)系,使容器與宿主機(jī)能夠共享文件和數(shù)據(jù)。
官方文檔:https://docs.docker.com/compose/reference/build/
Compose文與和Docker的兼容性:
目前 Compose 文件格式有3個(gè)版本,分別為1、2.x 和 3.x。
主流的為 3.x 其支持 docker 1.13.0 及其以上的版本。
version
'3’表示使用第三代語(yǔ)法來(lái)構(gòu)建 docker-compose.yaml 文件。
services
用來(lái)表示 compose 需要啟動(dòng)的服務(wù)。
image
指定啟動(dòng)容器的鏡像,可以是鏡像倉(cāng)庫(kù)/標(biāo)簽或者鏡像id(或者id的前一部分)
container_name
容器名稱,指定一個(gè)自定義容器名,而不是默認(rèn)生成的名稱。
environment
此節(jié)點(diǎn)下的信息會(huì)當(dāng)作環(huán)境變量傳入容器。
ports
本地端口/容器端口,將容器中的端口映射到本地端口上。
restart
always 表示如果服務(wù)啟動(dòng)不成功會(huì)一直嘗試。
volumes
映射容器中的文件到本地,本地的也會(huì)映射到容器中。
depends_on
可以配置依賴服務(wù),表示需要先啟動(dòng) depends_on 下面的服務(wù)后,再啟動(dòng)本服務(wù)。
build
用來(lái)構(gòu)建指定路徑的Dockerfile文件以及args參數(shù)
version:'2' services: webapp: build: context:./my_dir #如果是.表示當(dāng)前路徑 dockerfile:Dockerfile-alternate# 指定Dockerfile文件名。如果上面context指定了文件名,這里就不用本屬性了 args: buildno:1
webapp服務(wù)將會(huì)通過(guò)./my_dir目錄下的Dockerfile-alternate文件構(gòu)建容器鏡像。
如果你同時(shí)指定image和build,則compose會(huì)通過(guò)build指定的目錄構(gòu)建容器鏡像,而構(gòu)建的鏡像名為image中指定的鏡像名和標(biāo)簽。
image: webapp:tag
這將由./dir構(gòu)建的名為webapp和標(biāo)記為tag的鏡像。
image
image指定啟動(dòng)容器的鏡像,可以是鏡像倉(cāng)庫(kù)/標(biāo)簽或者鏡像id(或者id的前一部分)
image:mysql image:ubuntu:14.03 image:tutum/influxdb image:example-registry.com:3000/postgresql image:a4nhg65fd
如果鏡像不存在,Compose將嘗試從官方鏡像倉(cāng)庫(kù)將其pull下來(lái),如果你還指定了build,在這種情況下,它將使用指定的build選項(xiàng)構(gòu)建它,并使用image指定的名字和標(biāo)記對(duì)其進(jìn)行標(biāo)記。
volumes
卷掛載路徑設(shè)置,就是將容器中的文件映射到宿主機(jī)中,方便修改。
volumes: # 只需指定一個(gè)路徑,讓引擎創(chuàng)建一個(gè)卷 -/var/lib/mysql # 指定絕對(duì)路徑映射 -/opt/data:/var/lib/mysql # 指定相對(duì)路徑映射 -./cache:/tmp/cache # 文件映射 -./cache/abc.java:/tmp/cache/abc.java # 用戶主目錄相對(duì)路徑映射,此處 ro 下面詳解 -~/configs:/etc/configs/:ro # 命名卷 -datavolume:/var/lib/mysql
ro、rw詳解:
? 不指定
文件:宿主機(jī)修改該文件后容器里面看不到變化;容器里面修改該文件,宿主機(jī)也看不到變化
文件夾:不管是宿主機(jī)還是容器內(nèi)修改、新增、刪除文件,都會(huì)相互同步
? ro
文件:容器內(nèi)不能修改,會(huì)提示read-only
文件夾:容器內(nèi)不能修改、新增、刪除文件夾中的文件,會(huì)提示read-only
? rw
文件:不管是宿主機(jī)還是容器內(nèi)修改,都會(huì)相互同步,但容器內(nèi)不允許刪除,會(huì)提示Device or resource busy;宿主機(jī)刪除文件,容器內(nèi)的不會(huì)被同步
文件夾:不管是宿主機(jī)還是容器內(nèi)修改、新增、刪除文件,都會(huì)相互同步
links
鏈接到另一個(gè)服務(wù)中的容器。 請(qǐng)指定服務(wù)名稱和鏈接別名(SERVICE:ALIAS),或者僅指定服務(wù)名稱。
web: links: -db -db:database -redis
links也可以起到和depends_on相似的功能,即定義服務(wù)之間的依賴關(guān)系,從而確定服務(wù)啟動(dòng)的順序。
external_links
鏈接到docker-compose.yml 外部的容器,甚至并非 Compose 管理的容器。參數(shù)格式跟 links 類似。
external_links: -redis_1 -project_db_1:mysql -project_db_1:postgresql
restart
設(shè)置容器重啟策略
# 默認(rèn)策略,在任何情況下都不會(huì)重啟容器 restart:"no" # 容器總是在停止后重新啟動(dòng) restart:always # 容器非正常退出時(shí),退出狀態(tài)非0才會(huì)重啟 restart:on-failure # 指定容器退出后的重啟策略為始終重啟,但是不考慮在Docker守護(hù)進(jìn)程啟動(dòng)時(shí)就已經(jīng)停止了的容器 restart:unless-stopped
network_mode
設(shè)置網(wǎng)絡(luò)模式
# 橋接模式 network_mode:"bridge" # 本機(jī)模式 network_mode:"host" network_mode:"none" network_mode:"service:[service name]" network_mode:"container:[container name/id]"
networks
配置容器連接的網(wǎng)絡(luò),引用頂級(jí) networks 下的條目 。
services: some-service: networks: some-network: aliases: -alias1 other-network: aliases: -alias2 networks: some-network: driver:custom-driver-1
注意:
aliases :同一網(wǎng)絡(luò)上的其他容器可以使用服務(wù)名稱或此別名來(lái)連接到對(duì)應(yīng)容器的服務(wù)。
expose
暴露端口,但不映射到宿主機(jī),只被連接的服務(wù)訪問(wèn)。 僅可以指定內(nèi)部端口為參數(shù)。
expose: -"3000" -"8000"
ports
暴露端口信息。 常用的簡(jiǎn)單格式:使用宿主機(jī):容器(HOST:CONTAINER)。
ports: -"3000" -"3000-3005" -"8000:8000" -"9090-9091:8080-8081" -"49100:22" -"127.0.0.18001" -"127.0.0.15000-5010" -"6060:6060/udp"
在v3.2中ports的長(zhǎng)格式的語(yǔ)法允許配置不能用短格式表示的附加字段。 長(zhǎng)格式:
ports: -target:80 published:8080 protocol:tcp mode:host
target:容器內(nèi)的端口
published:物理主機(jī)的端口
protocol:端口協(xié)議(tcp或udp)
mode:host 和ingress 兩種模式,host用于在每個(gè)節(jié)點(diǎn)上發(fā)布主機(jī)端口,ingress 用于被負(fù)載平衡的swarm模式端口。
pid
將pid模式設(shè)置為主機(jī)pid模式。 這就打開(kāi)了容器與主機(jī)操作系統(tǒng)之間的共享pid地址空間。 使用此標(biāo)志啟動(dòng)的容器將能夠訪問(wèn)和操作裸機(jī)的命名空間中的其他容器,反之亦然。即打開(kāi)該選項(xiàng)的容器可以相互通過(guò)進(jìn)程 ID 來(lái)訪問(wèn)和操作。
pid:"host"
container_name
指定一個(gè)自定義容器名稱,而不是生成的默認(rèn)名稱。
version:'3' services: node-exporter: image:prom/node-exporter:latest # 由于Docker容器名稱必須是唯一的,因此如果指定了自定義名稱,則無(wú)法將服務(wù)擴(kuò)展到多個(gè)容器。 container_name:node-exporter restart:always ports: -"9100:9100"
environment
配置環(huán)境變量
version:'3' services: mysqld-exporter: image:prom/mysqld-exporter container_name:mysqld-exporter restart:always ports: -"9104:9104" environment: -DATA_SOURCE_NAME="user:password@(hostname:3306)/"
三、docker-compose.yaml文件示例
以下是一個(gè)完成的 docker-compose.yaml 文件內(nèi)容示例:
version:"3" services: redis: image:redis:latest ports: -"6379:6379" container_name:im-redis-compose restart:always command:redis-server--appendonlyyes rabbitmq: image:rabbitmq:management ports: -"5672:5672" -"15672:15672" container_name:im-rabbitmq-compose environment: RABBITMQ_DEFAULT_USER:guest RABBITMQ_DEFAULT_PASS:guest RABBITMQ_DEFAULT_VHOST:my_vhost backend: build:. links: -redis -rabbitmq container_name:im-server-compose restart:on-failure depends_on: -rabbitmq -redis ports: -"3000:3000" command:sh-c'./wait-for.sh rabbitmq:15672'
鏈接:https://blog.csdn.net/xiangxi1204/article/details/138617617
-
文件
+關(guān)注
關(guān)注
1文章
578瀏覽量
25250 -
容器
+關(guān)注
關(guān)注
0文章
508瀏覽量
22387 -
命令
+關(guān)注
關(guān)注
5文章
733瀏覽量
22742 -
Docker
+關(guān)注
關(guān)注
0文章
513瀏覽量
12781
原文標(biāo)題:開(kāi)發(fā)者必備:Docker Compose 常用命令與屬性全指南
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
docker的常用命令有哪些?
Ubuntu常用命令大全
Memcache系統(tǒng)常用命令講解

docker-compose配置文件內(nèi)容詳解以及常用命令介紹

評(píng)論