Docker のポート転送は、Docker ホスト システム上でコンテナ ポートを公開できるようにするプロセスです。これにより、アプリケーションを隔離された環境で実行できるようになり、ユーザー マシン上のコンテナの外部からアプリケーションにアクセスできるようになります。
この投稿では次のことを説明します。
- 「-p」または「-publish」タグを使用して Docker でポートを転送する方法
- Docker Compose を使用して Docker でポートを転送する方法
- ポートを特定のネットワークに転送する方法
- 結論
「-p」または「-publish」タグを使用して Docker でポートを転送する方法
Docker でポートを転送するには、ユーザーは Docker ホスト上でコンテナー ポートを公開する必要があります。この目的のために、「」を使用して Docker ホスト上でコンテナーを実行します。 -p ' または ' -公開 「」のタグ ドッカーラン ' 指示。
適切なデモンストレーションを行うには、以下の手順に従ってください。
ステップ 1: Dockerfile を作成する
まず、ファイルを作成し、その名前を「 Dockerfile ”。このファイルには、Docker コンテナのテンプレートを作成するためのテキストの手順が含まれています。たとえば、Dockerfile 内の以下のスニペットを使用して、単純な Golang プログラムを Docker 化してみましょう。
ゴーランから: 1.8
作業ディレクトリ / 行く / 送信元 / アプリ
main2.go をコピーします。
実行してビルドする -O ウェブサーバー。
さらす 8080
CMD [ 「./ウェブサーバー」 ]
指定されたスニペットでは次のようになります。
- 「 から 」コマンドを利用してベースイメージを設定します。
- 「 作業ディレクトリ 」はコンテナの作業ディレクトリを定義します。
- 「 コピー 」コマンドは、コンテナーで指定されたパスにプログラム ファイルのコピーを作成します。
- 「 走る 」コマンドはコンテナ内で指定されたコマンドを実行します。
- 「 さらす 」コマンドは、コンテナがリッスンされるポートを指定します。
- 「 CMD 」はコンテナの実行可能ポイントを指定します。
ステップ 2: Golang プログラムを作成する
次に、「」という名前の別のファイルを作成します。 main2.go 」を入力し、ポート「」に単純な文字列を出力する下記の Golang プログラムを貼り付けます。 8080 ”:
パッケージメイン
輸入 (
「fmt」
'ログ'
「ネット/http」
)
関数ハンドラー ( で http.ResponseWriter、r * http.リクエスト ) {
html := `
DOCTYPE html >
< html >
< 頭 >
< タイトル > こんにちは、ゴラン ! タイトル >
< スタイル >
体 {
背景色: #D2B48C;
}
。容器 {
テキスト整列: 中央;
パディング: 50ピクセル;
}
スタイル >
頭 >
< 体 >
< ディビジョン クラス = '容器' >
< h1 > こんにちは ! LinuxHint チュートリアルへようこそ h1 >
ディビジョン >
体 >
html >`
w.ヘッダー ( ) 。セット ( 「コンテンツタイプ」 、 「テキスト/html」 )
fmt.Fprint ( で 、html )
}
ファンクメイン ( ) {
http.HandleFunc ( 「/」 、ハンドラー )
ログ.致命的 ( http.ListenAndServe ( 「0.0.0.0:8080」 、なし ) )
}
ステップ 3: コンテナのスナップショットを生成する
次に、上記で指定した Dockerfile からコンテナーのスナップショットを生成します。この目的のために、まず、「」を使用して Dockerfile が作成されるディレクトリに移動します。 cd <作業ディレクトリへのパス> ' 指示:
次に、指定されたコマンドを使用して新しいコンテナー イメージを生成します。
ドッカービルド -t golang-img 。
与えられた結果は、イメージが指定されたビルド コンテキストに従って作成されたことを示しています。
ステップ 4: ホスト ポートをコンテナ ポートに転送する
次に、コンテナーを実行し、ホスト ポートをコンテナー ポートに転送して、ローカル マシン上のコンテナーの外にある Dockerize アプリにアクセスします。この目的のために、 「docker run –name <継続名> -p <ホストポート>:<継続ポート> <イメージ名> ' 指示:
ドッカーラン - 名前 ゴーコント -p 8080 : 8080 golang-imgここで、「 -p 」フラグは、Docker ホスト上のコンテナ実行ポートを公開するために使用されます。
ステップ 5: 検証
確認するには、「」を使用して実行中のコンテナを表示します。 ドッカーps ”:
港湾労働者 ps以下の結果では、コンテナ化されたアプリケーションは利用可能なネットワーク インターフェイスでリッスンしています。 0.0.0.0 「公開ポート上」 8080 ”。これは、ポートがホスト マシン上で実行中のアプリケーションに転送されることを意味します。
次に、ブラウザを起動して「」に移動します。 http://localhost:8080/ 」を確認し、ポート転送技術が適用されているかどうか、およびコンテナ化されたアプリケーションがホスト システム上のコンテナの外部にアクセスできるかどうかを確認します。
ここでは、ホスト ポートがコンテナ ポートに正常に転送され、アプリケーションは Docker ホスト上でアクセスできるようになりました。
Docker Compose を使用して Docker でポートを転送する方法
コンテナのポートをホストに転送して、コンテナの外部からコンテナ化されたアプリケーションにアクセスするには、ユーザーは「 ポート yaml ファイルの作成に「」キーを入力します。 Docker compose は、さまざまなコンテナーでさまざまなサービスやアプリケーションを実行できるようにする Docker サービスです。 「」を使用して、 docker-compose.yml ” ファイルを使用すると、ユーザーはコンテナ ポートをホスト マシンに転送し、アプリケーションを外部の世界に接続することもできます。
図解については、以下の手順を確認してください。
ステップ 1: Compose ファイルを作成する
まず、「」という名前のファイルを生成します。 docker-compose.yml ” ファイルを開き、次の内容をファイルに追加します。
バージョン: 「3」サービス:
ウェブ:
建てる: 。
ポート:
- 8080 : 8080
上記のスニペットでは、「 ポート 」キーはホストをコンテナポートに接続するために使用されます。ここで、最初の値はホスト ポート、2 番目の値はコンテナ ポートです。
ステップ 2: アプリを起動する
構成ファイルで指示を指定した後、「」を使用してコンテナ内でアプリケーションを起動します。 docker-構成アップ ' 指示:
docker-構成アップ
ステップ 3: 検証
確認のために、「」を使用して作成コンテナをリストします。 docker-compose ps ' 指示:
ドッカー構成 ps -a
ホスト マシン上でコンテナーにアクセスできるかどうかを確認するには、「」に移動します。 http://localhost:8080/ 」のURLです。ここでは、ホスト上でコンテナ ポートが効果的に転送されていることがわかります。
ポートを特定のネットワークに転送する方法
コンテナポートを特定のネットワークに転送するには、ユーザーは「」を使用してコンテナにアクセスするネットワークを指定する必要があります。 -通信網 ' オプション。デモンストレーションのために、指定された手順を見てください。
ステップ 1: ネットワークを作成する
「」を使用して新しいネットワークを作成します。 docker network create <ネット名> ' 指示。デフォルトでは、このネットワークはブリッジ ドライバーを使用します。
docker ネットワークが mygo-network を作成する
Docker ネットワークを表示するには、「 ドッカーネットワークLS ' 指示:
ドッカーネットワーク lsここで、「」を作成することに成功しました。 マイゴネットワーク ”を使用している” 橋 ' 運転者:
ステップ 2: ネットワークをマップする
ポート転送技術を使用して特定のネットワーク上でコンテナを実行してアクセスするには、次のコマンドを使用します。
ドッカーラン -p 8080 : 8080 - 通信網 mygo-ネットワーク golang-img指定されたコマンドでは、「 -p 」オプションは、指定されたネットワークの指定されたポートでコンテナを公開します。ここで、「 -通信網 」オプションは、Docker ネットワークを定義するために使用されます。
確認のため、再度「」に移動します。 http://localhost:8080 」ポートにアクセスし、指定されたネットワーク上でコンテナがアクセス可能かどうかを確認します。
上記の出力は、特定のネットワーク上でコンテナ ポートを効果的に転送したことを示しています。
注記: 「ホスト」ネットワークを使用している間、ユーザーは「」を使用してコンテナからホストにポートを公開する必要はありません。 -p ' または ' -公開 ' オプション。
Docker Compose を使用してポートを特定のネットワークに転送する
次のスニペットを「」に追加します。 docker-compose.yml ' ファイル。以下のスニペットでは、「 ネットワーク ” キーはネットワークを指定するために使用されます。
バージョン: 「3」サービス:
ウェブ:
建てる: 。
ポート:
- 8080 : 8080
ここで、「」を使用してコンテナ内でアプリケーションを起動します。 docker-構成アップ ' 指示:
docker-構成アップ
Docker でのポート転送の方法について説明しました。
結論
コンテナ外の dockerize アプリケーションにアクセスするために Docker でポートを転送するには、ユーザーは次のいずれかを使用できます。 -p ' または ' -公開 「」のオプション ドッカーラン ” コマンドを使用することも、ユーザーが「 ポート Docker Compose ファイルの「」キー。特定のネットワーク上のコンテナにアクセスするために、ユーザーは「」を使用してネットワーク上のコンテナ ポートを転送できます。 –ネットワーク <ネットワーク> ' オプション。このブログでは、Docker でポートを転送するテクニックを紹介しました。