V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jsjcjsjc
V2EX  ›  问与答

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

  •  
  •   jsjcjsjc · 2022-12-05 20:02:29 +08:00 · 2124 次点击
    这是一个创建于 729 天前的主题,其中的信息可能已经有所发展或是发生改变。

    由于一个应用有好几个 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:~#
    
    6 条回复    2022-12-06 21:14:48 +08:00
    wanacry
        1
    wanacry  
       2022-12-05 20:14:13 +08:00 via iPhone
    您可以使用 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
        2
    zhlxsh  
       2022-12-05 20:14:15 +08:00 via iPhone
    镜像打包,启动配合写好 compose 文件,一条命令就能起
    gosby
        3
    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
        4
    mind3x  
       2022-12-05 20:28:09 +08:00 via Android
    多一句嘴,不喜请随意忽略。docker image 本身应该是无状态的,打包整个 container 不是正确做法。

    正确做法是所有可变的数据和配置应该独立于 image 之外,比如放在 host 上,作为 volume 映射到 container 里。迁移时只把 volume 拷走就行。
    julyclyde
        5
    julyclyde  
       2022-12-06 13:51:17 +08:00
    @mind3x 说的对
    OP 的需求根本就是错的
    jsjcjsjc
        6
    jsjcjsjc  
    OP
       2022-12-06 21:14:48 +08:00
    @mind3x 感谢,我的都是些采集数据,每日覆盖的,只是每次固定配置很长时间,所以我才想这样的~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1084 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 19:10 · PVG 03:10 · LAX 11:10 · JFK 14:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.