Docker Compose 使用实例详解

Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具,通过 YAML 文件配置应用程序服务,一键启动所有关联容器,这篇文章主要介绍了Docker Compose 使用实例,需要的朋友可以参考下



一、Docker Compose 简介

Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具,通过 YAML 文件配置应用程序服务,一键启动所有关联容器。

二、安装 Docker Compose

Linux:

1
2
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 安装(已内置 Compose)

验证安装:

1
docker-compose --version

三、基础配置文件示例(docker-compose.yml)

  1. version: '3.8'  # Compose文件格式版本

  2. services:

  3.   web:

  4.     build: .  # 使用当前目录的Dockerfile构建

  5.     ports:

  6.       - "8000:80"  # 主机端口:容器端口

  7.     depends_on:

  8.       - db

  9.     environment:

  10.       - DB_HOST=db

  11.     networks:

  12.       - mynetwork

  13.   db:

  14.     image: mysql:8.0

  15.     volumes:

  16.       - db_data:/var/lib/mysql

  17.     environment:

  18.       MYSQL_ROOT_PASSWORD: example

  19.       MYSQL_DATABASE: myapp

  20.     networks:

  21.       - mynetwork

  22.     healthcheck:

  23.       test: ["CMD-SHELL", "mysqladmin ping -h localhost"]

  24.       interval: 30s

  25.       timeout: 10s

  26.       retries: 3

  27. volumes:

  28.   db_data:

  29. networks:

  30.   mynetwork:

  31.     driver: bridge

四、关键配置解析

  • version:指定Compose文件格式版本(常用3.x)

  • services:定义服务(容器)

    • build:指定构建上下文路径(含Dockerfile)

    • image:直接使用官方镜像

    • ports:端口映射

    • depends_on:服务依赖关系

    • environment:环境变量设置

  • volumes:数据卷定义(持久化存储)

  • networks:自定义网络配置

  • healthcheck:容器健康检查

五、常用命令

启动服务:

1
2
docker-compose up -d  # 后台启动
docker-compose up --build  # 重新构建后启动

停止服务:

1
2
docker-compose down  # 停止并删除容器、网络等
docker-compose stop  # 仅停止容器

查看日志:

1
2
docker-compose logs -f  # 实时查看日志
docker-compose logs web  # 查看指定服务日志

进入容器:

1
docker-compose exec web bash  # 进入web容器

构建镜像:

1
2
docker-compose build  # 构建所有服务镜像
docker-compose build web  # 仅构建web服务镜像

六、完整项目示例(Node.js + MySQL + Nginx)

项目结构:

1
2
3
4
5
6
7
8
9
10
myapp/
├── docker-compose.yml
├── nginx/
│   ├── nginx.conf
│   └── Dockerfile
├── app/
│   ├── package.json
│   ├── server.js
│   └── Dockerfile
└── .env

docker-compose.yml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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:

1
2
3
4
5
6
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
CMD ["npm", "start"]

nginx/Dockerfile:

1
2
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf

nginx/nginx.conf:

1
2
3
4
5
6
7
8
server {
    listen 80;
    location / {
        proxy_pass http://app:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

.env:

1
DB_ROOT_PASSWORD=supersecret

七、高级功能

扩展配置:

1
2
3
4
5
6
7
8
# 扩展服务实例
app:
  deploy:
    replicas: 3
  resources:
    limits:
      cpus: '0.5'
      memory: 512M

多环境配置:

1
2
3
4
5
6
7
8
9
# docker-compose.override.yml(开发环境)
version: '3.8'
services:
  app:
    build: ./app
    volumes:
      - ./app:/app  # 挂载代码目录实现热更新
    environment:
      - NODE_ENV=development

使用模板文件:

1
2
3
4
# docker-compose.yml
services:
  app:
    image: myapp:${TAG}

八、最佳实践

  • 使用.env文件管理敏感信息

  • 为不同环境创建独立的Compose文件(如docker-compose.prod.yml)

  • 使用健康检查确保服务启动顺序

  • 对持久化数据使用命名卷

  • 定期清理未使用的镜像和卷:

1
docker system prune -a

九、调试技巧

查看容器状态:

1
docker-compose ps

检查网络配置:

1
docker network inspect mynetwork

验证配置文件:

1
docker-compose config

到此这篇关于Docker Compose 使用实例的文章就介绍到这了,更多相关Docker Compose 使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!


本文链接:https://www.xuan5.com/news/article/109.html 文章声明:本站内容均来自网络收集,如有侵权请联系我们删除下架处理。文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,结果仅供参考,玄武统计所有文章均包含本声明。

分享到: