6

Java Web アプリケーションと postgresql データベースで構成されるオープン ソース アプリケーションを開発しています。理想的には、造船所のクイックスタートで詳述されているプロセスと同様に展開可能です。

  1. データのみのコンテナーを実行する
  2. DB コンテナを実行する
  3. アプリケーション コンテナを実行する

データベース スキーマをセットアップするのに推奨される時期はありますか? データベース イメージの Dockerfile がビルド時にスキーマを作成するようにすることを考えていましたが、現時点では明らかに postgres が実行されていません。

4

1 に答える 1

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

これは基本的に、データベースのスキーマを初期化するシェル スクリプトを Github からダウンロードします。これは、スキーマのバージョンを管理するために行われます。そのため、コンテナーを開始するときに、ENV 変数を介して使用するスキーマをコンテナーに伝えることができます。

コードに関する注意事項:

  1. ユーザー資格情報の代わりに秘密鍵を使用して Github からプルするようにリファクタリングする必要があります。
  2. ./docker-entrypoint-initdb.d ディレクトリは、docker-entrypoint.sh がデータベースの init スクリプトを実行するために参照する場所です。必要に応じて、ファイルをその場所に移動できます。Github からのダウンロードが適用できない場合は、これを行ってください。
于 2015-02-24T17:46:57.833 に答える