Dockerfileを使用してポートを公開する

Using Dockerfile Expose Ports



を使用して既存のDockerイメージからカスタムDockerイメージを作成するのは本当に簡単です Dockerfile 。通常、人々は次のような最小限のベースイメージを使用します 高山 また ubuntu / debian その目的のために。たとえば、NodeJSで記述されたお気に入りのWebアプリのカスタムDockerイメージを作成するとします。アプリはポートで実行されます 8080 。デフォルトでは、ポートでウェブアプリにアクセスすることはできません 8080 ホストマシンから。ポートを公開または開くことをDockerに通知する必要があります 8080 ホストマシンからアクセスできるようにします。

この記事では、を使用してポートを公開する方法を紹介します Dockerfile 実世界の例で。始めましょう。







まず、プロジェクトディレクトリを作成する必要があります。このディレクトリには、すべてのプロジェクトファイルと Dockerfile



次のコマンドを実行して、プロジェクトディレクトリを作成します myapp / ユーザーのホームディレクトリで、次の場所に移動します。



$mkdir/myapp&& CD/myapp





Webアプリの準備:

次に、ディレクトリを作成します src / の中に 〜/ myapp / 次のコマンドを使用してディレクトリを作成します。

$mkdirsrc



の中に src / ディレクトリ、私のNodeJSアプリケーションのすべてのソースコードが保持されます。

簡単なものを作成します app.js のファイル src / ディレクトリを作成し、ポートで単純なWebサーバーを実行します 8080 デモンストレーションのためだけに。

NS src / app.js ファイルには、次のコード行が含まれています。

Dockerfileの作成とポートの公開:

次に、を作成します Dockerfile の中に 〜/ myapp 次のコマンドを使用してディレクトリを作成します。

$接するDockerfile

次に、次の行を次のように入力します。 Dockerfile そしてそれを保存します。これらの行の意味については後で説明します。

ここ、 高山から:3.8 つまり、 高山:3.8 これから構築する新しいイメージのベースとしてのDockerイメージ Dockerfile

APKアップデートを実行する つまり、を実行します APKアップデート ベースDockerイメージのコマンド 高山:3.8

apk add –no-cachenodejsを実行します つまり、を実行します apk add NodeJSプログラミング言語をインストールするコマンド 高山:3.8 Dockerベースイメージ。

コピー./src/ app つまり、からすべてのファイルをコピーします 〜/ myapp / src ディレクトリへの /アプリ を使用してビルドする新しいDockerイメージのディレクトリ Dockerfile

CMD [/usr/bin/node、/app/app.js] つまり、を実行します /app/app.js を使用して新しいコンテナからファイル ノード にあるバイナリ / usr / bin / node

最後に、 EXPOSE 8080 / tcp つまり、TCPポートを公開またはオープンします 8080 ホストコンピュータに。

Dockerfileを使用したカスタムDockerイメージの作成:

それでは、カスタムDockerイメージを作成しましょう アルパインノード:v1 を使用して Dockerfile 作成したばかりです。

まず、あなたが 〜/ myapp / ディレクトリを作成し、次のコマンドを実行してカスタムDockerイメージを作成します アルパインノード:v1

$Dockerビルド-NSalpine-node:v1。

ご覧のとおり、カスタムDockerイメージ アルパインノード:v1 作成中です。必要なベースDockerイメージとパッケージがインターネットから取得されています。

ご覧のとおり、カスタムDockerイメージ アルパインノード:v1 正常に作成されました。

カスタムDockerイメージのテスト:

これで、カスタムDockerイメージをテストできます アルパインノード:v1 とても簡単に。私たちがしなければならないのは、からコンテナを作成することです アルパインノード:v1 画像。

次のコマンドを実行して、Dockerコンテナを作成します www から アルパインノード:v1 Dockerイメージ:

$docker run-NS -それ - 名前www alpine-node:v1

コンテナ www 創造された。

それでは、のIPアドレスを調べてみましょう。 www 次のコマンドを使用したDockerコンテナ:

$Dockerはwwwを検査します| グリップ住所

ご覧のとおり、私の場合、IPアドレスは 172.17.0.3 。したがって、私が作成したNodeJSアプリケーションは、ポートのWebブラウザーからアクセスできる必要があります。 8080 このIPアドレスの。

出来上がり!ポートにアクセスできます 8080 私の www Dockerコンテナ。

これは基本的に、使用して構築するカスタムDockerイメージで特定のポートを公開する方法です。 Dockerfile

Dockerfileを使用したTCPおよびUDPポートの公開:

この記事の前のセクションでは、を使用してTCPポートを公開する方法を示しました。 Dockerfile

TCPポート(たとえば、TCPポート)を簡単に公開できます 53 )あなたの Dockerfile 次の行で:

公開53/tcp

UDPポート(UDPポートとしましょう)を公開することもできます 53 )あなたの次の行で Dockerfile

公開53/udp

TCPポートとUDPポートは、次の行で同時に公開できます。 Dockerfile

公開53/tcp
公開53/udp

使用するプロトコル(TCPまたはUDP)を指定しない場合、デフォルトでTCPが使用されます。たとえば、次の行を Dockerfile

公開53

次に、DockerはTCPポート53を使用することを想定します。

Dockerfileを使用して複数のポートを公開する:

カスタムのMEANスタックDockerイメージを作成するとします。この場合、あるポート(たとえば、TCPポート80または8080)でHTTPサーバーを実行し、TCPポート21で実行されるFTPサーバー、TCPポート3306で実行されるSQLデータベースサーバー(たとえば、MySQL)を実行します。または、TCPポート27017または27018で実行されるNoSQLデータベースサーバー(たとえば、MongoDB)、TCPポート22で実行されるSSHサーバー。これは多くのポートです。

良いニュースは次のとおりです。を使用して作成されたカスタムDockerイメージで必要な数のポートを公開できます Dockerfile

上記の例のポートは、次の行で公開できます。 Dockerfile

公開80/tcp
公開8080/tcp
公開21/tcp
公開22/tcp
公開3306/tcp
公開27017/tcp
公開27018/tcp

必要に応じて、DockerはデフォルトでTCPを使用するため、プロトコル仕様をそのままにして、次の行で同じことを行うことができます。 Dockerfile

公開80
公開8080
公開21
公開22
公開3306
公開27017
公開27018

必要に応じて、TCPポートとUDPポートを混在させることができます Dockerfile 。たとえば、DNSサーバー(UDPポート53で実行)を実行している場合、上記の例とともに、次の行をに追加します。 Dockerfile

公開80
公開8080
公開21
公開22
公開53/udp
公開3306
公開27017
公開27018

これが、を使用してポートを公開する方法です。 Dockerfile 。詳細については Dockerfile を使用してポートを公開します Dockerfile 、 読む Dockerfile のリファレンスガイド https://docs.docker.com/engine/reference/builder/#expose

この記事を読んでくれてありがとう。