前言
最近领了一台服务器,感觉闲着也是闲着,倒不如拿来挂一下PT,赚点魔力值也不错,就想安装一下Transmission,但拉取镜像的时候发现,它更新了,并且已经移除了第三方的UI页面,变得好丑好丑的界面,忍不了,得换个好看的。
我在另外的两台服务器也有部署到Transmission这个服务,但以前拉取的镜像,我忘记是哪个版本了,那时候拉取的镜像时最新版latest,没办法根据这个标签来定位镜像,想想倒不如直接将现在这个容器打包复制到这台新服务器上,这样也不用到处找了。
迁移Docker我认为有两个方式:
- 复制docker-compose.yml文件内容+挂载数据到新服务器
(推荐) - 打包整个容器成新镜像,将新镜像打包成tar压缩包复制到新服务器
下面演示这两种方式都演示一遍,方便你的选择。
容器数据
可能你有个疑问,如果这个容器里面有什么数据,打包后这些数据怎么办?
答:我们一般在运行docker容器前会设置重要的数据进行挂载到宿主机,这样是为了数据持久化,保证数据不会因为容器的停止而丢失。
当我们有挂载数据到宿主机时,我们可以直接复制这些数据到新的服务器上,并且将docker服务的挂载路径设置为这些数据就好了。
方案一:docker-compose(推荐)
使用Docker 容器如果会产生存储数据,一直要做持久化操作,也就是挂载容器的数据到宿主机,这样后面迁移Docker服务就直接复制docker-compose和挂载的数据就可以完成迁移了。
缺点:不能打包容器产生的数据
优点:方便,直接复制docker-compose内容到其他docker-compose就可以运行,不需要繁琐的配置方法
适用范围: 需要快速部署,并且没有对容器内部修改过的
- 压缩数据并复制到新服务器
- 运行新服务器的docker服务
压缩挂载数据并复制到新服务器
我们的docker-compose.yml都在bitwarden文件夹里面了,数据也在里面,所以我们可以将整个压缩包打包发送到新服务器上面,这样就不用分次复制数据和docker-compose.yml了。
1. 压缩文件夹
tar cvf bitwarden.tar ./bitwarden
压缩bitwarden文件夹保存到当前目录下,压缩包名为bitwarden.tar
2. 传输文件
复制刚刚压缩好的压缩包到新服务器上
scp ./bitwarden.tar username@192.168.2.5:/home/docker/
运行新服务器的docker服务
1. 解压压缩包
tar xvf ./bitwarden.tar
2. 启动docker服务
cd bitwarden # 进入解压目录
docker-compose up -d # 运行docker-compose
方案二:打包容器
流程
- 停止正在运行的Transmission容器
- 使用
docker commit命令将容器转换为映像 - 使用
docker save命令将映像保存为.tar文件 - 将.tar文件复制到另一台服务器。
- 在另一台服务器上,使用
docker load命令将.tar文件加载为Docker映像 - 使用新加载的映像启动Transmission容器
停止需要打包的容器
查看当前需要打包的容器
docker ps
找到容器名,停止该容器
docker stop 容器名

打包容器
停止容器后,将容器保存为一个新的镜像,
docker commit 容器名 新镜像名

将镜像打包成压缩包
使用docker save命令,将镜像保存为压缩包,之后通过这个压缩包传送到其他服务器上,再将压缩包加载为镜像,就可以直接使用这个镜像了。
docker save 镜像名 > 新压缩包名.tar

如果你想指定存储位置,也可以使用以下命令:
docker save -o 存储路径/file.tar 新镜像名
传送压缩包到其他服务器
下面是一个例子,将服务器A的文件上传到服务器B。
服务器A的文件路径路径是绝对路径或相对路径。
服务器B的路径必须是绝对路径。
scp 服务器A文件路径 用户名@IP地址:服务器B文件路径
scp ./transmission-image.tar root@46.136.154.163:/opt/transmission-image.tar
将压缩包加载为镜像
另一台服务器上,使用docker load命令将.tar文件加载为Docker映像。
打开transmission-image.tar压缩包所在的位置,或者使用绝对路径也行。
docker load < transmission-image.tar

查看镜像
进过上面的步骤,已经将容器加载为镜像了,接下来我们平时应该怎么部署容器就这么部署了。
docker images

编写docker-compose.yml
version: "2.1"
services:
transmission:
image: transmission-image
container_name: transmission-d
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- USER=test
- PASS=12345
volumes:
- ./config:/config
- ./downloads:/downloads
- ./watch/folder:/watch
ports:
- 3091:9091
- 51413:51413
- 51413:51413/udp

查看容器运行情况
docker ps

总的来说,还是挺简单的,将容器保存成镜像,然后将镜像打包成压缩包,在另一台服务器加载压缩包到docker镜像中。


