2017-02-17 16 views
10

私はドッカーの周りを頭で覆いたいと思っていますが、私はそれを理解するのに苦労しています。私は私の小さなプロジェクト(MERNスタック)に実装しようとしましたが、私は開発、(ステージングの可能性があります)、そしてプロダクション環境の違いを考えていました。ドッカーの複数の環境

2つのDockerファイルと2つのdocker-composeファイルを使用していました(1つのenvのために各ペアがありますので、Dockerfile + docker-compose.yml for prod、Dockerfile-dev + docker-compose-dev)。 devのyml)。

しかし、これはちょっと私にとって過度の過ちのようです。私はそれを2つのファイルでしか持たないことを好みます。

また、問題の1つは、開発のために、nodemonをグローバルにインストールしたいが、poductionにはインストールしない。私はその

docker-compose -e ENV=dev build 
docker-compose -e ENV=dev up 

のようなものを実行していると想像完璧なソリューションで

は、私はまだ完全にドッキングウィンドウを取得しないことを、覚えておいてください、あなたがドッキングウィンドウについての鉱山誤解のいくつかをキャッチした場合、あなたはそれを指摘することができます。

答えて

11

あなたはほぼ確実にライブ環境へのより適切なアプリの設定を変更したいと思う「Using Compose in production

からいくつかの手がかりを取ることができます。これらの変更は含んでいてもよい:アプリケーションコードの任意のボリューム・バインディングを削除

  • 、そのコードは、コンテナ内に留まると外部
  • 環境変数を設定するホスト
  • の異なるポートへの結合から変更できないように異なった(例えば、ログの詳細度を低下させる、または電子メールの送信を可能にするために)
  • 再起動ポリシーを指定する(例えば、再起動します:常に)追加サービス(例えば、ログアグリゲータ)を追加し、ダウンタイム
  • を避けるために

アドバイスは、あなたが言及した例と非常に類似していない。このため

、あなたは生産に適した指定され、おそらく、追加のComposeファイルを定義したいproduction.ymlを言いますよ構成。この構成ファイルには、元のComposeファイルから変更したい変更のみを含める必要があります。

docker-compose -f docker-compose.yml -f production.yml up -d 

このoverriding mechanism 1を試してみて、選択するために、環境変数で、1つのコンファイルでDEVとPRODロジックをミックスしようとしているよりも優れています。

注:2番目のドッカーファイルの名前をdocker-compose.override.ymlとすると、単純なdocker-compose upでは自動的に上書きが読み取られます。
あなたの場合は、環境に基づいた名前が明確になります。

+0

説明、ありがとう! –

2

Docker Composeはデフォルトでdocker-compose.ymldocker-compose.override.ymlと表示されます。Understanding-Multiple-Compose-Files

デフォルトのdocker-compose.ymlと異なる上書きファイルを設定できます。たとえば、docker-compose.prod.ymldocker-compose.test.ymlです。それらを同じ場所に保管してください。

次に、envごとにdocker-compose.override.ymlというシンボリックリンクを作成します。
ファイルdocker-compose.{env}.ymlを追加し、docker-compose.override.yml.gitignoreを追加してください。
のprod ENVで:テストENVでln -s ./docker-compose.prod.yml ./docker-compose.override.yml
ln -s ./docker-compose.test.yml ./docker-compose.override.yml
プロジェクトの構造は、次のようになります。

project\ 
    - docker-compose.yml  # tracked 
    - docker-compose.prod.yml # tracked 
    - docker-compose.test.yml # tracked 
    - docker-compose.override.yml # ignored 
      #linked to override composefile for current env 
    - src/ 
    - ... 

は、次に、あなたが行っています。各環境で、同じコマンドでcompose-fileを使用できます。を使用して、正しく上書きされているかどうかを確認してください。