有没有一种好的,标准的方法来“引导”容器化的应用程序?

时间:2019-02-13 17:57:47

标签: docker

我正在开发一个需要在首次运行时进行初始化的应用程序。

实际上,此操作将使用一些初始值初始化数据库,并将一些文件保存在持久卷中。如果我停止容器然后重新启动它,则我不想重新运行该引导程序。换句话说,如果容器存在并已填充,请跳过初始化例程。

我要实现的方式是有一个入口点脚本,该脚本检查配置文件是否存在,如果存在,将跳过引导程序,但是,我想知道是否有更好的方法?

例如,是否有一种运行脚本的方法,该脚本是由需要创建卷而专门触发的?如果可以的话,运行引导程序的唯一情况就是应用程序首次初始化时。

或者,是否有更好的,更多的Dockerish模式定义了我应该如何解决此问题?

1 个答案:

答案 0 :(得分:1)

“如果文件不存在,请在入口点脚本中进行初始化”似乎是很习惯的做法。例如,the standard postgres:9.6 image检查$PGDATA/PG_VERSION文件。

假设地,它看起来像:

#!/bin/sh
if [ ! -f /data/config.ini ]; then
  /opt/myapp/setup-data.sh /data
fi
exec "$@"

请记住,出于多种原因删除和重新创建容器是非常常规的操作(IME停止和启动是因为动作很少,但是其中一些习惯是Docker较早产生的);这与您的直觉紧密相关为此,请使用入口点,因为它将在每个docker run上启动。从您的容器中,您无法真正分辨出目录是卷还是卷,也没有可以绑定的钩子。在入口点开始时,容器环境已完全设置,并且已连接任何网络和卷。

相关问题