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

时间:2015-02-24 16:17:44

标签: docker dockerfile

我正在开发一个由Java Web应用程序和postgresql数据库组成的开源应用程序。理想情况下,它可以部署,类似于shipyard quickstart中详述的流程:

  1. 运行仅数据容器
  2. 运行数据库容器
  3. 运行应用程序容器
  4. 是否建议您设置数据库架构?我正在考虑使数据库映像的Dockerfile在构建时创建模式但是此时postgres显然没有运行。

1 个答案:

答案 0 :(得分:4)

我们在工作的地方使用Postgres和Docker,我们最终做了以下事情:

  1. 从官方Postgres回购中复制Dockerfile,这样您就可以制作自己的图像了。
  2. 修改docker-entrypoint.sh(https://github.com/docker-library/postgres/blob/8f80834e934b7deaccabb7bf81876190d72800f8/9.4/docker-entrypoint.sh),这是容器启动时调用的内容。
  3. 在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脚本。我们这样做是为了管理模式的版本,所以当你启动容器时,你可以通过ENV变量告诉它使用哪个模式。

    关于代码的一些注释:

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