🐾
【Docker】ポートとネットワーク
ポートの公開とは
- コンテナはホストマシンから隔離されているため、コンテナ内でWebサーバーやDBサーバーを起動させただけではホストマシンからアクセスできない
- ホストマシンに対してポートの公開を行うことで、アクセスできるようにする
構築
コンテナ起動時に以下のオプションをつけてポートにマッピングすることで、ホストマシンに対してポートを公開できる
--publish <ホストのポート番号> : <コンテナのポート番号>
Dockerのネットワークとは
- DockerのコンテナはネットワークドライバというものでDockerネットワークに接続される
- ネットワークドライバはデフォルトでいくつかあり、特に指定しない場合はブリッジネットワークになる
- 以下、ブリッジネットワークについての説明
ネットワークの作成について
コンテナ起動の際にネットワークドライバについて指定を行わないと、デフォルトブリッジネットワークが自動的に生成され、接続される
デフォルトブリッジネットワークの特徴
- コンテナが通信するためには全てのコンテナ間をリンクする操作が必要になる
- コンテナ間の通信はIPアドレスで行う
- Docker Engin上の全てのコンテナに接続できてしまう
作成したネットワークの特徴
- コンテナ間で相互通信できるようにするには、同じネットワークを割り当てるだけで良い
- コンテナ間で自動的にDNS解決を行える
- 通信できるコンテナが同一ネットワーク上に限られる
どちらを使用するかの判断
コンテナ間通信を必要とする場合は作成したネットワークを使えば良い
構築
- ネットワークの作成
docker network create [option] <name>
- ネットワーク一覧の確認
network ls
- コンテナをネットワークに接続
docker container run --network <network name>
--network-alias
オプションで同じネットワーク内でのアクセス時に使うホスト名を設定できる
--network-alias <alias>
接続確認
- ネットワークの検査
docker network inspect <network name> | jq '.[].IPAM.Config'
- コンテナの検査
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
参考記事
Discussion