“正确”的方式来pipe理docker中的数据库模式

我正在开发一个由Java Web应用程序和postgresql数据库组成的开源应用程序。 理想情况下,它可以部署成类似于造船厂快速入门中详细介绍的过程:

  1. 运行一个数据专用容器
  2. 运行数据库容器
  3. 运行应用程序容器

是否有build议的时间来设置数据库模式? 我正在考虑为数据库映像创buildDockerfile时创build架构,但postgres在这个时候显然没有运行。

我们使用Postgres和Docker工作,最后我们做了以下工作:

  1. 从官方Postgres回购复制Dockerfile,以便您可以制作自己的图像。
  2. 修改docker-entrypoint.sh( https://github.com/docker-library/postgres/blob/8f80834e934b7deaccabb7bf81876190d72800f8/9.4/docker-entrypoint.sh ),这是容器启动时调用的。

在docker-entrypoint.sh的顶部,我提出了以下内容:

# Get the schema url=$(curl -s -u ${GIT_USER}:${GIT_PASSWORD} "${SQL_SCRIPT_URL}" | python -c 'import sys, json; print json.load(sys.stdin)["download_url"]') curl ${url} > db.sh chmod +x db.sh cp db.sh ./docker-entrypoint-initdb.d 

这基本上从Github下载一个shell脚本来初始化数据库的模式。 我们这样做来pipe理模式的版本,所以当你启动你的容器时,你可以通过一个ENVvariables来告诉它使用哪个模式。

关于代码的一些注意事项:

  1. 我们需要重构从Github中使用私钥而不是用户凭证来提取内容。
  2. ./docker-entrypoint-initdb.d目录是docker-entrypoint.sh将运行init脚本的地方。 您可以将文件移动到该位置,但不pipe您想要的。 如果从Github下载不适用,请执行此操作。