サーバー上の env_file を使用して docker-compose で本番環境にデプロイするにはどうすればよいですか?

サーバー上の env_file を使用して docker-compose で本番環境にデプロイするにはどうすればよいですか?

次の単純化された例を見てみましょう。

services:
  app:
    image: alpine
    env_file: config.env
    entrypoint:
      - /bin/sh
      - -c
      - 'echo "Var is: $$MY_VAR"'

config.envローカルにはローカル開発設定があり、config.envサーバーには本番環境設定があります。

を使用すると、サーバー上の config.env ではなく、ローカルの config.env が使用されます。環境固有の構成をリポジトリに保存したくないのですが、docker ドキュメントで推奨されている方法では、 を使用しているのと同じマシン上に個別のファイルまたはファイルを作成することが必要になります。docker-compose -H [email protected] up --build -d.yml.envdocker-compose

そこで質問なのですが、サーバー上に構成を保存し、開発マシン上で使用してデプロイするにはどうすればいいのでしょうか? それとも、リポジトリをサーバーにアップロードしてそこで実行し、リモート env ファイルを使用できるようにしたほうdocker-composeがよいでしょうか?docker-compose

答え1

最終的には、docker-compose ファイルをサーバーにコピーし、サーバー上の環境ファイルを使用する独自のデプロイ スクリプトを作成することにしました。

scp docker-compose.yml $USER@$HOST:/tmp/
deploy_cmd="export \$(grep -v '#.*' \"$REMOTE_ENV_FILE\" | xargs)";
deploy_cmd="$deploy_cmd && docker stack deploy -c /tmp/docker-compose.yml my-project";
echo "Deploying to $USER@$HOST"
ssh -qA "$USER@$HOST" "$deploy_cmd" || return 1;

関連情報