给 CodiMD 实例搬家

用 Docker 部署的 CodiMD,可是问题来了,在换机器的时候我该如何连着数据一起导出呢……

思考

Docker 里容器叫做 Container,镜像叫做 Image。两者的关系是:镜像是用于创建 Docker 容器的模板,而容器是镜像运行时的实体。

Docker 本身提供了 import & exportload & save 这两种导入导出方法,前者是用于容器,后者是用于镜像。

而我们要导出容器的文件,所以理所当然应该 save 后 load,但是这样会有一个问题——因为我使用 docker-compose 而不是 docker run 来启动关闭,我怎么知道 docker-compose.yml 和我导入的容器是对应的呢?

用了 docker inspect codimd_codimd_1 | grep Mounts -A 20 来看了一下文件存储在哪里,但是因为我太菜了,没有头绪。

讨论了一下,果给出了解决方法:

代码块

# In the old machine
docker-compose down

# https://docs.docker.com/storage/volumes/#backup-restore-or-migrate-data-volumes
# backup
docker run --rm --volumes-from codimd_database_1 -v $(pwd):/backup busybox tar czvf /backup/codimd_database-data.tar.gz /var/lib/postgresql/data
docker run --rm --volumes-from codimd_codimd_1 -v $(pwd):/backup busybox tar czvf /backup/codimd_codimd-data.tar.gz /home/hackmd/app/public/uploads

# Then copy the tar files

# In the new machine
# create container and volume
docker-compose up --no-start

# restore
docker run --rm --volumes-from codimd_database_1 -v $(pwd):/backup busybox tar xzvf /backup/codimd_database-data.tar.gz
docker run --rm --volumes-from codimd_codimd_1 -v $(pwd):/backup busybox tar xzvf /backup/codimd_codimd-data.tar.gz

# start container
docker-compose up -d

简单来说,就是仅打包产生的数据文件,然后在新机器上先初始化容器,然后再解包恢复数据文件~


如果喜欢本文,欢迎点击下方的「鼓掌」按钮!

如果上面没有加载出任何东西,可以点击这里