次の単純化された例を見てみましょう。
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
.env
docker-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;