有啥无脑把 docker 应用搬家的办法吗?

2022-12-05 20:02:29 +08:00
 jsjcjsjc

由于一个应用有好几个 images,我希望带上 docker 内部的配置,完整迁徙到另外一台 VPS, 最好是断网的情况下也可以部署起来(镜像复制过去的情况下)

我目前直接docker save -o 名称.tar AAA:8.2 BBB:5.6打包了 然后docker load -i 包名称.tar直接导入到新的 VPS. 目前是这个结果,似乎不行哈,难道我得一条一条命令启动吗?有啥无脑把 docker 应用搬家的办法吗? 感谢

root@HE1C3GBF2:~# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@HE1C3GBF2:~# docker images
REPOSITORY                            TAG          IMAGE ID       CREATED       SIZE
domain-redirect-docker-master-web     latest       f8c6b6036a7d   3 hours ago   1.28GB
domain-redirect-docker-master-nginx   latest       0a8aeeb3e4ba   3 hours ago   142MB
mysql                                 latest       a3a2968869cf   4 days ago    538MB
rabbitmq                              management   789501296640   5 days ago    263MB
redis                                 latest       3358aea34e8c   2 weeks ago   117MB
root@HE1C3GBF2:~#
1821 次点击
所在节点    问与答
6 条回复
wanacry
2022-12-05 20:14:13 +08:00
您可以使用 Docker 的 export 和 import 命令将应用容器从一台服务器导出到另一台服务器。首先,在源服务器上,使用 docker export 命令将容器导出为 tar 文件:

Copy code
$ docker export <container_name> > export.tar
然后,将导出的 tar 文件复制到目标服务器上。在目标服务器上,使用 docker import 命令将容器导入到 Docker 中:

Copy code
$ docker import export.tar <new_image_name>:<tag>
您可以使用 docker images 命令查看导入的新镜像。接下来,使用 docker run 命令运行容器:

Copy code
$ docker run -it <new_image_name>:<tag> /bin/bash
这样,您就可以在目标服务器上无网络环境下运行容器了。
zhlxsh
2022-12-05 20:14:15 +08:00
镜像打包,启动配合写好 compose 文件,一条命令就能起
gosby
2022-12-05 20:17:37 +08:00
以下答案来自无脑的 ChatGPT


在断网的情况下,您可以将镜像打包成一个 tar 文件,然后将其复制到另一台 VPS 。您可以使用 docker save 命令将镜像打包成 tar 文件。例如:

Copy code
docker save -o 名称.tar AAA:8.2 BBB:5.6
将 tar 文件复制到另一台 VPS 后,您可以使用 docker load 命令将其加载到 VPS 中。例如:

Copy code
docker load -i 名称.tar
这应该可以将您的镜像导入到另一台 VPS 中,然后您就可以使用 docker run 命令运行容器了。不过,如果您的应用包含多个容器,您可能需要使用 Docker Compose 来运行这些容器,而不是单独运行每个容器。

如果您使用 Docker Compose ,可以在您的 VPS 上创建一个 docker-compose.yml 文件,并将您的容器配置添加到该文件中。然后,您可以使用 docker-compose up 命令在 VPS 上启动所有容器。例如:

Copy code
version: '3'
services:
web:
image: domain-redirect-docker-master-web:latest
ports:
- "80:80"
nginx:
image: domain-redirect-docker-master-nginx:latest
ports:
- "443:443"
mysql:
image: mysql:latest
rabbitmq:
image: rabbitmq:management
redis:
image: redis:latest
上面的配置文件定义了 5 个容器,您可以在 VPS 上运行这些容
mind3x
2022-12-05 20:28:09 +08:00
多一句嘴,不喜请随意忽略。docker image 本身应该是无状态的,打包整个 container 不是正确做法。

正确做法是所有可变的数据和配置应该独立于 image 之外,比如放在 host 上,作为 volume 映射到 container 里。迁移时只把 volume 拷走就行。
julyclyde
2022-12-06 13:51:17 +08:00
@mind3x 说的对
OP 的需求根本就是错的
jsjcjsjc
2022-12-06 21:14:48 +08:00
@mind3x 感谢,我的都是些采集数据,每日覆盖的,只是每次固定配置很长时间,所以我才想这样的~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/900314

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX