一、问题
将 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 结束!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于