Docker

Dockerのネットワーク

外部からのアクセスと、コンテナ同士の内部通信を区別して理解します。

Docker入門の講座一覧

01

ポート公開は外部への入口

-p 8080:80は、ホストの8080番ポートへのアクセスをコンテナの80番ポートへ転送します。ブラウザからアクセスするための設定であり、同じDockerネットワークにいるコンテナとの通信には必ずしも必要ありません。

左と右の違い

ホスト側:コンテナ側の順番です。http://localhost:8080でアクセスするのはホスト側の8080番、Nginxが待ち受けるのはコンテナ側の80番です。

公開ポートを確認COMMAND
docker port study-web
出力例OUTPUT
80/tcp -> 0.0.0.0:8080
80/tcp -> [::]:8080
02

ユーザー定義ネットワークを作る

複数のサービスを接続するときは、ユーザー定義ネットワークを作り、各コンテナを同じネットワークへ参加させます。

ネットワークとコンテナCOMMAND
docker network create study-net
docker run -d --name site --network study-net nginx:alpine
docker network inspect study-net

ネットワーク名はプロジェクト内で意味が分かる名前にします。docker network lsで一覧を表示し、不要になったら接続中のコンテナを停止・削除してからdocker network rm study-netで削除します。

03

コンテナ名をホスト名にする

同じユーザー定義ネットワークのコンテナからは、IPアドレスではなくサービス名やコンテナ名で接続できます。IPアドレスは作り直しで変わる可能性があるため、名前で接続するほうが構成を保ちやすくなります。

名前解決を確認するCOMMAND
docker run --rm --network study-net busybox \
  nslookup site
出力例OUTPUT
Name:    site
Address: 192.168.48.2

IPアドレスは環境によって変わるため、これは出力形式の例として見ます。アプリケーションからは、データベースの接続先をlocalhostではなく、同じComposeサービスの名前にします。localhostは「そのアプリケーション自身のコンテナ」を指すためです。

04

ネットワークを片付ける

学習用リソースの削除COMMAND
docker rm -f site
docker network rm study-net

通信を確認できたら、コンテナとネットワークを削除します。次のComposeでは、このネットワーク作成とサービス名による接続をComposeファイルからまとめて管理します。