卷和来源之间有什么区别?

我看到了docker-compose模式,但我很困惑。 什么是制作容器的最佳方法? 什么时候应该使用linkvolumes_from 。 什么时候应该使用volumes_fromvolumes

1个应用程序数据库

 app: image: someimage link: - db // data volume container name db: image: mysql volumes_from: - data // data volume name data: image: someimage volumes: - {host data}:{guest data} 

2个应用程序数据库+数据

 app: image: someimage link: - db // data volume container name db: image: mysql volumes: - data // data file name 

应用

1个应用程序服务数据

 app: image: someimage volumes_from: - service // service container name service: image: mysql volumes_from: - data // image container name data: image: someimage volumes: - {host data}:{guest data} 

2个应用程序服务+数据

 app: image: someimage volumes_from: - service // service container name service: image: mysql volumes: - data // mounted file 

谢谢

链接volumes_from是不同的概念。 当您需要连接(通过networking)两个容器时使用链接。 在这种情况下,如果要将应用程序连接到数据库,执行此操作的方法是使用链接,因为应用程序使用端口和主机连接到数据库(而不是文件系统上的目录)。

VolumesVolume_from的不同之处在于,第一个只声明docker将进行永久或host:guest挂载的卷,但是volumes_from告诉docker使用已在另一个主机上声明的卷(使其可用于此主机)。

在你提出的这4个案子中,我认为第一个和第二个是不错的select。 首先你要创build一个只有数据的容器,并使mysql容器使用它。 在第二种情况下,数据和mysql容器是一样的。

链接和容量在Docker文档中有完美的解释。

希望能帮助到你。

简而言之:

  1. volumes_from从其他容器装载。
  2. volumes 安装定义内联。
  3. links 连接容器。

多一点解释:

  1. volumes_from装载来自其他容器的卷。 例如,如果您只有数据容器,并且希望将这些仅用于数据的容器安装在具有应用程序代码的容器中。

  2. volumes是定义和挂载卷的内联方式。 如果您阅读#17798 ,则可以看到在大多数情况下,命名卷可以replace仅数据容器。

    最简单的就是使用卷。 既然你可以通过命名来重用它们。

  3. links是不同的。 因为它没有安装 。 而是连接容器。 所以如果你这样做:

     app: container_name: app_container links: - db 

    这意味着,如果你用app_container docker exec -it app_container bash连接到app_container ,并尝试ping db你会看到这个容器能够parsingip的db。

    这是因为docker在容器之间创build一个networking 。

此外:Volumes_from用于在安装容器的所有非匿名卷时使用 – 命名卷自早期以来可以直接安装。

AFAIC https://docs.docker.com/compose/compose-file/#volumes 。 docker-compose完全删除了这个function,不知道如何和为什么,如果有替代。 但是,假设你有一个应用程序容器,你有一个httpd容器。 通常你需要将代码库文件/ var / www定义为anon卷,然后将其挂载到httpd中,以便使用httpd服务提供静态文件,同时将所有dynamic文件(如ruby / php / java)传递到上游后端应用程序。

使用匿名卷而不是命名卷的一点是,实际上,如果应用程序具有一个命名卷,那么实际上您希望能够重新部署应用程序并更改不起作用的代码库(应用程序更新)。 也就是说,匿名卷正在做这个,这就是为什么在这里使用volume_from – 使用命名卷是没有select的情况下(因为它是很多其他情况下很实用)。

有关卷的升级指南,请参阅: https ://docs.docker.com/compose/compose-file/compose-versioning/#upgrading

因此,volumes_from通常用于不同的上下文/场景,named-volumes是上述其他情况下的标准。 关于这个简短的post是https://stackoverflow.com/a/44744861/3625317