Docker Compose使用手冊之場景、文件與命令詳解
一、什么是 Docker Compose
Docker Compose 是 Docker 官方的開源項目,使用 Python 編寫,調(diào)用 Docker 服務(wù)的 API 來管理和編排容器。官方定義為:定義和運行多個 Docker 容器的應(yīng)用。
在 Docker Compose 中,有兩個重要概念:
- 服務(wù)(Service):一個應(yīng)用的容器,通常包括多個運行相同鏡像的容器實例。
- 項目(Project):由一組相關(guān)的應(yīng)用容器組成的完整業(yè)務(wù)單元,在
docker-compose.yml文件中定義。整個docker-compose.yml文件定義了一個項目。
Compose 的默認管理對象是 項目,通過子命令對項目中的一組容器進行簡化的生命周期管理。
通過 compose 可以方便的管理多個服務(wù)。

二、為什么需要 Docker Compose
Docker 是一個輕量化的應(yīng)用程序,官方推薦每個 Docker 容器只運行一個進程。
- 如果一個應(yīng)用需要 MySQL、Nginx 等環(huán)境,那么我們需要為應(yīng)用、數(shù)據(jù)庫和 Nginx 分別創(chuàng)建獨立的 Docker 容器,并逐一啟動它們。
- 設(shè)想一下,構(gòu)建好 Docker 后,每次啟動應(yīng)用都需要執(zhí)行至少三次
docker run,或者編寫腳本來實現(xiàn),這會顯得非常繁瑣。 - 此外,這些容器是分散獨立的,不方便管理和維護鏡像。既然這些容器都是為了同一個應(yīng)用提供服務(wù),那么將它們放在一起管理顯得更為合理。這時,Docker Compose 就能幫助解決這類問題。
三、Docker Compose 使用步驟 / 核心功能
步驟
- 安裝 Docker 和 Docker Compose:確保已經(jīng)安裝了 Docker 和 Docker Compose。
- 創(chuàng)建
docker-compose.yml文件:在項目根目錄下創(chuàng)建一個docker-compose.yml文件,定義服務(wù)、網(wǎng)絡(luò)和卷等配置。 - 定義服務(wù):在
docker-compose.yml中定義每個服務(wù)(容器),包括鏡像、環(huán)境變量、端口映射等。 - 啟動服務(wù):使用命令
docker-compose up啟動所有服務(wù),-d參數(shù)可以讓容器在后臺運行。 - 停止服務(wù):使用命令
docker-compose down停止并刪除所有容器。 - 查看日志:使用
docker-compose logs查看容器的日志輸出。
核心功能
- 多容器管理:可以輕松定義和管理多個服務(wù)(容器)。
- 一鍵啟動與停止:通過命令啟動或停止所有容器,簡化操作。
- 服務(wù)依賴:自動處理服務(wù)之間的啟動順序。
- 配置管理:通過環(huán)境變量和
.env文件管理配置。 - 數(shù)據(jù)持久化:支持使用卷(Volumes)持久化數(shù)據(jù)。
- 擴展服務(wù):可以輕松擴展服務(wù)實例數(shù)量,處理負載。
四、Docker Compose 的使用場景
開發(fā)環(huán)境:在開發(fā)過程中,Docker Compose 可以用來快速搭建多容器的開發(fā)環(huán)境,例如將數(shù)據(jù)庫、緩存服務(wù)器、Web 應(yīng)用等服務(wù)組合在一起,開發(fā)者可以通過一條命令啟動或停止整個環(huán)境。
測試環(huán)境:用于構(gòu)建和管理臨時的測試環(huán)境,確保不同服務(wù)之間的協(xié)作和集成測試在統(tǒng)一的環(huán)境中進行??梢源_保每次測試時環(huán)境的一致性。
本地開發(fā)與調(diào)試:在本地開發(fā)中,Docker Compose 允許開發(fā)者同時運行多個依賴服務(wù)(如數(shù)據(jù)庫、消息隊列等),無需手動啟動每個容器,便于開發(fā)和調(diào)試。
微服務(wù)架構(gòu):在微服務(wù)架構(gòu)中,Docker Compose 可以用來管理多個微服務(wù)及其依賴服務(wù)(如數(shù)據(jù)庫、API 網(wǎng)關(guān)等),通過 Compose 配置文件統(tǒng)一管理和部署。
多環(huán)境部署:Docker Compose 支持為不同的環(huán)境(如開發(fā)、測試、生產(chǎn))配置不同的服務(wù)和設(shè)置,幫助實現(xiàn)環(huán)境間的一致性和遷移。
CI/CD 流水線:在持續(xù)集成/持續(xù)部署(CI/CD)過程中,Docker Compose 可用于自動化構(gòu)建、測試和部署多容器應(yīng)用,簡化流程,保證環(huán)境一致性。
本地模擬生產(chǎn)環(huán)境:在本地機器上使用 Docker Compose 模擬生產(chǎn)環(huán)境中的復(fù)雜服務(wù)拓撲,幫助開發(fā)者在開發(fā)階段提前發(fā)現(xiàn)潛在問題。
五、Docker Compose 文件(docker-compose.yml)
文件語法版本
目前,官方支持三大版本:Version 1、Version 2 和 Version 3,其中 Version 1 已被廢棄。當前最新版本為 3.8,要求 Docker Engine 版本至少為 19.03.0。本課程將基于 3.8 版本的 Compose 文件語法進行講解,其他版本的詳細內(nèi)容可以參考官方文檔。
文件基本結(jié)構(gòu)及常見指令
YAML 示例:
version: "3.8" # 定義當前使用的 Docker Compose 語法版本
services: # 服務(wù)定義,支持多個服務(wù)
servicename: # 服務(wù)名稱,內(nèi)部 bridge 網(wǎng)絡(luò)中使用的 DNS 名稱。非集群模式下相當于 Docker run 命令中的名稱。
image: # 必選項,指定容器鏡像
command: # 可選項,覆蓋鏡像的默認啟動命令
environment: # 可選項,等同于 docker run 中的 --env 參數(shù),用于設(shè)置環(huán)境變量
volumes: # 可選項,等同于 docker run 中的 -v 參數(shù),用于數(shù)據(jù)卷掛載
networks: # 可選項,等同于 docker run 中的 --network 參數(shù),指定容器網(wǎng)絡(luò)
ports: # 可選項,等同于 docker run 中的 -p 參數(shù),指定端口映射
expose: # 可選項,指定容器暴露的端口
build: # 可選項,指定構(gòu)建鏡像的路徑
depends_on: # 可選項,定義服務(wù)間的依賴關(guān)系
env_file: # 可選項,定義外部環(huán)境變量文件常見字段格式語法
image: 指定容器運行的鏡像。支持多種格式:
image: redis image: redis:5 image: redis@sha256:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83935398bc4b991aac7 image: library/redis image: my_private.registry:5000/redis
command: 覆蓋容器啟動時的默認命令:
command: ["bundle", "exec", "thin", "-p", "3000"] command: bundle exec thin -p 3000
entrypoint: 覆蓋容器的默認 entrypoint:
entrypoint: /code/entrypoint.sh entrypoint: - php - -d - zend_extension=/usr/local/lib/php/extensions/no-debug-nonzts-20100525/xdebug.so - -d - memory_limit=-1 - vendor/bin/phpunit
environment: 設(shè)置環(huán)境變量,可以使用數(shù)組或字典格式:
environment: RACK_ENV: development SHOW: "true"
或者數(shù)組格式:
environment: - RACK_ENV=development - SHOW=true
networks: 配置容器使用的網(wǎng)絡(luò):
services:
frontend:
image: awesome/webapp
networks:
- front-tier
- back-tier
monitoring:
image: awesome/monitoring
networks:
- admin
backend:
image: awesome/backend
networks:
back-tier:
aliases:
- database
volumes: 將主機的數(shù)據(jù)卷或文件掛載到容器中:
services:
db:
image: postgres:latest
volumes:
- "/localhost/postgres.sock:/var/run/postgres/postgres.sock"
- "/localhost/data:/var/lib/postgresql/data"
ports: 配置端口映射:
ports:
- target: 80
published: 8080
host_ip: 127.0.0.1
protocol: tcp
mode: host
expose: 暴露容器內(nèi)部端口,但不進行端口映射:
expose: - "3000" - "8000"
build: 指定構(gòu)建鏡像的上下文路徑:
version: "3.7"
services:
webapp:
build: ./dir
depends_on: 設(shè)置服務(wù)依賴關(guān)系,確保服務(wù)按順序啟動:
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
可以根據(jù)服務(wù)健康狀態(tài)設(shè)置條件:
services:
web:
build: .
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
env_file: 從文件中加載環(huán)境變量,可以是多個文件:
env_file: - .env - ./common.env - ./apps/web.env - /opt/secrets.env
示例:使用healthcheck配置容器健康檢查
version: "3.8"
services:
web:
image: nginx:1.24.0
environment:
TEST: 1
depends_on:
mysql:
condition: service_healthy
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: "bit@123"
volumes:
- /data/maxhou/mysqldata/varlib/:/var/lib/mysql
healthcheck:
test: mysql --user=root --password='bit@123' -e "SELECT 1;"
interval: 10s
timeout: 5s
retries: 10
六、Dockers Compose 命令清單
常見 Docker Compose 命令 與 官方文檔
啟動和管理服務(wù)
docker-compose up:構(gòu)建、(重新)創(chuàng)建、啟動和附加到容器。docker-compose down:停止并移除容器、網(wǎng)絡(luò)和卷。docker-compose start:啟動已創(chuàng)建的容器。docker-compose stop:停止容器。docker-compose restart:重新啟動服務(wù)容器。
構(gòu)建和鏡像管理
docker-compose build:構(gòu)建或重新構(gòu)建服務(wù)的鏡像。docker-compose push:將構(gòu)建的鏡像推送到 Docker 注冊表。
容器狀態(tài)和日志
docker-compose ps:列出服務(wù)的容器狀態(tài)。docker-compose logs:查看容器的輸出日志。docker-compose exec:在運行中的容器內(nèi)執(zhí)行命令。docker-compose run:啟動一個新容器并運行一次命令。
容器的其他操作
docker-compose exec:在運行中的容器中執(zhí)行命令。docker-compose run:運行一個一次性的容器實例。docker-compose config:驗證并查看 Compose 文件的配置。docker-compose top:列出正在運行的容器的進程信息。
資源管理
docker-compose scale:設(shè)置服務(wù)的容器數(shù)量(只適用于 Version 2 格式)。
官方文檔
Docker Compose 的官方文檔包含完整的命令清單、配置項說明以及示例,可以通過以下鏈接訪問:
Docker Compose 命令文檔:https://docs.docker.com/compose/reference/
該頁面提供了所有 docker-compose 命令的詳細說明,包括常用命令、選項和用法示例。
命令格式
對于 Docker Compose,大多數(shù)命令可以作用于整個項目,也可以針對項目中的特定服務(wù)或容器。如果沒有特別說明,命令默認會影響整個項目,即項目中的所有服務(wù)。
docker compose 命令的基本格式為:
docker compose [OPTIONS] COMMAND [ARGS...]
常見選項說明:
-f, --file:指定 Compose 模板文件,默認為docker-compose.yml,可使用多個文件。-p, --project-name:指定項目名稱,默認使用當前目錄名稱作為項目名。
常見選項 / 命令
常見選項
-f --file指定使用的Compose模板文件,默認為docker-compose.yml,可以多次指定-p, --project-name指定項目名稱,默認使用“所在目錄的名稱”作為項目名
常見命令
Docker Compose 常見命令及選項說明
1. up
該命令會自動完成包括構(gòu)建鏡像、(重新)創(chuàng)建服務(wù)、啟動服務(wù)并關(guān)聯(lián)相關(guān)容器等操作,通常用于啟動一個項目。
基本命令格式:
docker compose up [OPTIONS] [SERVICE...]
常見選項:
-d:在后臺運行服務(wù)容器,推薦在生產(chǎn)環(huán)境中使用該選項。--force-recreate:強制重新創(chuàng)建容器,不能與--no-recreate同時使用。--no-recreate:如果容器已存在,則不重新創(chuàng)建,不能與--force-recreate同時使用。
2. down
停止所有容器,并刪除容器和網(wǎng)絡(luò)。
基本命令格式:
docker compose down [OPTIONS] [SERVICE...]
常見選項:
-v, --volumes:刪除容器的同時刪除與容器關(guān)聯(lián)的卷(目錄映射)。
3. run
在指定服務(wù)容器上執(zhí)行相關(guān)命令。此命令用于啟動服務(wù)容器并在其中執(zhí)行命令。
基本命令格式:
docker compose run [OPTIONS] SERVICE [COMMAND] [ARGS...]
常見選項:
-d:后臺運行容器。--name NAME:為容器指定一個名稱。--entrypoint CMD:覆蓋容器的默認啟動命令。-e KEY=VAL:設(shè)置環(huán)境變量,支持多次使用來設(shè)置多個環(huán)境變量。-u,--user="":指定運行容器的用戶名或 UID。--rm:運行命令后自動刪除容器。-p,--publish=[]:映射容器端口到本地主機。
示例:
# 啟動 ubuntu 服務(wù)容器,并執(zhí)行 ping docker.com 命令 docker compose run ubuntu ping docker.com
下面是一個基本的 Docker Compose 操作案例,假設(shè)你的操作環(huán)境是 Ubuntu。
操作案例
下面演示如何創(chuàng)建一個包含 Nginx 和 MySQL 的多容器應(yīng)用,并通過 docker-compose.yml 文件管理它們。我們可以根據(jù)需要擴展服務(wù)、配置網(wǎng)絡(luò)和卷等。
1. 安裝 Docker 和 Docker Compose
首先確保你的 Ubuntu 系統(tǒng)已經(jīng)安裝了 Docker 和 Docker Compose。你可以使用以下命令進行安裝。
更新你的包列表并安裝依賴:
sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common
安裝 Docker:
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh
安裝 Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
驗證安裝:
docker --version docker-compose --version
創(chuàng)建 Docker Compose 項目文件
假設(shè)我們要創(chuàng)建一個簡單的項目,包含一個 Nginx 服務(wù)和一個 MySQL 數(shù)據(jù)庫服務(wù)。
創(chuàng)建一個新目錄:
mkdir myproject cd myproject
創(chuàng)建 docker-compose.yml 文件:
使用編輯器創(chuàng)建 docker-compose.yml 文件,該文件描述了我們的服務(wù)和配置。
version: '3'
services:
web:
image: nginx:latest
container_name: nginx-container
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- mynetwork
db:
image: mysql:5.7
container_name: mysql-container
environment:
MYSQL_ROOT_PASSWORD: examplepassword
MYSQL_DATABASE: exampledb
volumes:
- mysql-data:/var/lib/mysql
networks:
- mynetwork
networks:
mynetwork:
volumes:
mysql-data:解釋:
web 服務(wù):使用 Nginx 鏡像,映射本地的 8080 端口到容器的 80 端口。
db 服務(wù):使用 MySQL 5.7 鏡像,設(shè)置了數(shù)據(jù)庫根密碼 examplepassword 和數(shù)據(jù)庫名 exampledb。
我們創(chuàng)建了一個網(wǎng)絡(luò) mynetwork 來讓容器間通信,并為 MySQL 創(chuàng)建了一個數(shù)據(jù)卷 mysql-data 來持久化數(shù)據(jù)庫數(shù)據(jù)。
創(chuàng)建 HTML 文件(可選):
如果你希望在瀏覽器中訪問你的 Nginx 服務(wù)并顯示內(nèi)容,可以創(chuàng)建一個簡單的 HTML 文件:
mkdir html echo "<h1>Hello from Docker Compose!</h1>" > html/index.html
3. 啟動服務(wù)
在項目目錄中,使用 docker compose up 命令來啟動所有定義的服務(wù)。
docker compose up
如果你希望在后臺運行容器,可以加上 -d 參數(shù):
docker compose up -d
這個命令會:
- 下載
nginx和mysql鏡像(如果尚未下載)。 - 創(chuàng)建并啟動容器。
- 自動創(chuàng)建網(wǎng)絡(luò)
mynetwork和卷mysql-data。
你可以用 docker ps 查看正在運行的容器:
docker ps
4. 訪問 Nginx 服務(wù)
如果一切正常,你可以在瀏覽器中訪問 Nginx 服務(wù),打開 http://localhost:8080,你應(yīng)該能夠看到 “Hello from Docker Compose!” 的 HTML 內(nèi)容。
5.查看容器日志
如果你想查看容器的日志,使用 docker compose logs 命令:
docker compose logs web
這將顯示 Nginx 容器的日志。如果你想查看 MySQL 容器的日志,可以使用:
docker compose logs db
6.停止并刪除服務(wù)
要停止并刪除所有運行中的服務(wù)和容器,可以使用 docker compose down 命令:
docker compose down
如果你希望同時刪除卷(例如 MySQL 的數(shù)據(jù)卷),可以使用 -v 選項:
docker compose down -v
七、常見問題
up、run 和 start 之間的區(qū)別
docker-compose up:用于啟動或重新啟動通過docker-compose.yml文件定義的所有服務(wù)。在默認模式下,會顯示所有容器的日志。在“分離模式”(-d)下,容器會在后臺啟動,Compose 命令會退出,但容器繼續(xù)運行。docker-compose run:用于運行“一次性”或“臨時”任務(wù),只會啟動指定服務(wù)及其依賴的服務(wù)。常用于執(zhí)行測試或管理任務(wù),如從數(shù)據(jù)卷容器中刪除或添加數(shù)據(jù)。run命令類似于docker run -ti,啟動容器并進入交互式終端,執(zhí)行完后根據(jù)進程的退出狀態(tài)返回退出代碼。docker-compose start:用于重新啟動已存在但停止的容器。不會創(chuàng)建新容器,只會啟動已存在的、被停止的服務(wù)容器。
如何在同一主機上運行 Compose 文件的多個副本
Compose 使用項目名稱為項目中的所有容器和資源創(chuàng)建唯一標識符。要運行項目的多個副本,可以通過以下方式設(shè)置自定義項目名稱:
這樣可以在同一主機上啟動多個獨立的 Compose 項目實例。
- 使用
-p命令行選項來指定項目名稱。 - 使用
COMPOSE_PROJECT_NAME環(huán)境變量來設(shè)置項目名稱。
可以控制服務(wù)啟動順序嗎?
可以通過在 docker-compose.yml 文件中使用 depends_on 來指定服務(wù)的啟動順序??梢越Y(jié)合 healthcheck 功能來確保服務(wù)在健康檢查成功后再啟動,從而實現(xiàn)更精確的啟動控制。
到此這篇關(guān)于Docker Compose使用手冊之場景、文件與命令詳解的文章就介紹到這了,更多相關(guān)Docker Compose使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于docker部署skywalking實現(xiàn)全鏈路監(jiān)控功能
這篇文章主要介紹了基于docker部署skywalking實現(xiàn)全鏈路監(jiān)控,skywalking提供了在很多不同的場景下用于觀察和監(jiān)控分布式系統(tǒng)的方式,文中給大家介紹如何快速部署skywalking全鏈路監(jiān)控,感興趣的朋友一起看看吧2022-03-03
Nextcloud介紹及docker-compose.yml部署+onlyoffice方式
Nextcloud是一款開源、自部署的私有云平臺,允許用戶在自己的服務(wù)器上構(gòu)建文件同步、共享和協(xié)作系統(tǒng),它基于PHP和MySQL/MariaDB構(gòu)建,可運行在Linux、Docker、Kubernetes等多種環(huán)境中,部署方式靈活,生態(tài)插件非常豐富2026-01-01
從入門到精通Docker Compose 輕松部署微服務(wù)實戰(zhàn)教程
本文介紹使用Docker Compose部署基于SpringCloudAlibaba的微服務(wù)項目,涵蓋用戶登錄積分功能,涉及Gateway、Redis、MySQL等組件,通過編寫Dockerfile和YAML配置文件,結(jié)合腳本實現(xiàn)環(huán)境容器與服務(wù)容器的自動化部署與驗證,感興趣的朋友一起看看吧2025-07-07
詳解MAC OSX Docker開發(fā)環(huán)境搭建
本篇文章主要介紹了詳解MAC OSX Docker開發(fā)環(huán)境搭建,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03

