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

docker-compose配置文件內容詳解以及常用命令介紹

評論