一、什麼是 Docker Compose
Docker Compose 是一個用於定義和運行多容器 Docker 應用程序的工具。
作用:
通過一個名為 docker-compose.yml(或 compose.yaml)的配置文件,可以:
- 用代碼描述多個服務(如 Web 服務器、數據庫、緩存等);
- 定義它們之間的依賴關係、網絡、卷(數據持久化)等;
- 用一條命令(如
docker compose up)一鍵啓動或停止整個應用棧。
注意:從 Docker Desktop 較新版本(特別是 v2.0 以後),docker-compose 功能被集成進 docker 命令,作為子命令使用。
這種形式稱為 Compose V2,它是一個插件,語法幾乎完全兼容,但命令格式略有不同。
場景 | 寫法
舊版命令 | docker-compose
新版(V2)| 命令 docker compose
通用名稱/文檔中 | Docker Compose
一般來説,一個完整的項目就對應一個DockerCompose 文件-
定義容器之後,還需要去描述關於容器的一些參數信息。比如端口,內存大小等等。
前提:需要描述清楚容器信息。它才能夠去幫助我們部署容器。
二、服務器如何安裝配置 Docker Compose
查看安裝信息-
docker compose version

如果沒有信息,則單獨安裝,安裝命令為:
sudo yum install -y docker-compose-plugin
三、創建 docker-compose.yml 文件
建議名稱最好是固定。
然後配置內容,示例如下-
version: '3.8' # 明確指定版本,避免兼容性問題
services:
mysql: # 服務名稱
image: mysql:5.7 # 鏡像名稱
container_name: mysql # 容器名稱
ports: # 宿主機:容器的映射端口
- "43157:3306"
environment: # 環境配置
TZ: Asia/Shanghai # 時區
MYSQL_ROOT_PASSWORD: 123456 # 數據庫密碼
volumes: # 掛載的路徑和文件
- "/opt/u01/exam/mysql/my.cnf:/etc/mysql/my.cnf"
- "/opt/u01/exam/mysql/logs:/var/log/mysql"
- "/opt/u01/exam/mysql/data:/var/lib/mysql"
networks: # 加入的docker網絡
- exam-net
restart: unless-stopped # 重啓策略
redis:
image: redis:5.0.9
container_name: redis
ports:
- "6379:6379"
environment:
TZ: Asia/Shanghai
volumes:
- "/opt/u01/exam/redis/redis.conf:/usr/local/etc/redis/redis.conf"
- "/opt/u01/exam/redis/data:/data"
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
restart: unless-stopped
networks:
- exam-net
web:
build:
context: ./java # 注意路徑
dockerfile: Dockerfile # 注意路徑
image: my-web:latest # 指定固定鏡像名
container_name: web
ports:
- "8080:8080"
environment:
TZ: Asia/Shanghai
volumes:
- "/opt/u01/exam/java/logs:/app/logs"
networks:
- exam-net
depends_on:
- mysql
- redis
restart: unless-stopped # 重啓策略
user: "1000:1000" # 顯式指定 UID:GID-解決權限問題
nginx:
image: nginx:1.24.0
container_name: nginx
ports:
- "443:443"
volumes:
- "/opt/u01/exam/nginx/html:/usr/share/nginx/html" # 掛載靜態文件目錄
- "/opt/u01/exam/nginx/log:/var/log/nginx" # 掛載日誌目錄
- "/opt/u01/exam/nginx/sslkey:/etc/nginx/ssl:ro" # 掛載證書目錄(只讀) 你的 SSL 證書和私鑰 不需要被容器修改
- "/opt/u01/exam/nginx/nginx.conf:/etc/nginx/nginx.conf" # 掛載主配置文件
- "/opt/u01/exam/nginx/conf.d:/etc/nginx/conf.d" # 掛載其他配置文件
logging:
driver: "json-file" # 明確指定使用 json-file 驅動
options:
max-size: "100m" # 單個日誌文件最大 100MB
max-file: "30" # 最多保留 3 個日誌文件(包括當前正在寫入的)
tag: "{{.Name}}/{{.ID}}" # 日誌標籤,方便識別
networks:
- exam-net
depends_on:
- web
restart: unless-stopped # 重啓策略
networks: # docker-網絡設置
exam-net:
name: exam-network

説明:上面的配置中,會先創建網絡,然後在啓動各個容器服務,啓動容器之後,會自動添加到docker創建的網絡中。
同一台服務器上,各個服務之間就可以直接使用 容器的名稱來相互訪問。
以mysql配置為例,以下為詳細的配置講解-
mysql: # 服務名稱
image: mysql:5.7 # 鏡像名稱
container_name: mysql # 容器名稱
ports: # 宿主機:容器的映射端口
- "43157:3306"
environment: # 環境配置
TZ: Asia/Shanghai # 時區
MYSQL_ROOT_PASSWORD: 123456 # 數據庫密碼
volumes: # 掛載的路徑和文件
- "/opt/u01/exam/mysql/my.cnf:/etc/mysql/my.cnf"
- "/opt/u01/exam/mysql/logs:/var/log/mysql"
- "/opt/u01/exam/mysql/data:/var/lib/mysql"
networks: # 加入的網絡
- exam-net
restart: unless-stopped # 重啓策略
四、停止、啓動服務常用命令
docker compose up -d --build
命令解釋:docker compose v2 版本命令使用docker compose ;
up 表示啓動所有服務;
-d 表示在後台啓動服務,即使退出當前窗口,服務還會繼續運行。
--build 表示我在啓動容器時,需要構建鏡像,這一步不是必須的,有就添加,沒有就不添加。
注意事項:只能在docker-compose.yml所在的同一級目錄下,才能夠執行docker compose命令
停止所有容器服務的命令為:
docker compose down
個人服務器路徑如下
exam/
-docker-compose.yml
-java(目錄)
-mysql(目錄)
-nginx(目錄)
-redis(目錄)
查看所有已經啓動的容器信息:docker compose ps

查看某個容器日誌的命令
# 查看所有服務的日誌
docker compose logs
# 查看某個特定服務的日誌(例如 web)
docker compose logs web

單獨重啓某一個容器-
docker compose restart 容器名
docker compose restart nginx
實時跟蹤某個服務的日誌(類似 tail -f)
docker compose logs -f <服務名>
docker compose logs -f nginx
基礎命令-

查看狀態與日誌-

管理單個服務-

構建與更新-

其他實用命令-

IT技術學習-優先推薦使用千問-專業,就是好用!