通过docker-compose.yml文件一次性安装mysql、minio、redis服务

1. 创建统一目录(确保路径存在)

复制代码
# 创建 /opt/stack 及子目录,匹配 Compose 文件中的挂载路径

mkdir -p /opt/stack/{mysql,minio/data,redis/data}

2. 保存 Compose 文件

复制代码
# 直接写入文件(避免手动编辑出错)

cat > /opt/stack/docker-compose.yml <<'EOF'
# Docker Compose 版本(3.8 兼容主流 Docker 版本,适配 19.03+)
version: "3.8"

# 自定义网络:隔离三个服务,避免与其他容器网络冲突
networks:
  stack-network:
    driver: bridge

# 服务定义
services:
  # ===================== MySQL 服务 =====================
  mysql:
    # 镜像版本:与原 docker run 一致(8.0.39)
    image: mysql:8.0.39
    # 容器名称:与原 docker run 一致(vm_mysql01)
    container_name: vm_mysql01
    # 重启策略:与原 docker run 一致(always,容器退出始终自动重启)
    restart: always
    # 端口映射:与原 docker run 一致(宿主机3306映射容器3306)
    ports:
      - "3306:3306"
    # 环境变量:与原 docker run 一致(root密码123456)
    environment:
      - MYSQL_ROOT_PASSWORD=123456
    # 数据卷挂载:将原命名卷 mysql-data 改为绑定 /opt/stack/mysql 目录
    # 统一存储到 /opt/stack/ 下,替代 Docker 自动管理的命名卷
    volumes:
      - /opt/stack/mysql:/var/lib/mysql
    # 归属自定义网络
    networks:
      - stack-network
    # 兼容原 MySQL 8.0 客户端认证方式(避免旧客户端连接失败)
    command: ["--default-authentication-plugin=mysql_native_password"]

  # ===================== MinIO 服务 =====================
  minio:
    # 镜像版本:与原 docker run 一致(RELEASE.2025-04-22T22-12-26Z)
    image: minio/minio:RELEASE.2025-04-22T22-12-26Z
    # 容器名称:与原 docker run 一致(vm_minio01)
    container_name: vm_minio01
    # 重启策略:与原 docker run 隐含的 always 对齐(异常自动重启)
    restart: always
    # 端口映射:与原 docker run 一致(9000=API端口,9001=控制台端口)
    ports:
      - "9000:9000"
      - "9001:9001"
    # 环境变量:与原 docker run 一致(账号admin,密码admin123456)
    environment:
      - MINIO_ROOT_USER=admin
      - MINIO_ROOT_PASSWORD=admin123456
    # 数据卷挂载:将原 /opt/minio/data 改为 /opt/stack/minio/data
    # 统一存储到 /opt/stack/ 下,保持路径逻辑一致
    volumes:
      - /opt/stack/minio/data:/data
    # 归属自定义网络
    networks:
      - stack-network
    # 启动命令:与原 docker run 一致(指定存储目录和控制台端口)
    command: server /data --console-address ":9001"

  # ===================== Redis 服务 =====================
  redis:
    # 镜像版本:与原 docker run 一致(6.2.6)
    image: redis:6.2.6
    # 容器名称:与原 docker run 一致(vm_redis)
    container_name: vm_redis
    # 重启策略:与原 docker run 一致(always)
    restart: always
    # 端口映射:与原 docker run 一致(宿主机6379映射容器6379)
    ports:
      - "6379:6379"
    # 内存限制:与原 docker run 的 -m 256m 一致
    mem_limit: 256m
    # 数据卷挂载:将原 /opt/redis/data 改为 /opt/stack/redis/data
    # 统一存储到 /opt/stack/ 下
    volumes:
      - /opt/stack/redis/data:/data
    # 归属自定义网络
    networks:
      - stack-network
    # 启动命令:与原 docker run 完全一致(开启AOF、内存限制、淘汰策略)
    command:
      - redis-server
      - --appendonly yes          # 开启AOF持久化(与原命令一致)
      - --maxmemory 200mb         # 最大内存限制200MB(与原命令一致)
      - --maxmemory-policy allkeys-lru  # 内存满时淘汰最少使用的key(与原命令一致)
EOF

3. 启动所有服务

复制代码
# 进入 /opt/stack 目录

cd /opt/stack

# 后台启动所有服务(自动拉取镜像、创建容器、挂载数据卷)

docker compose up -d

4. 验证服务是否启动成功

复制代码
# 查看容器状态(所有服务应为 Up 状态)

docker compose ps

# 验证 MySQL 连接

mysql -h127.0.0.1 -uroot -p123456 -e "select 1;"

# 验证 MinIO 健康状态

curl -s http://127.0.0.1:9000/minio/health/live

# 验证 Redis 连接

docker exec -it vm_redis redis-cli ping

日常运维命令

复制代码
# 进入 /opt/stack 目录执行以下命令

cd /opt/stack

# 停止所有服务(保留数据)

docker compose stop

# 启动所有服务

docker compose start

# 重启所有服务

docker compose restart

# 查看某个服务的日志(如 MySQL)

docker compose logs -f mysql

# 升级服务(拉取最新镜像并重启)

docker compose pull && docker compose up -d

# 彻底删除容器(保留 /opt/stack 下的数据)

docker compose down

注意事项

  1. 首次启动时,Docker 会自动拉取对应版本的镜像,若网络较慢可耐心等待;
  2. /opt/stack/ 目录下的所有数据会持久化存储,删除容器不会丢失数据;
  3. 若需修改密码 / 端口 / 参数,直接编辑 docker-compose.yml 后执行 docker-compose up -d 即可热更新;
  4. 生产环境建议将 restart: always 改为 restart: unless-stopped(手动停止后不会自动重启,更安全)。
相关推荐
ACP广源盛139246256731 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑
百年੭ ᐕ)੭*⁾⁾2 小时前
docker使用neo4j
docker·容器·neo4j
峥无2 小时前
Linux系统编程基石:静态库·动态库·ELF文件·进程地址空间全景图
linux·运维·服务器
码云数智-大飞3 小时前
本地部署大模型:隐私安全与多元优势一站式解读
运维·网络·人工智能
Harvy_没救了4 小时前
【网络部署】 Win11 + VMware CentOS8 + Nginx 文件共享服务 Wiki
运维·网络·nginx
春风有信4 小时前
【2026.05.01】Windows10安装Docker Desktop 4.71.0.0步骤及问题解决
运维·docker·容器
2401_873479405 小时前
断网时如何实时判断IP归属?嵌入本地离线库,保障风控不中断
运维·服务器·网络
守城小轩5 小时前
基于Chrome140的Yahoo自动化(关键词浏览)——需求分析&环境搭建(一)
运维·自动化·chrome devtools·浏览器自动化·指纹浏览器·浏览器开发
handler015 小时前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
日取其半万世不竭7 小时前
LVM 逻辑卷管理:不停机扩容磁盘的正确方式
运维·服务器