DOCKER 4 分钟 3,036 字

Docker Compose 多服务启动及单独启动指南

0阅读

你需要一个能同时启动 PostgreSQL、MySQL、Redis、消息队列(我选用常用的 RabbitMQ 作为 MQ 实现)和 MinIO 的 Docker Compose 配置文件,并且想知道如何单独启动其中某一个服务。

一、完整的 Docker Compose 配置文件

我为你编写了一份开箱即用的 docker-compose.yml 文件,包含了所有你需要的服务,并做了基础的配置(如密码、端口映射、数据持久化等),方便你直接使用:


version: '3.8'

# 定义所有服务
services:
  # PostgreSQL 服务
  postgres:
    image: postgres:16-alpine
    container_name: my-postgres
    ports:
      - "5432:5432"  # 宿主机端口:容器端口
    environment:
      POSTGRES_USER: root          # 用户名
      POSTGRES_PASSWORD: 123456    # 密码
      POSTGRES_DB: mydb            # 初始化数据库
      TZ: Asia/Shanghai            # 时区
    volumes:
      - postgres-data:/var/lib/postgresql/data  # 数据持久化
    restart: unless-stopped        # 容器退出时除非手动停止,否则自动重启
    networks:
      - my-network

  # MySQL 服务
  mysql:
    image: mysql:8.0
    container_name: my-mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: 123456  # root 密码
      MYSQL_DATABASE: mydb         # 初始化数据库
      TZ: Asia/Shanghai
    volumes:
      - mysql-data:/var/lib/mysql  # 数据持久化
    command: --default-authentication-plugin=mysql_native_password  # 兼容旧客户端
    restart: unless-stopped
    networks:
      - my-network

  # Redis 服务
  redis:
    image: redis:7-alpine
    container_name: my-redis
    ports:
      - "6379:6379"
    environment:
      TZ: Asia/Shanghai
    volumes:
      - redis-data:/data           # 数据持久化
    command: redis-server --requirepass 123456  # 设置密码
    restart: unless-stopped
    networks:
      - my-network

  # RabbitMQ (MQ) 服务
  rabbitmq:
    image: rabbitmq:3-management-alpine
    container_name: my-rabbitmq
    ports:
      - "5672:5672"  # AMQP 协议端口
      - "15672:15672" # 管理后台端口
    environment:
      RABBITMQ_DEFAULT_USER: root
      RABBITMQ_DEFAULT_PASS: 123456
      TZ: Asia/Shanghai
    volumes:
      - rabbitmq-data:/var/lib/rabbitmq
    restart: unless-stopped
    networks:
      - my-network

  # MinIO 服务
  minio:
    image: minio/minio:latest
    container_name: my-minio
    ports:
      - "9000:9000"   # API 端口
      - "9001:9001"   # 控制台端口
    environment:
      MINIO_ROOT_USER: root
      MINIO_ROOT_PASSWORD: 12345678  # MinIO 密码要求至少8位
      TZ: Asia/Shanghai
    volumes:
      - minio-data:/data            # 存储数据持久化
    command: server /data --console-address ":9001"  # 指定控制台端口
    restart: unless-stopped
    networks:
      - my-network

# 定义数据卷(持久化存储)
volumes:
  postgres-data:
  mysql-data:
  redis-data:
  rabbitmq-data:
  minio-data:

# 定义自定义网络(让服务之间可以互相访问)
networks:
  my-network:
    driver: bridge

二、使用说明

1. 前置条件

  • 已安装 Docker 和 Docker Compose(Docker Compose V2 推荐,V1 也兼容)。

  • 将上述配置文件保存为 docker-compose.yml,放在任意目录(比如 docker-services)。

2. 启动所有服务

进入配置文件所在目录,执行以下命令:


# 前台启动(可看到日志,按 Ctrl+C 停止)
docker compose up

# 后台启动(推荐)
docker compose up -d

3. 单独启动某一个服务

格式:docker compose up -d [服务名],服务名对应配置文件中 services 下的名称(如 postgres、mysql 等)。

示例:


# 只启动 Redis 服务(后台运行)
docker compose up -d redis

# 只启动 MySQL 服务(后台运行)
docker compose up -d mysql

# 只启动 RabbitMQ 服务(后台运行)
docker compose up -d rabbitmq

4. 其他常用命令


# 查看已启动的服务状态
docker compose ps

# 停止所有服务(保留容器)
docker compose stop

# 停止某个服务
docker compose stop redis

# 停止并删除容器(数据卷不会删除,数据保留)
docker compose down

# 查看某个服务的日志
docker compose logs -f redis  # -f 实时查看日志

# 进入某个服务的容器(比如进入MySQL容器)
docker compose exec mysql bash

三、各服务访问信息

服务 访问地址 用户名 密码 备注
PostgreSQL localhost:5432 root 123456 初始数据库:mydb
MySQL localhost:3306 root 123456 初始数据库:mydb
Redis localhost:6379 无 123456 密码通过 requirepass 设置
RabbitMQ 控制台:localhost:15672 root 123456 AMQP 端口:5672
MinIO 控制台:localhost:9001 root 12345678 API 端口:9000

总结

  1. 核心配置文件 docker-compose.yml 包含了 PostgreSQL、MySQL、Redis、RabbitMQ(MQ)、MinIO 五大服务,均做了数据持久化和基础安全配置。

  2. 单独启动服务的核心命令是 docker compose up -d [服务名](服务名对应配置文件中的 postgres/mysql/redis/rabbitmq/minio)。

  3. 数据卷(volumes)保证了服务停止/删除后数据不丢失,自定义网络让服务之间可通过容器名互相访问(比如 Redis 容器内可访问 mysql:3306)。

如果需要修改端口、密码等配置,直接编辑 docker-compose.yml 中的对应字段即可,修改后重启服务生效。

(注:文档部分内容可能由 AI 生成)