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

本贴最后更新于 911 天前,其中的信息可能已经斗转星移

一、问题

将 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

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    491 引用 • 917 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...