ポート公開は外部への入口
-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ユーザー定義ネットワークを作る
複数のサービスを接続するときは、ユーザー定義ネットワークを作り、各コンテナを同じネットワークへ参加させます。
ネットワークとコンテナ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で削除します。
コンテナ名をホスト名にする
同じユーザー定義ネットワークのコンテナからは、IPアドレスではなくサービス名やコンテナ名で接続できます。IPアドレスは作り直しで変わる可能性があるため、名前で接続するほうが構成を保ちやすくなります。
名前解決を確認するCOMMAND
docker run --rm --network study-net busybox \
nslookup site出力例OUTPUT
Name: site
Address: 192.168.48.2IPアドレスは環境によって変わるため、これは出力形式の例として見ます。アプリケーションからは、データベースの接続先をlocalhostではなく、同じComposeサービスの名前にします。localhostは「そのアプリケーション自身のコンテナ」を指すためです。
ネットワークを片付ける
学習用リソースの削除COMMAND
docker rm -f site
docker network rm study-net通信を確認できたら、コンテナとネットワークを削除します。次のComposeでは、このネットワーク作成とサービス名による接続をComposeファイルからまとめて管理します。