2017-06-12 7 views
2

私は複数の環境を持っています。それらはdebug、dev、prodです。私は、最新のdev(最新)またはdev(バージョン1.1)またはprod(最新)でイメージを参照したいと思います。ビルドやプッシュをタグ付けするにはどうすればいいですか?Docker:環境に画像をタグ付けするときのベストプラクティスは何ですか

私の最初の考えは、環境ごとに別々のリポジトリを作成することでした。debug、dev、およびprod。しかし、私はただ1つのリポジトリでこれを行うことができるかどうか疑問に思っています。 1つのコンテナで行うことが可能であれば、ビルド時とプッシュ時の構文は何ですか?

答えて

6

これは私と私のチームのために最善を働いたものであり、私はそれをお勧めします。私はすべての環境ためプロジェクトごとに単一のレポを持つお勧めします

、管理が容易です。特にマイクロサービスをお持ちの場合、プロジェクトは複数のマイクロサービスで構成されています。プロジェクトごとに1つのリポジトリごとに1つのリポジトリを管理するのは苦労します。

たとえば、ユーザーapiがあります。 ドッカーのレポはusersです。このレポは、alpha,dev、およびbetaによって使用されます。

当社は、CI/CDサービスに$DOCKER_TAGと呼ばれたenv変数を作成し、このように、ビルドが作成された時点でそれを設定します。

DOCKER_TAG: $(date +%Y%m%d).$BUILD_NUMBER =>これはbashです。

ここで、$BUILD_NUMBERは、CI/CD実行がトリガされたときに実行されるビルドによって以前に設定されています。たとえば、PRをマージすると、ビルド番号がビルドされます。 1、だから$BUILD_NUMBER: 1

使用と、得られるタグは次のようになります。20171612.1 ので、私たちのドッキングウィンドウのイメージがある:users:20171612.1

なぜ、この形式?

  • それは、私たちは 実行タスクと異なる環境で同じタグを展開することができます。
  • これは、画像がいつ作成されたか、それが属する画像をどのようなものにするかを追跡するのに役立ちます。
  • ビルド番号から、必要に応じてコミット情報とすべてのマップを見つけることができます。
  • プロジェクトごとに同じドッカーレポを使用することができます。
  • タグ自体から画像を作成したときは知っておきましょう。

したがって、マージすると1つのビルドが作成されます。そのビルドは、必要に応じてさまざまな環境に展開されます。環境ごとに独立したビルドを作成することはありません。そして、どこに展開されているのかを把握しています。

特定のタグを持つ環境にバグがある場合は、そのようなタグを作成してビルドして、その状態で問題を再現します。問題が見つかった場合は、タグ20171612.1にビルド番号がありますので、ビルド番号はわかります。 1に問題があります。私たちはCI/CDサービスをチェックしており、コミットが最新であることがわかります。 gitからコミットハッシュをチェックしてデバッグし、問題を修正します。次に、それを修正プログラムとして展開します。

まだCI/CDをお持ちでなく、手動で行っている場合は、手動でその形式のタグを設定してください(完全な文字列をそのまま入力してください)。ビルド番号の代わりにa (あなたはgitのを使用している場合)、短いGitのハッシュをコミット:

20170612.ed73d4f

ですから、あなたが特定の画像で問題をトラブルシューティングし、必要に応じて修正を作成するために、コードに戻ってマッピングすることができますコミット最新であるか知っています。

また、コードバージョンに対応するタグに他の接尾辞を定義することもできます。これにより、簡単にトラブルシューティングを行うことができます(例:gitタグを使用している場合はgitタグにマッピングします)。

試してみて、必要に応じて調整し、あなたとあなたのチームにとって最適な動作をさせてください。タグ付けにはさまざまな方法があります。私達は多くを試みました、そして、これは今まで私たちのお気に入りです。

これは役に立ちましたか?

1

"lastest"は最後の生産的なイメージです。ドッカーハブで私が期待しているのは、開発中のイメージはありませんが。

一方、たとえば0.0.1-devのようなタグを使用できます。このイメージが完成したら、タグをもう一度押して押して、リポジトリがすでにレイヤがリポジトリにあることを検出します。

プロダクションに出かける候補バージョンについては、環境に依存しないにもかかわらずセマンティックバージョンしか持たないようにする必要があります。それは私がやることです。