Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 卷与卷之间的区别是什么?_Docker - Fatal编程技术网

Docker 卷与卷之间的区别是什么?

Docker 卷与卷之间的区别是什么?,docker,Docker,我看到码头工人在写图案,但我很困惑。制作组合容器的最佳方法是什么。 我应该何时使用链接,或卷。 我应该在什么时候使用卷_from,卷 #1应用数据库数据 应用程序: 图像:someimage 链接: -db//数据卷容器名称 db: 图片:mysql 卷从: -数据//数据卷名称 数据: 图像:someimage 卷数: -{主机数据}:{客户数据} #2应用程序数据库+数据 应用程序: 图像:someimage 链接: -db//数据卷容器名称 db: 图片:mysql 卷数: -数据//数据

我看到码头工人在写图案,但我很困惑。制作组合容器的最佳方法是什么。 我应该何时使用
链接
,或
卷。
我应该在什么时候使用
卷_from

#1应用数据库数据 应用程序: 图像:someimage 链接: -db//数据卷容器名称 db: 图片:mysql 卷从: -数据//数据卷名称 数据: 图像:someimage 卷数: -{主机数据}:{客户数据}

#2应用程序数据库+数据 应用程序: 图像:someimage 链接: -db//数据卷容器名称 db: 图片:mysql 卷数: -数据//数据文件名

应用程序 #1应用程序服务数据

应用程序:
图像:someimage
卷从:
-服务//服务容器名称
服务:
图片:mysql
卷从:
-数据//图像容器名称
数据:
图像:someimage
卷数:
-{主机数据}:{客户数据}
#2应用服务+数据

应用程序:
图像:someimage
卷从:
-服务//服务容器名称
服务:
图片:mysql
卷数:
-数据//装入的文件

感谢

链接和卷是不同的概念。当您需要(通过网络)连接两个容器时,将使用链接。在这种情况下,如果您希望将应用程序连接到数据库,则可以使用链接,因为应用程序使用端口和主机连接到数据库(而不是文件系统上的目录)

VolumesVolumes\u from的不同之处在于,前者仅声明docker将持久化的卷或host:guest装载,但Volumes\u from告诉docker使用另一台主机上已声明的卷(使其可用于此主机)

在你提出的4个案例中,我认为第一个和第二个是很好的选择。首先,您要创建一个只包含数据的容器,并让mysql容器使用它。在第二种情况下,数据和mysql容器是相同的

docker文档中对此进行了完美的解释

希望能有所帮助。

简而言之:

  • volumes\u from
    从其他容器装载
  • 装载内联定义
  • 链接
    连接容器
  • 再解释一下:

  • volumes\u from
    装载来自其他容器的卷。例如,如果您有纯数据容器,并且希望将这些纯数据容器装载到包含应用程序代码的容器中

  • 是定义和装载卷的内联方式。如果阅读,您会发现在大多数情况下,命名卷可以替换仅数据的容器

    最简单的方法就是使用卷。因为您可以通过命名它们来重用它们。

  • 链接
    不同。因为它不安装。相反,它连接容器。因此,如果你这样做:

    app:
      container_name: app_container
      links:
        - db
    
    这意味着,如果您使用
    docker exec-it app\u container bash
    连接到
    app\u container
    ,并尝试
    ping db
    ,您将看到该容器能够解析db的ip

    这是因为docker在容器之间创建了一个


  • 另外:当您想要装载容器的所有非卷时,可以使用Volumes_from-命名卷可以从早期就直接装载

    阿法克斯。docker compose已完全删除此功能,但不确定如何、为什么以及是否有替代方案。但假设您有一个应用程序容器和一个httpd容器。通常,您会将codebase文件夹/var/www定义为一个anon卷,然后将其装入httpd,以便使用httpd服务提供静态文件,同时将所有动态文件(如ruby/php/java)传递到app的上游后端

    使用非命名卷而不是命名卷的要点是,如果应用程序具有命名卷,实际上您希望能够重新部署应用程序并更改代码库(应用程序更新),这将不起作用。这就是说,一个非卷正是这样做的,这就是为什么在这里使用卷的原因-在这种情况下,使用命名卷是没有选择的(因为它在许多其他情况下非常实用)

    有关参考,请参阅以下卷的升级指南:

    因此,来自的卷通常用于不同的上下文/场景,命名卷是上述所有其他情况下的标准卷。关于这一点的简短帖子是