Docker-Compose:初始化与运行

cyn*_*ile 6 docker docker-compose

我正在将现有的rails应用程序迁移到docker和docker-compose.有一些脚本只需要在创建容器时运行,例如将prod db复制到卷中并在Elasticsearch中对其编制索引的脚本.

从那时起,当我在本地启动容器进行开发时,我只想运行rails开发服务器而不是所有的db init脚本.我可以做两个搬运工,撰写文件(比如initrun),它们除了相同command:的Web应用程序容器上的选项.

有没有更好的办法?

小智 3

基本 Docker 系统没有自定义脚本的“运行时”概念。

您可以采取以下方法之一:

  • 在您的脚本中添加一个检查,检查它是否已经完成了该操作。那么你一次又一次地重新运行它也没有关系。
  • 将数据库集成到 Docker 中,并按已加载数据的方式进行交付。
  • 创建一个由 2 部分组成的 docker 系统:第一个是您现在所知道的 docker,带有可能的“ONBUILD”命令,因此第二个将运行脚本。然后第二个 docker 继承了原来的 docker,并且会在有或没有上面的“ONBUILD”的情况下运行脚本。在 docker-compose 中,您将有一个本地构建,它将在创建本地 docker 映像时触发导入。

只是一个想法