🐾

【Docker】ポートとネットワーク

2022/12/29に公開

ポートの公開とは

  • コンテナはホストマシンから隔離されているため、コンテナ内でWebサーバーやDBサーバーを起動させただけではホストマシンからアクセスできない
  • ホストマシンに対してポートの公開を行うことで、アクセスできるようにする

構築

コンテナ起動時に以下のオプションをつけてポートにマッピングすることで、ホストマシンに対してポートを公開できる

--publish <ホストのポート番号> : <コンテナのポート番号>

Dockerのネットワークとは

  • DockerのコンテナはネットワークドライバというものでDockerネットワークに接続される
  • ネットワークドライバはデフォルトでいくつかあり、特に指定しない場合はブリッジネットワークになる
  • 以下、ブリッジネットワークについての説明

ネットワークの作成について

コンテナ起動の際にネットワークドライバについて指定を行わないと、デフォルトブリッジネットワークが自動的に生成され、接続される

デフォルトブリッジネットワークの特徴

  • コンテナが通信するためには全てのコンテナ間をリンクする操作が必要になる
  • コンテナ間の通信はIPアドレスで行う
  • Docker Engin上の全てのコンテナに接続できてしまう

作成したネットワークの特徴

  • コンテナ間で相互通信できるようにするには、同じネットワークを割り当てるだけで良い
  • コンテナ間で自動的にDNS解決を行える
  • 通信できるコンテナが同一ネットワーク上に限られる

どちらを使用するかの判断

コンテナ間通信を必要とする場合は作成したネットワークを使えば良い

構築

  1. ネットワークの作成
docker network create [option] <name>
  1. ネットワーク一覧の確認
network ls
  1. コンテナをネットワークに接続
docker container run --network <network name>

--network-aliasオプションで同じネットワーク内でのアクセス時に使うホスト名を設定できる

--network-alias <alias>

接続確認

  1. ネットワークの検査
docker network inspect <network name> | jq '.[].IPAM.Config'
  1. コンテナの検査
docker container inspect <container name> | jq '.[].NetworkSettings.Networks'
  • ネットワークのGatewayとコンテナのGatewayが一致していて、コンテナのIPAddressがそれに続く値になっていればOK
  • Aliasを設定した場合は、コンテナの検査でAliasesに追加されている

コンテナの疎通確認

docker container exec -it <送り先コンテナ> ping <あて先コンテナのAlias> -c 3

3回リクエストを投げて、全てあて先コンテナのGateway向けに送られ0% packet lossという結果になればOK

参考記事

https://zenn.dev/suzuki_hoge/books/2022-03-docker-practice-8ae36c33424b59

Discussion