DockerのPort指定|コンテナとホストを繋ぐ実例を詳しく解説

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2023年9月)

✔このような方へ向けて書かれた記事となります

「docker portコマンドの機能が分からない」

「docker portコマンドの使い方を学びたい」

「docker portコマンドの具体的な使用例を確認したい」

✔当記事を通じてお伝えすること

  • docker portコマンドの基本理解
  • docker portコマンドの使い方とその応用
  • docker portコマンドの具体的な使用例

当記事では、docker portコマンドの基本操作から、より高度な用途への活用方法まで、実際の使用例を交えて詳細に説明します。

ぜひ最後までご覧いただき、docker portコマンドの使い方をマスターしましょう。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

DockerにおけるPortの基本

こちらでは、Docker Portについての基本的な概要をお伝えしていきます。

  • Docker Portの基本
  • 基本的なポートの設定方法

Docker Portの基本

Docker Portは、Dockerコンテナ内のアプリケーションと外部との通信を可能にするもの。

コンテナ技術において重要な役割を果たし、サービスの公開や連携に不可欠です。

例えば、Webサーバーの公開には特定のポートを設定する必要があります。

基本的なポートの設定方法

Dockerでのポートの設定は、コマンドラインから簡単におこなえます。

docker run -p 80:80

ホストの80番ポートとコンテナの80番ポートをマッピングすることが一般的です。

これにより、外部からのアクセスが可能となります。

Dockerの概要

こちらでは、Dockerそのものに焦点を当て、その特徴と利用のメリットについてお伝えします。

  • Dockerの特徴
  • Dockerを利用するメリット

Dockerの特徴

Dockerは、以下の特徴を持つコンテナ技術です。

  • 軽量な構造:仮想マシンよりも軽量であり、起動も速いため、リソースの節約が可能
  • 移植性の高さ:異なる環境間でも同じコンテナが動作するため、開発から本番環境への移行が容易
  • 開発と本番環境の一致:ローカルで動作確認したコンテナは、本番環境でも同じように動作するため、環境差によるトラブルを減らせる

Dockerを利用するメリット

Dockerを利用することで、以下のようなメリットがあります。

  • 開発プロセスの効率化
  • インフラのコスト削減
  • チーム内での環境共有の容易化
  • スケーラビリティの向上

Docker Portの存在する意味

こちらでは、Docker Portが果たす重要な役割・重要性についてお伝えします。

  • Docker Portが果たす役割
  • Docker Portの制約

Docker Portが果たす役割

Docker Portはコンテナ通信の要となるもので、以下のような役割があります。

  1. 外部との通信
  2. サービス間の連携

1. 外部との通信

Docker Portを設定することで、外部からコンテナ内のサービスへアクセスすることが可能になります。

例としては、ウェブサーバーの公開などです。

docker run -p 8080:80 -d nginx

nginxサーバーをホストPCの8080番ポートからアクセスできるようにします。

サービス間の連携

異なるコンテナ間でもポートを通じて通信でき、複数のサービスを一体化したシステム構築が実現できます。

version: '3'

services:
  web:
    image: my-web-app:latest
    environment:
      - DB_HOST=db
    depends_on:
      - db
    ports:
      - "8000:80"

  db:
    image: postgres:latest
    environment:
      - POSTGRES_DB=mydatabase
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=secret
    ports:
      - "5432:5432"

docker-compose.yml内で設定できます。

Docker Portの制約

Dockerのポートマッピングには、確かにいくつかの制約や注意点が存在します。

以下が主な制約です。

  1. ポートの二重使用
  2. 動的ポート割り当て
  3. ホストネットワークモード
  4. IPアドレスのバインド
  5. コンテナ間の通信

1. ポートの二重使用

ホストシステム上で一度バインドされたポートは、他サービスやコンテナによって再度の使用はできません。

ホストの80番ポートをひとつのコンテナにマッピングした場合、他コンテナやホスト上のサービスでは、別ポートを使用する必要があります。

動的ポート割り当て

特定のポートを指定せずにコンテナを起動すると、Dockerは動的にポートを割り当てます。

これはテストや一時的な使用には便利ですが、永続的なサービスでの使用には適していません。

ホストネットワークモード

コンテナをホストのネットワークモードで実行すると、そのコンテナはホストのネットワークスタックを共有します。

このモードでは、ポートのマッピングは不要ですが、ホストのネットワークリソースとの競合やセキュリティ上のリスクを考えなければなりません。

UDP/TCPの区別

Dockerのポートマッピングはプロトコル(TCP/UDP)に対しても明示的である必要があります。

デフォルトはTCPです。UDPポートをマッピングする場合は、明示的に指定しましょう。

IPアドレスのバインド

特定のホストIPにポートをバインドする場合、そのIPアドレスがホストマシンに実際に存在し、利用可能である必要があります。

コンテナ間の通信

Docker Composeを使用すると、サービス名を使用してほかのサービスにアクセスできますが、これはDockerの内部ネットワークに依存しています。

外部ネットワークや異なるDockerネットワークからのアクセスには、適切なポートマッピングやネットワーク設定が必要です。

Docker Portの使い方

こちらでは、Docker Portの具体的な設定方法や各種機能、詳細について詳しくお伝えします。

  • Docker Port設定の手順
  • Docker Portマッピングの詳述
  • 公開ポートとプライベートポートの違い
  • Docker runについて
  • Docker Portの命名(–name process-name)
  • ポートバインディングの詳細(-p 3000:8080)
  • デタッチモードとは(-d)

Docker Port設定の手順

Docker Portの設定は以下の手順でおこなえます。

  1. ポート番号の決定
  2. マッピングの設定
  3. コンテナの起動
docker run -p 8080:80 my_container

ホストの8080ポートとコンテナの80ポートをマッピングできます。

Docker Portマッピングの詳述

Docker Portマッピングは、外部とコンテナ内の特定のポートを結びつけるプロセスです。

-p 80:80

ホストの80番ポートをコンテナの80番ポートに結び付けられます。

このような設定が、外部からのアクセスを可能にします。

公開ポートとプライベートポートの違い

公開ポートは、ホストマシン上で、外部からアクセスされるポートです。

プライベートポートは、コンテナ内のポートで、通常アプリケーションが監視するポートのこと。

-p 公開ポート:プライベートポート

Docker runについて

docker runコマンドはコンテナを起動する際に使用します。

ポート設定もこのコマンドのオプションとして指定します。

docker run -p 80:80 image_name

Docker Portの命名(–name process-name)

コンテナに名前を付けることで、あとで操作する際にIDではなく名前でアクセスできます。

docker run --name web_server -p 80:80 image_name

ポートバインディングの詳細(-p3000:8080)

-pオプションを用いてホストとコンテナのポートをマッピングします。

3000番ポートを8080番ポートにバインドする場合は以下のとおり。

-p 3000:8080

デタッチモードとは(-d)

デタッチモードは、コンテナをバックグラウンドで実行するモードです。

これにより、コンテナが実行されている間も、ターミナルを自由に使用できます。

docker run -d -p 80:80 image_name

Docker Portの活用事例

こちらでは、実際にDocker Portをどのように活用できるのかについて、具体的な事例を挙げて説明します。

  • コンテナ通信におけるDocker Portの実例
  • ホストからコンテナへの通信例

コンテナ通信におけるDocker Portの実例

コンテナ間での通信にはDocker Portが必要です。

例えば、フロントエンドとバックエンドがそれぞれ異なるコンテナで動作する際、適切にポートを設定することで通信を可能にします。

ホストからコンテナへの通信例

ホストマシンからコンテナ内のサービスへアクセスするためにもDocker Portの設定が必要です。

例として、ローカルホストからWebサーバーへのアクセスが挙げられます。

Docker Portの問題対処

こちらでは、Docker Portに関連する一般的な問題とその解決方法、およびベストプラクティスについて説明します。

  • よくある問題とその解決法
  • Docker Portのベストプラクティス

よくある問題とその解決法

Docker Portの設定にはいくつかの一般的な問題があります。

例として、ポート競合や設定誤りなどが挙げられます。

適切な設定とトラブルシューティングが重要です。

Docker Portのベストプラクティス

ポートの使用を効率的かつ安全に行うためのベストプラクティスがあります。

例として、不必要なポートの開放を避ける、特定のIPからのアクセスのみを許可するなどのテクニックがあります。

補足:IPとポートについて

こちらでは、Dockerでのポート番号とIPアドレスについて、その意味と用途を詳しく解説します。

  • Dockerのポート番号の意味
  • DockerのIPアドレスについて

Dockerのポート番号の意味

Dockerのポート番号は、通信のエンドポイントとして機能します。

ホストマシンとコンテナの間でどのポート番号を用いるかは、サービスの種類や通信の必要性に応じて設定されます。

例えば、HTTP通信は通常80番ポートを使用し、HTTPS通信は443番ポートを使用します。

DockerのIPアドレスについて

Dockerコンテナはそれぞれ独自のIPアドレスを持ちます。

これによって、コンテナ同士またはホストとコンテナ間の通信が可能となります。

コンテナのIPアドレスは、docker inspectコマンドなどで確認できます。

注意すべき点として、コンテナのIPアドレスは通常外部からはアクセスできないため、外部からのアクセスにはポートの設定が必要です。

まとめ

当記事では、docker portコマンドについて学習してきました。

  • Docker Portは、コンテナ化されたアプリケーションの柔軟かつ効率的な運用を実現するための重要な部分
  • Dockerの学習を進める際には、ポートの概念と設定方法に慣れることが重要
  • 適切なポート設定と管理は、アプリケーションのセキュリティとパフォーマンスを高めるための鍵となる

当記事が、Docker Portの理解と実践的な活用に役立つ情報源となれば幸いです。

最新のDockerの機能やベストプラクティスについては、公式ドキュメントやコミュニティのサポートも活用して、常に最新の知識を身につけるよう努めましょう。

タイトルとURLをコピーしました