前書き
Dockerチュートリアル学習中に↓のようなコマンドに出会い-p 80:80 ⇦「これはなに?」と疑問に感じたのでコマンドの意味を少し深ぼる記事を残します。
docker container run --name tutorial -d -p 8080:80 docker/gettig-started
コマンドの意味を理解する基本↓のように分解できる。
docker. container(何を) run(どうするか) --name tutorial -d -p 80:80 (引数) docker/gettig-started(イメージファイルの指定)
結論
-p 8080:80
↑はポート番号の指定をしている。
そもそもポート番号とは?
⇨ポートに割り振られた番号
ポートとは?
⇨コンピューターとコンピューターの間でデータを受け渡しをする際に使用する通信相手のアプリケーションを特定する特別なもの(ドアのようなイメージ) ポート番号は0番~65535番まである。つまりポート(ドア)は65535個ある。
例 AのPCからサーバーにメールを送信する場合
メールを送信する流れ(クライアント側A目線).
①サーバーの特定(IPアドレスの特定).
②ポートの指定(サーバー内のこのポート(ドア)にメール送るとドアの指定をする).
③送信.
ここでリクエストをサーバーに送る際にipアドレスとポート番号を指定しないとリクエストがサーバーに届かない.
サーバー=マンション.
ポート番号=部屋番号.
で例えると物を郵送するときマンション名だけ指定しても相手に届かない。マンション名と部屋番号両方記載されて初めてものが届く。データも同じでどこのサーバー(ipアドレス)のどのポート番号(部屋番号)にデータを送るかを指定しないと送れない
メールを送信する流れ(サーバー目線).
①ポート番号25番でクライアント側からリクエストが来た.
⇨25番でリクエストが来たと言うことはメールを送信したいんだなぁとサーバーは認識する。「〇〇番のポート番号のリクエストが来たら〇〇がしたいんだなぁ」と認識するために使うのがポート(ドア)の役割。
注意:もっと詳しくいろんな段階を踏んでメール送信してると思いますがこの記事ではポートの理解が優先なので割愛させていただきます。またipアドレスの特定は最後に行うことだと思いますが話の流れが自然になるように順序を入れ替えています。
ポート番号の種類
ウェルノウンポート番号(0番~1023番) ⇨メール送信だったら25番ポートやファイルの送信なら21番ポートなど通信の種類によって決まってる.
登録ポート番号(1024番ポート~49151番ポート) ⇨様々なアプリケーションを使用するためのポート番号。例MySQLなら3306番など
プライベートプライベート番号 ⇨自分で決めれるポート番号 注意点:ポート番号が他の人と被るとエラーになりそのポートは使えない。
最後
↓のコマンドの意味
docker container run --name tutorial -d -p 8080:80 docker/gettig-started
container run = コンテナ起動.
--namedでコンテナの名前はtutorialにする.
-d = バックグラウンドで実行.
-p 8080:80 = docker内の仮想コンピューターとホスト(パソコン)側のコンピューターを接続するオプション.
構文docker run -p <host_port>:<container_port>
まとめ
ポートは通信相手のアプリケーションが何かを特定するためにある.
ポート番号がないと正しくリクエストを受け取れないし送れない。