Docker Compose 使用實例詳解
一、Docker Compose 簡介
Docker Compose 是用于定義和運行多容器 Docker 應用程序的工具,通過 YAML 文件配置應用程序服務,一鍵啟動所有關聯(lián)容器。
二、安裝 Docker Compose
Linux:
sudo curl -L "https://mirrors.tuna.tsinghua.edu.cn/docker/compose/releases/download/v2.32.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
Windows/macOS:
通過 Docker Desktop 安裝(已內(nèi)置 Compose)
驗證安裝:
docker-compose --version
三、基礎配置文件示例(docker-compose.yml)
version: '3.8' # Compose文件格式版本 services: web: build: . # 使用當前目錄的Dockerfile構(gòu)建 ports: - "8000:80" # 主機端口:容器端口 depends_on: - db environment: - DB_HOST=db networks: - mynetwork db: image: mysql:8.0 volumes: - db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: myapp networks: - mynetwork healthcheck: test: ["CMD-SHELL", "mysqladmin ping -h localhost"] interval: 30s timeout: 10s retries: 3 volumes: db_data: networks: mynetwork: driver: bridge
四、關鍵配置解析
- version:指定Compose文件格式版本(常用3.x)
- services:定義服務(容器)
build
:指定構(gòu)建上下文路徑(含Dockerfile)image
:直接使用官方鏡像ports
:端口映射depends_on
:服務依賴關系environment
:環(huán)境變量設置
- volumes:數(shù)據(jù)卷定義(持久化存儲)
- networks:自定義網(wǎng)絡配置
- healthcheck:容器健康檢查
五、常用命令
啟動服務:
docker-compose up -d # 后臺啟動 docker-compose up --build # 重新構(gòu)建后啟動
停止服務:
docker-compose down # 停止并刪除容器、網(wǎng)絡等 docker-compose stop # 僅停止容器
查看日志:
docker-compose logs -f # 實時查看日志 docker-compose logs web # 查看指定服務日志
進入容器:
docker-compose exec web bash # 進入web容器
構(gòu)建鏡像:
docker-compose build # 構(gòu)建所有服務鏡像 docker-compose build web # 僅構(gòu)建web服務鏡像
六、完整項目示例(Node.js + MySQL + Nginx)
項目結(jié)構(gòu):
myapp/ ├── docker-compose.yml ├── nginx/ │ ├── nginx.conf │ └── Dockerfile ├── app/ │ ├── package.json │ ├── server.js │ └── Dockerfile └── .env
docker-compose.yml:
version: '3.8' services: nginx: build: ./nginx ports: - "80:80" depends_on: - app networks: - frontend - backend app: build: ./app environment: - NODE_ENV=production - DB_HOST=db networks: - backend depends_on: db: condition: service_healthy db: image: mysql:8.0 volumes: - db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password MYSQL_DATABASE: myapp secrets: - db_root_password networks: - backend healthcheck: test: ["CMD-SHELL", "mysqladmin ping -h localhost"] interval: 30s timeout: 10s retries: 3 volumes: db_data: networks: frontend: backend: secrets: db_root_password: file: .env
app/Dockerfile:
FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm install --production COPY . . CMD ["npm", "start"]
nginx/Dockerfile:
FROM nginx:alpine COPY nginx.conf /etc/nginx/conf.d/default.conf
nginx/nginx.conf:
server { listen 80; location / { proxy_pass http://app:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
.env:
DB_ROOT_PASSWORD=supersecret
七、高級功能
擴展配置:
# 擴展服務實例 app: deploy: replicas: 3 resources: limits: cpus: '0.5' memory: 512M
多環(huán)境配置:
# docker-compose.override.yml(開發(fā)環(huán)境) version: '3.8' services: app: build: ./app volumes: - ./app:/app # 掛載代碼目錄實現(xiàn)熱更新 environment: - NODE_ENV=development
使用模板文件:
# docker-compose.yml services: app: image: myapp:${TAG}
八、最佳實踐
- 使用
.env
文件管理敏感信息 - 為不同環(huán)境創(chuàng)建獨立的Compose文件(如docker-compose.prod.yml)
- 使用健康檢查確保服務啟動順序
- 對持久化數(shù)據(jù)使用命名卷
- 定期清理未使用的鏡像和卷:
docker system prune -a
九、調(diào)試技巧
查看容器狀態(tài):
docker-compose ps
檢查網(wǎng)絡配置:
docker network inspect mynetwork
驗證配置文件:
docker-compose config
到此這篇關于Docker Compose 使用實例的文章就介紹到這了,更多相關Docker Compose 使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Docker使用編寫dockerfile啟動node.js應用
這篇文章主要介紹了Docker使用編寫dockerfile啟動node.js應用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01