我最初将此问题发布在Docker forums上,但没有得到任何答复。
我想知道对一组服务建模的最佳方法是什么,我们将它们称为db
,web
和batch
。 db
只是一个正在运行的数据库服务器实例(认为是MySQL)。 web
是需要连接到数据库的Web应用程序。 batch
是一个批处理应用程序,需要连接到同一数据库(它可以/将与web
并行运行)。 db
需要运行,才能运行web
或batch
。但是web
或batch
可以彼此独立运行(一个或两个可以同时运行)。如果两者都同时运行,则它们需要与同一个数据库实例通信(因此db
实际上是在使用volumes_from
一个单独的数据卷容器)。因此,如果用例更简单(想想总是一起运行的db
和web
),那么它们都将被简单地定义为同一撰写文件中的服务,并且web
链接到db
。
据我了解,它们不能全部在同一个Docker compose配置中定义。相反,我需要三种不同的配置。一个用于db
,它首先启动,一个用于web
(使用external_links
查找db
),另一个用于batch
(也使用external_links
查找db
)。那是正确的,还是我没有考虑某些可用的机制?假设需要多配置设置,那么当db
或web
组合启动时,是否有一种方法可以“懒惰”地初始化batch
组合(如果未运行)?
最佳答案
如果web
在docker-compose文件中具有指向db
的链接,则db
将始终首先开始。
据我所知,Docker永远不会知道何时启动数据库。 web
容器的责任是正确启动并重试,直到基础启动(超时)。
对于batch
服务,假设您不想每次启动web
和db
容器(使用docker-compose up
或run
)时都启动它,则可以尝试扩展服务。有关更多信息,请参见docs。
https://stackoverflow.com/questions/31975600/