docker 服务迁移,容器内文件修改

Updated on with 0 views and 0 comments

一、问题

将docker容器进行迁移,迁移后需要部署到另一个服务器中,且需要修改配置文件中相应信息

二、故事

公司最近由于需要测试新的东西,但是之前没有搭建测试服务。所以导致现在新的东西测试不了,又不能直接上到正式系统,因此需要进行服务迁移以及重新部署,但是服务还挺多,自己的权限又没那么多,所以就准备直接copy Docker容器,然后启动。

三、步骤

1、打包所需要的docker镜像

1) 查看运行容器
命令:docker ps
在这里插入图片描述


2)将运行的容器保存为image
命令: docker commit 容器名 将要保存的镜像名

docker commit xxl-job test-xxl-job

在这里插入图片描述


3)查看保存的image
命令:docker images
在这里插入图片描述


4)将images 打包
命令:docker save -o 保存的地址 镜像名称多个
-o : 保存地址

PS:打包需要时间所以莫急,慢慢等,并不是卡住了

docker save -o /data/test.tar test
docker save test  >images.tar

在这里插入图片描述
或者是
在这里插入图片描述


5)将tar包 传输或下载到目标服务器
命令:scp 传输文件 目标账号@ip地址:目标服务器地址

scp -r test.tar root@172.0.0.29:/data

在这里插入图片描述

如果是备份到此结束

2、构建运行镜像

1) 登录目标服务器、查看文件
命令:ssh 用户名@ip

ssh root@172.0.0.1

在这里插入图片描述


2)解压tar包
命令:docker load -i tar包名称

docker load -i test.tar

在这里插入图片描述


3)运行容器

命令:docker run ... image名称

-d , --detach=false, 指定容器运行于前台还是后台,默认为false
-t, --tty=false, 分配tty设备,该可以支持终端登录,默认为false
-w, --workdir="", 指定容器的工作目录
-e, --env=[], 指定环境变量,容器中可以使用该环境变量
-p, --publish=[], 指定容器暴露的端口
-v, --volume=[], 给容器挂载存储卷,挂载到容器的某个目录
--name="", 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
--net="bridge", 容器网络设置: bridge host none
--privileged=false, 指定容器是否为特权容器,特权容器拥有所有的capabilities
--restart="no", 指定容器停止后的重启策略: no on-failure always
--rm=false, 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
--add-host=xxx:ip 指定host

 docker run -d --network=host --name test1 test

在这里插入图片描述

建议在不知道端口的情况下直接--network=host 出现冲突再解决

如果是运行容器到此结束

3、修改docker 中jar包配置文件

1)进入容器
命令:docker exec -it 容器名 /bin/bash

docker exec -it test1 /bin/bash

在这里插入图片描述


2)查看jar包文件
命令:jar tf jar包名称

jar tf xxx.jar

在这里插入图片描述
结果:
在这里插入图片描述


3)找到对应的配置文件,yml或者properties文件,提取文件
命令:jar xf jar包名称 路径

jar xf web_scoket.jar BOOT-INF/classes/application.yml

在这里插入图片描述


4)退出容器将文件cp出来编辑
命令: docker cp 容器名:路径 目标文件

docker cp test1:/BOOT-INF/classes/application.yml application.yml

在这里插入图片描述

因为docker容器内没得vim,不嫌麻烦可以安装一个,建议copy出来修改。之后使用vim or vi 编辑文件,修改好后保存


5) 将修改好的文件copy回原来的容器
命令: docker cp 源文件 容器名:地址

docker cp application.yml test1:/BOOT-INF/classes/application.yml

在这里插入图片描述

PS: 此处的application1.yml 只是因为做演示,copy时候切记别修改文件名称
也可使用 cat命令 查看是否已经修改 cat xxx


6)将文件copy回jar中
命令:jar uf jar包名称 文件地址

jar uf web_scoket.jar BOOT-INF/classes/application.yml

在这里插入图片描述


7)退出容器,docker restart 结束!

OVER


标题:docker 服务迁移,容器内文件修改
作者:sirwsl
地址:https://www.wslhome.top/articles/2022/05/26/1653494450577.html