docker-compose
docker安裝:https://blog.csdn.net/Cike___/article/details/146415836
最新版本的docker安裝完成后,會自帶docker-compase
docker version
docker compose version
Docker Compose.yml 是 Docker Compose 工具的核心配置文件
Docker Compose 主要不是用來構建鏡像的,也不是專門用來拉取鏡像的,而是用來編排和運行多容器應用的。
1. 多容器應用管理
核心作用:定義和運行多個相互關聯的 Docker 容器
version: '3.8' services: web: image: nginx depends_on: - app - database app: build: . depends_on: - database database: image: postgres:13
2. 服務依賴和啟動順序
services: database: image: postgres healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] backend: build: ./backend depends_on: database: condition: service_healthy # 等待數據庫健康后再啟動
3. 網絡配置
創建容器間的專用網絡,實現服務發現和內部通信
services: web: image: nginx networks: - frontend - backend app: build: . networks: - backend networks: frontend: driver: bridge backend: driver: bridge
4. 數據持久化
services: database: image: postgres volumes: - db_data:/var/lib/postgresql/data # 命名卷 - ./init.sql:/docker-entrypoint-initdb.d/init.sql # 主機掛載 volumes: db_data: # 聲明數據卷
5. 環境配置管理
services: app: build: . environment: - DATABASE_URL=postgresql://user:pass@db:5432/app - DEBUG=false env_file: - .env.production # 從文件加載環境變量
6. 端口映射和訪問控制
services: web: image: nginx ports: - "80:80" # 主機端口:容器端口 - "443:443" expose: - "8080" # 僅對鏈接的容器暴露
7. 資源限制
services: app: image: myapp deploy: resources: limits: cpus: '1.0' memory: 512M reservations: cpus: '0.5' memory: 256M
docker compose常用指令
# 拉取服務所需的鏡像(不啟動容器) docker compose pull # 構建服務鏡像(如果配置了 build) docker compose build # 啟動所有服務(會自動拉取或構建鏡像) docker compose up -d # 重新構建并啟動 docker compose up --build
# 啟動所有服務
docker compose up
docker compose up -d # 后臺運行
docker compose up service1 # 啟動特定服務
# 停止服務
docker compose down # 停止并移除容器
docker compose down -v # 停止并移除容器和卷
# 重啟服務
docker compose restart
docker compose restart service1
docker compose start # 啟動已存在的服務
docker compose stop # 停止服務
docker compose pause # 暫停服務
docker compose unpause # 恢復暫停的服務
docker compose kill # 強制停止服務
docker compose rm # 刪除已停止的容器
docker compose ps # 查看服務狀態
docker compose logs # 查看所有服務日志
docker compose logs service1 # 查看特定服務日志
docker compose logs -f # 實時查看日志
docker compose top # 查看運行進程
docker compose images # 查看使用的鏡像
docker compose pull # 拉取服務鏡像
docker compose build # 構建服務鏡像
docker compose push # 推送服務鏡像
docker compose exec service1 bash # 在服務中執行命令
docker compose exec -it service1 sh # 交互式執行
docker compose run --rm service1 command # 一次性運行命令
docker compose config # 驗證和查看組合配置
docker compose config --services # 列出所有服務
docker compose config --volumes # 列出所有卷
docker compose up --scale service1=3 # 擴展服務實例數量
docker compose scale service1=5 # 伸縮服務實例
docker compose events # 查看實時事件
docker compose port service1 80 # 查看服務的端口綁定
# 開發環境
docker compose -f docker-compose.dev.yml up -d
# 生產環境
docker compose -f docker-compose.prod.yml up -d
# 測試環境
docker compose -f docker-compose.test.yml up -d
| 方面 | ports 映射 | volumes 映射 |
|---|---|---|
| 作用對象 | 網絡端口 | 文件系統 |
| 映射關系 | 主機端口 ? 容器端口 | 主機目錄 ? 容器目錄,兩者目錄共享 |
| 數據流向 | 網絡流量雙向轉發 | 文件數據雙向同步 |
| 持久化 | 不涉及數據存儲 | 數據持久化在主機 |
| 典型用途 | 服務訪問、API暴露 | 配置文件、日志、數據存儲 |
e.g:

version: '3'
services:
# MySQL 數據庫服務
mysql:
image: mysql:8.0
container_name: mysql-db
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: mac123
MYSQL_DATABASE: lu_tale
MYSQL_USER: winter
MYSQL_PASSWORD: 1111
volumes:
- "./mysql/data:/var/lib/mysql"
- "./mysql/init:/docker-entrypoint-initdb.d"
- "./mysql/conf:/etc/mysql/conf.d"
networks:
- app-network
# 應用服務
delay-server:
container_name: my-site
image: winterchen/my-site
restart: always
# 移除外部端口映射,通過 Nginx 訪問
ports:
- "8089:8089"
volumes:
- "./tmp:/tmp"
environment:
SPRING_DATASOURCE_DRUID_URL: jdbc:mysql://mysql:3306/lu_tale?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
SPRING_DATASOURCE_DRUID_USERNAME: root
SPRING_DATASOURCE_DRUID_PASSWORD: 1111
QINIU_ACCESSKEY: ""
QINIU_SERECTKEY: ""
QINIU_BUCKET: ""
QINIU_CDN_URL: ""
depends_on:
- mysql
networks:
- app-network
# Nginx 反向代理服務
nginx:
image: nginx:alpine
container_name: nginx-proxy
restart: always
ports:
- "80:80"
- "443:443" # 如果需要 HTTPS
volumes:
- "./nginx/conf.d:/etc/nginx/conf.d" # Nginx 配置文件
- "./nginx/logs:/var/log/nginx" # 日志文件
- "./nginx/html:/usr/share/nginx/html" # 靜態文件
depends_on:
- delay-server
networks:
- app-network
# 定義網絡
networks:
app-network:
driver: bridge
nginx配置:
./nginx/conf.d/default.conf
server { listen 80; server_name localhost; # 靜態文件處理 location /static/ { alias /usr/share/nginx/html/static/; expires 30d; } # API 和動態請求轉發到應用服務 location / { proxy_pass http://delay-server:8089; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 超時設置 proxy_connect_timeout 30s; proxy_send_timeout 30s; proxy_read_timeout 30s; } # 健康檢查 location /health { proxy_pass http://delay-server:8089/health; access_log off; } }

浙公網安備 33010602011771號