迁移docker生产环境

镜像迁移

1,本地创建好image, 将image打包

1
docker save -o images.tar image1:1.0.0 image2:1.2.0 ...
BASH

2,将打包好的压缩文件上传到服务器,并在服务器端load

1
docker load < images.tar
BASH

3,将docker-compose.yml和.env文件上传到服务器,并启动服务
1
docker-compose up
BASH

注意:yml文件中引用的image版本号要和打包的image版本号一致。

数据迁移

由于docker volumes的访问权限级别很高,以至于普通的数据拷贝不允许,所以这里我们需要借助一个临时docker image(busybox),先将volume映射到临时image中,然后再将image中volumes打包拷贝到其他目录下,并将此目录映射到宿主机上我们可以访问的文件夹下。

1,将宿主机上的volumes打包

1
2
3
4
5
6
7
8
9
# -v ~/backup:/backup
# ~/backup -> 宿主机上的目录用来存放压缩后的volume
# /backup -> image中存放volumes.tgz的目录

# -v /var/lib/docker:/docker
# /var/lib/docker -> 宿主机上实际存放volumes文件的目录
# /docker -> image中存放volumes文件的目录

docker run --rm -it -v ~/backup:/backup -v /var/lib/docker:/docker busybox tar cfz /backup/volumes.tgz /docker/volumes
BASH

2, 迁移压缩包到新的服务器,解压压缩包

1
2
3
4
mkdir ~/backup
mv volumes.tgz ~/backup
cd ~/backup
sudo tar -zxf volumes.tgz
BASH

3,同样借助临时image将volume拷贝到宿主机上

1
2
3
4
5
6
7
8
9
# -v ~/backup/docker/volumes:/volumes
# ~/backup/docker/volumes -> 宿主机上解压的volumes文件
# /backup -> image中存放volumes的目录

# -v /var/lib/docker:/docker
# /var/lib/docker -> 宿主机上要存放image的目录
# /docker -> image中volumes的拷贝目录

docker run --rm -it -v ~/backup/docker/volumes:/backup -v /var/lib/docker:/docker busybox cp -rp /backup/* /docker/volumes/
BASH

4,根据volume名称挂载volume

1
docker volume create #volume-name#
BASH

References:
[1]https://www.hangge.com/blog/cache/detail_2411.html
[2]https://sealhuang.github.io/migrate-docker-volume-from-one-host-to-another


迁移docker生产环境
https://r-future.github.io/post/migration-with-docker/
Author
Future
Posted on
November 12, 2022
Licensed under