前言
最近领了一台服务器,感觉闲着也是闲着,倒不如拿来挂一下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. 压缩文件夹
bash 复制
BASH
tar cvf bitwarden.tar ./bitwarden
压缩bitwarden文件夹保存到当前目录下,压缩包名为bitwarden.tar
2. 传输文件
复制刚刚压缩好的压缩包到新服务器上
bash 复制
BASH
scp ./bitwarden.tar username@192.168.2.5:/home/docker/
运行新服务器的docker服务
1. 解压压缩包
bash 复制
BASH
tar xvf ./bitwarden.tar
2. 启动docker服务
bash 复制
BASH
cd bitwarden # 进入解压目录
docker-compose up -d # 运行docker-compose方案二:打包容器
流程
停止正在运行的Transmission容器
使用
docker commit命令将容器转换为映像使用
docker save命令将映像保存为.tar文件将.tar文件复制到另一台服务器。
在另一台服务器上,使用
docker load命令将.tar文件加载为Docker映像使用新加载的映像启动Transmission容器
停止需要打包的容器
查看当前需要打包的容器
bash 复制
BASH
docker ps
找到容器名,停止该容器
bash 复制
BASH
docker stop 容器名

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

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

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

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

编写docker-compose.yml
dockerfile 复制
DOCKERFILE
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

查看容器运行情况
bash 复制
BASH
docker ps

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



