開發者必備:DockerCompose常用命令與屬性全指南

Docker Compose常用命令與屬性

在這裡插入圖片描述
大家好,今天給大家分享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-compose rm mysql
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-compose kill mysql
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:mysqlimage:ubuntu:14.03image:tutum/influxdbimage:example-registry.com:3000/postgresqlimage: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:-alias1other-network:aliases:-alias2networks: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.1:8001:8001"-"127.0.0.1:5000-5010:5000-5010"-"6060:6060/udp"
在v3.2中ports的長格式的語法允許配置不能用短格式表示的附加欄位。 長格式:
ports:-target:80published:8080protocol:tcpmode: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-exporterrestart:alwaysports:-"9100:9100"
environment
配置環境變數
version:'3'services:mysqld-exporter:image:prom/mysqld-exportercontainer_name:mysqld-exporterrestart:alwaysports:-"9104:9104"environment:-DATA_SOURCE_NAME="user:password@(hostname:3306)/"

三、docker-compose.yaml檔案示例

以下是一個完成的 docker-compose.yaml 檔案內容示例:
version:"3"services:redis:image:redis:latestports:-"6379:6379"container_name:im-redis-composerestart:alwayscommand:redis-server--appendonlyyesrabbitmq:image:rabbitmq:managementports:-"5672:5672"-"15672:15672"container_name:im-rabbitmq-composeenvironment:RABBITMQ_DEFAULT_USER:guestRABBITMQ_DEFAULT_PASS:guestRABBITMQ_DEFAULT_VHOST:my_vhostbackend:build:.links:-redis-rabbitmqcontainer_name:im-server-composerestart:on-failuredepends_on:-rabbitmq-redisports:-"3000:3000"command:sh-c'./wait-for.sh rabbitmq:15672'
連結:https://blog.csdn.net/xiangxi1204/article/details/138617617
(版權歸原作者所有,侵刪)
文末福利
就目前來說,傳統運維衝擊年薪30W+的轉型方向就是SRE&DevOps崗位。
為了幫助大家早日擺脫繁瑣的基層運維工作,給大家整理了一套高階運維工程師必備技能資料包,內容有多詳實豐富看下圖!
共有 20 個模組
1.38張最全工程師技能圖譜
2.面試大禮包
3.Linux書籍
4.go書籍
······
6.自動化運維工具
18.訊息佇列合集
 以上所有資料獲取請掃碼
備註:最新運維資料
100%免費領取
(後臺不再回復,掃碼一鍵領取


相關文章