将docker容器进行迁移,迁移后需要部署到另一个服务器中,且需要修改配置文件中相应信息
公司最近由于需要测试新的东西,但是之前没有搭建测试服务。所以导致现在新的东西测试不了,又不能直接上到正式系统,因此需要进行服务迁移以及重新部署,但是服务还挺多,自己的权限又没那么多,所以就准备直接copy Docker容器,然后启动。
2)将运行的容器保存为image
命令: docker commit 容器名 将要保存的镜像名
docker commit xxl-job test-xxl-job
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 [email protected]:/data
如果是备份到此结束
1) 登录目标服务器、查看文件
命令:ssh 用户名@ip
ssh [email protected]
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 出现冲突再解决
如果是运行容器到此结束
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 结束!