给 CodiMD 实例搬家
用 Docker 部署的 CodiMD,可是问题来了,在换机器的时候我该如何连着数据一起导出呢……
思考
Docker 里容器叫做 Container,镜像叫做 Image。两者的关系是:镜像是用于创建 Docker 容器的模板,而容器是镜像运行时的实体。
Docker 本身提供了 import & export
和 load & 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
简单来说,就是仅打包产生的数据文件,然后在新机器上先初始化容器,然后再解包恢复数据文件~
如果喜欢本文,欢迎点击下方的「鼓掌」按钮!
如果上面没有加载出任何东西,可以点击这里。
如果喜欢本文,欢迎点击下方的「鼓掌」按钮!
如果上面没有加载出任何东西,可以点击这里。