circleci 2.0 では、ジョブを実行する環境として、複数 docker image を指定できます。 https://circleci.com/docs/2.0/executor-types/#using-multiple-docker-images

この環境では、以下が実現されています。

  • ビルドコマンドを実行するメインのコンテナにおいて、2つめ以降の image が expose するポートを、 localhost:${exposeされたポート番号} からアクセスできる

docker で実行されているコンテナにおいて、このようなことはどうやったら可能なのだろう、とふと思いました。

というのも、例えば素朴に docker-compose で複数コンテナ実行を行った場合、他のコンテナは基本的にそのコンテナの名称がホストに設定されています。なので、どこのコンテナにアクセスするかは、そのコンテナに割り振られたホスト名を、アクセス元のコンテナから指定してホスト解決をする必要があると理解しています。

一方、 circleci の実行環境では、すべての2番目以降のコンテナのポートは、おもむろに localhost:ポート番号 で接続できているように思っています。

質問

  • circleci で複数 docker image での環境でジョブを実行した場合、その場合のコンテナの構成(とくにネットワーク) はどのように構築されますか?