先了解清楚服务情况
# 看哪些容器已经是 compose 管理的(有 compose 文件就直接拷文件,不用逆向)
docker compose ls
docker容器要注意的事项
-
容器镜像版本尽量不要使用latest版本,最好固定版本,比如redis固定在,8.2.1版本,这样后续迁移不会因为版本差异导致服务异常
-
容器一定要将数据挂载到宿主机目录中,做数据持久化
-
容器和数据两个是分开迁移的,属于两部分
方案A:autocompose 一键导出
导出的compose配置要稍作修改,应该不能直接运行拉起来
仓库地址
https://github.com/Red5d/docker-autocompose
拉取镜像
docker pull ghcr.io/red5d/docker-autocompose:latest
执行
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/red5d/docker-autocompose <container-name-or-id>
# 把所有运行中的容器导出成一份 yml
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
red5d/docker-autocompose $(docker ps -q) > /root/all-containers.yml
生成的文件长这样,所有信息都自动带上了:
services:
node-app-1:
container_name: node-app-1
image: node:18-alpine
restart: always
ports:
- 3001:3001
volumes:
- /root/app1:/app
environment:
- NODE_ENV=production
networks:
- caddy_net
networks:
caddy_net:
external: true
如果 10 个容器属于不同项目,建议按项目分组导出,每个项目一份,便于以后独立管理:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
red5d/docker-autocompose 容器名1 容器名2 > /root/project-a.yml
方案 B: runlike(生成 docker run 命令)
仓库地址
https://github.com/lavie/runlike
这个镜像拉取比较慢,但是挺好用
docker pull assaflavie/runlike
只回顾某个容器当时怎么启动的:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike YOUR-CONTAINER
就会生成该容器创建时候的run命令,几乎一致
# 生成效果如下,基本可以直接稍作修改复制去执行
docker run --name=sys --hostname=VM-16-6-ubuntu --volume /root/sys:/root/sys --network=host --restart=always
--runtime=runc --detach=true -t docker.1ms.run/node:23.11.1 bash /root/sys/start.sh
使用场景推荐
- • 灾难恢复:定期生成容器快照,秒级重建服务
- • 配置迁移:跨设备/跨平台转移服务无忧
- • 文档整理:自动生成部署文档,新人交接神器
- • 版本控制:配合Git实现配置变更追踪