这里整理下我之前实验室维基xwiki-docker迁移全过程:
xwiki包含两个docker容器:
web服务容器名: xwiki-mysql-tomcat-web, 对应的数据卷名: xwiki_xwiki-data
mysql服务容器名: xwiki-mysql-db, 对应的数据卷名: xwiki_mysql-data
mkdir backup-docker 创建备份目录
cd backup-docker 进入备份目录成为当前目录
将容器和数据卷的细节信息保存下来,方便以后查看
sudo docker inspect xwiki-mysql-tomcat-web > xwiki-mysql-tomcat-web.txt
sudo docker inspect xwiki-mysql-db > xwiki-mysql-db.txt
sudo docker volume inspect xwiki_xwiki-data > xwiki_xwiki-data.txt
sudo docker volume inspect xwiki_mysql-data > xwiki_mysql-data.txt
将两容器更新到新镜像
sudo docker commit 21787172b4b2 xwiki:my
sudo docker commit 5af1860d31f5 mysql:my
将两新镜像保存为tar文件,这样就可以拷贝到新服务器上
sudo docker save -o xwiki.tar xwiki:my
sudo docker save -o mysql.tar mysql:my
利用busybox镜像运行一个容器,利用--volumes-from参数可以共享挂载web服务对应的数据卷,利用-it参数可以进到容器里面,
手动查看一下数据卷内容是否正确,容器内路径为:/usr/local/xwiki,其中--rm参数意味着这个容器运行完后自动删除,相当于临时容器
sudo docker run --name temp1 -it --volumes-from xwiki-mysql-tomcat-web --rm busybox
备份数据卷为tar文件,参数-v $(pwd):/backup意思是将本机当前目录映射到容器内部的/backup目录, 'tar cvf /backup/xwiki_xwiki-data.tar /usr/local/xwiki'是在容器内部执行的命令,
数据卷对应的容器内部路径为/usr/local/xwiki,宿主机当前目录对应的容器内部路径为/backup,所以命令在容器内部执行完后,相当于把数据卷备份到了宿主机当前目录下的tar文件里面
sudo docker run --name temp1 --volumes-from xwiki-mysql-tomcat-web --rm -v $(pwd):/backup busybox tar cvf /backup/xwiki_xwiki-data.tar /usr/local/xwiki
同上,只不过操作的是mysql服务对应的数据卷
sudo docker run --name temp1 -it --volumes-from xwiki-mysql-db --rm busybox
同上,只不过操作的是mysql服务对应的数据卷
sudo docker run --name temp1 --volumes-from xwiki-mysql-db --rm -v $(pwd):/backup busybox tar cvf /backup/xwiki-mysql-db.tar /var/lib/mysql
-----------------------------------------------------------------------------------------
以上为备份全过程,接下来在新机器上进行还原:
利用一个临时容器创建名称为xwiki_xwiki-data的数据卷,同时进到容器内部查看对应目录是否正确
sudo docker run -v xwiki_xwiki-data:/usr/local/xwiki --name store_xwiki -it --rm busybox
利用一个临时容器将tar文件里面的数据还原到上一步创建的数据卷中
sudo docker run --volumes-from store_xwiki -v $(pwd):/backup --rm busybox tar xvf /backup/xwiki_xwiki-data.tar
同上,只不过操作的是mysql服务对应的数据卷
sudo docker run -v xwiki_mysql-data:/var/lib/mysql --name store_mysql -it --rm busybox
同上,只不过操作的是mysql服务对应的数据卷
sudo docker run --volumes-from store_mysql -v $(pwd):/backup --rm busybox tar xvf /backup/xwiki-mysql-db.tar
还原web服务镜像
sudo docker load -i xwiki.tar
还原mysql服务镜像
sudo docker load -i mysql.tar
到此,镜像和数据卷都已经还原,利用docker-compose.yml文件启动容器
cd xwiki
docker-compose up -d