gpt4 book ai didi

docker - 如何将本地卷移动到远程 docker 机器上

转载 作者:行者123 更新时间:2023-12-02 10:01:34 26 4
gpt4 key购买 nike

我在云端有本地 docker 机器和远程 docker 机器。我的 docker-compose 应用程序有一个 web具有此配置的容器:

web:
container_name: web
restart: always
build: ./web
expose:
- "8000"
links:
- postgres:postgres
volumes:
- /usr/src/app/static
- ./data:/usr/src/app/data
env_file: .env
command: /usr/local/bin/gunicorn --workers 4 --timeout 120 --bind :8000 app:app

重要的部分是第二卷。我有一个名为 data 的本地文件夹,里面有大约 10GB 的数据。我首先把它做成了一个卷,因为否则构建容器需要很长时间。现在该应用程序已准备好生产,我想部署它。一个问题:现在我的 Remote web容器中安装了一个空的数据文件夹。那么如何将数据从本地机器移动到远程 docker 机器上的容器中呢?我什至要把它移到哪里?

似乎有两个工具可以做到这一点:
  • docker cp这似乎不适用于远程 docker 机器
  • docker-machine scp这似乎是为此而生的,对吧?

  • 我几乎可以肯定我需要使用其中的第二个,但由于我不太了解 docker 机器的工作原理或它保存数据的位置,所以我不确定要使用哪个目标路径:
      $  dm scp -r /Users/alex/Documents/Project/data remote-machine:/usr/src/app/data

    失败并显示错误消息:
    scp: /usr/src/app/data: No such file or directory
    我应该在哪里对这些数据进行 scp 处理,以便将其正确安装在我的远程 web 上容器?

    最佳答案

    本地路径与容器内路径

    假设您将远程使用与本地使用相同的模型,请记住路径 /usr/src/app/data是容器内的路径。当您将文件从一个系统复制到另一个系统时,您只需要将它们从当前系统复制到远程系统,然后将它们放在 docker-compose 知道如何找到它们的路径中,然后挂载到新容器中。

    因此,您所要做的就是将它们从这里复制到那里,并使用相对于 docker-compose.yml 的相同路径。 .它只知道您的外部卷为 ./data ,所以如果你把目录放在同一个地方(从 docker-compose 的角度来看),一切都应该是一样的。

    如何复制文件

    至于怎么复制,这些只是文件,无所谓。 scp -r应该可以工作,或者制作一个 zipfile,复制它,解压缩到正确的位置等。复制文件的方法有很多,所以选择最适合您的情况的方法。

    究竟需要复制什么?

    在评论中,您对 docker-machine 中的本地与远程操作以及您需要复制的其他内容表示混淆。这里有一个更完整的解释:

    在您的本地系统(我假设是您自己的 PC 或笔记本电脑)上,您安装了 docker-machine,并且您一直在使用它进行所有这些开发。与此完全分开的是您想要部署的新云实例。

    要在本地运行您已经拥有的内容,在您的云实例上,云实例将需要具有以下内容。

  • docker-compose.yml文件。

    只要您打算使用 docker-compose 来运行它,它就必须可用。
  • 您的 .env文件。

    由于您在此设置中使用环境文件,因此它必须可用,否则 docker-compose 无法使用它。
  • 您的 web图片。

    您有一个 build此容器的参数,但不是 image范围。所以目前你唯一能做的就是docker-compose build web它将在本地生成一个图像,然后 docker-compose 知道如何运行。

    另一种选择是添加 image参数,带有 repository:tag ,如 myuser/myapp_web:1.0 ,并将其推送到 Docker Hub。然后,在您的云实例上,可以从 Docker Hub 检索图像,而不是在本地构建它。

    在这种情况下,您可以添加 image web 的参数docker-compose.yml 中的容器,然后构建它并向上推。
    docker-compose build web
    docker-compose push web

    然后在云实例上,您可以获取它:
    docker-compose pull web

    由于 image,docker-compose 会知道使用该图像。 docker-compose.yml 中的参数(也存在于云服务器上)。

    引用:Creating a new repository on Docker Hub

    这些选项中的哪一个更可取取决于您希望如何管理事物。任何一个都可以,但是“本地构建”选项将要求您将任何所需的源文件也复制到您的云实例(在构建过程中使用的任何东西)。
  • 我没有在您的问题中看到 postgres容器来自。如果您也在定制这个,那么与 web 相同。 .如果您为此使用公共(public)图像,那么您不需要复制任何内容; docker-compose 将知道如何获取它,即您可以这样做:
    docker-compose pull postgres

  • docker cp 和 docker-machine scp 呢?

    你提到了 docker cpdocker-machine scp在你的问题中。

    正如你已经确定的那样, docker cp不是这里的解决方案。该命令用于在容器和主机文件系统之间复制文件。它与通过网络复制无关。

    据我所知, docker-machine scp是在本地主机和 docker-machine 之间复制文件-托管虚拟机。要将文件复制到您的云实例,您可以更轻松地使用更通用的工具,如 scp 或 sftp。

    关于docker - 如何将本地卷移动到远程 docker 机器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41651212/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com