我在docker 容器中运行 gitlab,它将其依赖项(MySQL、Redis、Mailserver)很好地分离到单独的 docker 容器中。运行它们不是问题,我以相反的顺序启动它们:首先是依赖项,然后是 gitlab 本身。
有时我必须重新启动 docker 主机。目前我 ssh 进入 docker 主机并手动重启容器。有更好的方法吗?就像只是告诉一些服务启动 gitlab 容器并首先启动它的依赖项?我知道我可以为每个 docker 容器创建单独的初始化脚本,但这不是我想要的。
我在docker 容器中运行 gitlab,它将其依赖项(MySQL、Redis、Mailserver)很好地分离到单独的 docker 容器中。运行它们不是问题,我以相反的顺序启动它们:首先是依赖项,然后是 gitlab 本身。
有时我必须重新启动 docker 主机。目前我 ssh 进入 docker 主机并手动重启容器。有更好的方法吗?就像只是告诉一些服务启动 gitlab 容器并首先启动它的依赖项?我知道我可以为每个 docker 容器创建单独的初始化脚本,但这不是我想要的。
我想你可以看看Decking
您还可以通过 CoreOS 的方式管理依赖项。通过为您的主容器编写一个
Unit
文件,例如:gitlab
MySQL 容器、Redis 容器等的
mysql.serice
文件在哪里?Unit
redis.service
您甚至可能想查看“官方”的Fig项目,该项目现已被Docker Compose取代。配置/设置应该相当容易。
您运行 gitlab 的用例与Fig - Wordpress 示例或使用gitlab-compose 脚本基本相同
如果你在 Mac 上工作,你可能想看看Docker 工具箱,其中包括 Compose,还有其他各种快速启动和运行的工具!
万一有人觉得这很有用,我写了一个
fish
shell 脚本(应该很容易移植到bash
),docker inspect
用来启动我的容器的所有依赖项。这是代码,使用jq解析json:请注意,此代码假定当前目录中有对应于同名 docker 容器的子目录。它也不处理循环依赖(我不知道其他工具是否有),但它也是在半小时内编写的。如果您只有一个容器,您只需使用如下
docker_links_lookup
函数:编辑:
我在上述脚本中开始使用的另一个方便的功能是:
它不只是启动一个容器,而是查找容器公开的端口,并测试它是否可以连接到它们。如果您有诸如数据库容器之类的东西,它可能会在启动时执行清理,因此需要一些时间才能在网络上实际可用。像这样使用它:
或者,如果您使用的是上述脚本,请将最后一行替换为:
最后一行将确保所有容器仅在其依赖项之后启动,同时还等待依赖项实际完成启动。请注意,这可能不适用于每个设置,因为某些服务器可能会立即打开它们的端口,而实际上并没有准备好(尽管我不知道任何服务器实际上会这样做,但这就是 docker 开发人员在询问时给出的原因他们关于这样的功能)。