一次性把「正在运行的 3 个容器」无损迁移到docker-compose体系,并打成离线一键包。
全程 5 分钟,以后再启停/升级/迁移只要:
cd /opt/stack docker-compose up -d # 启动 docker-compose stop # 停止 docker-compose pull && docker-compose up -d # 升级1.创建统一目录
mkdir -p /opt/stack/{mysql,minio,redis} cd /opt/stack2.把现有数据“搬”到统一目录
# 1.1 MySQL 命名卷 → 本地目录 docker run --rm \ -v mysql-data:/from \ -v /opt/stack/mysql:/to \ alpine ash -c "cd /from && cp -a . /to" # 1.2 MinIO、Redis 已是绑定挂载,直接软链接(或 cp -a 均可) ln -s /opt/minio/data /opt/stack/minio-data ln -s /opt/redis/data /opt/stack/redis-data若原目录不在/opt/minio/data请改成实际路径;也可用cp -a复制一份,确保迁移时不再依赖老目录
3.生成 docker-compose.yml
cat > docker-compose.yml <<'EOF' version: "3.8" services: mysql: image: mysql:8.0.39 container_name: vm_mysql01 restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: 123456 ports: - "3306:3306" volumes: - ./mysql:/var/lib/mysql command: ["--default-authentication-plugin=mysql_native_password"] minio: image: minio/minio:RELEASE.2025-04-22T22-12-26Z container_name: vm_minio01 restart: unless-stopped ports: - "9000:9000" - "9001:9001" environment: MINIO_ROOT_USER: admin MINIO_ROOT_PASSWORD: admin123456 volumes: - ./minio-data:/data command: server /data --console-address ":9001" redis: image: redis:6.2.6 container_name: vm_redis restart: unless-stopped ports: - "6379:6379" volumes: - ./redis-data:/data mem_limit: 256m command: [ "redis-server", "--appendonly", "yes", "--maxmemory", "200mb", "--maxmemory-policy", "allkeys-lru" ] EOF4.停旧容器、用 compose 启动新容器
# 3.1 平滑停止旧容器(数据已落盘) docker stop vm_mysql01 vm_minio01 vm_redis docker rm vm_mysql01 vm_minio01 vm_redis # 3.2 一键拉起 docker compose up -d5.验证
docker compose ps # 三个都是 Up mysql -h127.0.0.1 -uroot -p123456 -e "select 1;" curl -s http://127.0.0.1:9000/minio/health/live docker exec -it vm_redis redis-cli ping全部正常即可删除旧命名卷(可选):
docker volume rm mysql-data6.制作离线一键迁移包
# 5.1 导出镜像 docker save mysql:8.0.39 minio/minio:RELEASE.2025-04-22T22-12-26Z redis:6.2.6 \ -o images.tar # 5.2 打包 compose 文件 + 数据 + 镜像 cd /opt tar zcf stack-all-in-one.tar.gz \ stack/ images.tar→ 得到stack-all-in-one.tar.gz,随便拷到另一台 CentOS 7 机器:
# 目标机任意目录解压 tar zxf stack-all-in-one.tar.gz docker load -i images.tar cd stack docker-compose up -d整套环境 3 分钟恢复原样。
以后日常命令
cd /opt/stack docker compose stop # 停机 docker compose start # 开机 docker compose pull # 拉最新镜像 docker compose up -d # 升级并重启 docker compose logs -f mysql # 看日志