私たちは1000sのPythonユニットテストを持っており、それらを効率的に実行するために、それらをバッチで並列化します。各バッチには、コアアプリケーションとmongoインスタンスで構成される独自のDocker環境があります。Docker Networking - リンクするかどうかを指定しますか?
docker network create --driver bridge ut_network-1
docker network create --driver bridge ut_network-2
docker run -d --name mongo-unittest-1 --network ut_network-1 mongo:3.4.2
docker run -d --name mongo-unittest-2 --network ut_network-1 mongo:3.4.2
docker run untapt_ut --rm --network ut_network-{%} --link mongo-unittest-{%}:db python discover.py
接続文字列は "27017/mydbというのMongoDB:::// DB" は、このようなセットアップ何か
{%}は環境に関連付けられた番号なので、ut_network-1ではデータベースはmongo-unittest-1になります。 'db'へのエイリアスに注意してください。
これはうまくいきますが、私は--link will be deprecatedを読んでいます。
私は解決策が--link削除し、ホスト名を設定するのと同じくらい簡単だろうと思った:
docker run -d --hostname db --network ut_network-1 mongo:3.4.2
docker run -d --hostname db --network ut_network-2 mongo:3.4.2
docker run untapt_ut --rm --network ut_network-{%} python discover.py
しかし、私はこれを行うならば、アプリケーションがmongoインスタンスを見つけることができません。さらに:ドッカーは、それが明らかに(彼らは別のネットワーク上にあるにもかかわらず)で行うことはできません「DB」と呼ばれる複数のコンテナを作成しようとしていましたので、
- 私は
--name db
を使用することはできません。 - mongoデータベースのデフォルトのホスト名は、コンテナIDの最初の数桁です。私の単体テストはすべて、データベースが「db」と呼ばれることを前提とした秘密ファイルからmongoデータベース文字列を取得します。
- 私が言ったように、
--hostname db
を使用すると、コアアプリケーションはmongoインスタンスを見つけることができません。しかし、サーバとしてコンテナIDをハードコードすると、コアアプリケーションはmongoインスタンスをうまく見つけることができます。 - 単体テストでは、混乱する必要のないmongoデータベース文字列の1つのソースを使用できるように、別名 'db'を保持します。
The documentation hereは私が --link使用することができますを意味します。
これは正しく行われていますか?そうでない場合は、複数のネットワークを作成して「db」の「静的」なホスト名をエイリアスできるように、Dockerネットワーキングをどのように設定する必要がありますか?
アドバイスをいただければ幸いです。
ありがとうございます!
天才、ありがとうございました。私が「エイリアス」という言葉を書いたら、私は中断しました...しかし、とにかく私の質問を発表することに決めました。ありがとう、あなたの応答だけでなく、これを完全に見て時間を費やすために。 –