在docker中管理数据库模式的"正确"方法

sjm*_*ett 6 docker dockerfile

我正在开发一个包含Java Web应用程序和postgresql数据库的开源应用程序.理想情况下,它可以部署,类似于造船厂快速入门中详述的流程:

  1. 运行仅数据容器
  2. 运行数据库容器
  3. 运行应用程序容器

是否有建议的时间来设置数据库架构?我正在考虑使数据库映像的Dockerfile在构建时创建模式但是此时postgres显然没有运行.

rya*_*234 4

我们在我工作的地方使用 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
Run Code Online (Sandbox Code Playgroud)

这基本上是从 Github 下载一个 shell 脚本,用于初始化数据库的架构。我们这样做是为了管理架构的版本,因此当您启动容器时,您可以通过 ENV 变量告诉它要使用哪个架构。

关于代码的一些注释:

  1. 我们需要重构以使用私钥而不是用户凭据从 Github 提取内容。
  2. ./docker-entrypoint-initdb.d 目录是 docker-entrypoint.sh 将在其中运行数据库初始化脚本的位置。您可以根据需要将文件移动到该位置。如果从 Github 下载不适用,请执行此操作。