English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
前に、dockerコンテナ内で動作するサービスにネットワークポートを通じてアクセスする方法を実装しました。
コンテナ内でネットワークアプリケーションを実行できます。これらのアプリケーションに外部からのアクセスを許可するには、 -P または -p 引数でポートマッピングを指定します。
次に、ポートを通じてDockerコンテナに接続する方法を実装します。
私たちはpythonアプリケーションのコンテナを作成しました。
w3codebox@w3codebox:~$ docker run -d -P training/webapp python app.py fce072cc88cee71b1cdceb57c2821d054a4a59f67da6b416fceb5593f059fc6d
また、コンテナにバインドするネットワークアドレスを指定できます。例えば、バインドする 127.0.0.1。
私たちは使用します -P 引数でコンテナを作成するときに使用します。 docker ps コンテナポートが見えます。 5000 ホストポートにバインド 32768。
w3codebox@w3codebox:~$ docker ps CONTAINER ID IMAGE COMMAND ... ... PORTS ... ... NAMES fce072cc88ce training/webapp "python app.py" ... 0.0.0.0:32768->5000/tcp grave_hopper
以下のように使用することもできます。 -p 識別子を指定してコンテナポートがホストポートにバインドされるように指定します。
この二つの方法の違いは:
-P :はコンテナ内ポートランダムホストにマッピングされるハイポート。
-p : はコンテナ内ポートがホストポートにバインドされる指定のホストポート。
w3codebox@w3codebox:~$ docker run -d -p 5000:5000 training/webapp python app.py 33e4523d30aaf0258915c368e66e03b49535de0ef20317d3f639d40222ba6bc0
w3codebox@w3codebox:~$ docker ps CONTAINER ID IMAGE COMMAND ... PORTS NAMES 33e4523d30aa training/webapp "python app.py" ... 0.0.0.0:5000->5000/tcp berserk_bartik fce072cc88ce training/webapp "python app.py" ... 0.0.0.0:32768->5000/tcp grave_hopper
また、コンテナにバインドするネットワークアドレスを指定できます。例えば、バインドする 127.0.0.1。
w3codebox@w3codebox:~$ docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py 95c6ceef88ca3e71eaf303c2833fd6701d8d1b2572b5613b5a932dfdfe8a857c w3codebox@w3codebox:~$ docker ps CONTAINER ID IMAGE COMMAND ... PORTS NAMES 95c6ceef88ca training/webapp "python app.py" ... 5000/tcp, 127.0.0.1:5001->5000/tcp adoring_stonebraker 33e4523d30aa training/webapp "python app.py" ... 0.0.0.0:5000->5000/tcp berserk_bartik fce072cc88ce training/webapp "python app.py" ... 0.0.0.0:32768->5000/tcp grave_hopper
このようにして、アクセスを通じて 127.0.0.1:5001 コンテナにアクセスするための 5000 ポート。
上記の例では、デフォルトでtcpポートにバインドされています。UDPポートにバインドする場合は、ポートの後に「,」を追加でアクセスできます。 /udp。
w3codebox@w3codebox:~$ docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py 6779686f06f6204579c1d655dd8b2b31e8e809b245a97b2d3a8e35abe9dcd22a w3codebox@w3codebox:~$ docker ps CONTAINER ID IMAGE COMMAND ... PORTS NAMES 6779686f06f6 training/webapp "python app.py" ... 5000/tcp, 127.0.0.1:5000->5000/udp drunk_visvesvaraya 95c6ceef88ca training/webapp "python app.py" ... 5000/tcp, 127.0.0.1:5001->5000/tcp adoring_stonebraker 33e4523d30aa training/webapp "python app.py" ... 0.0.0.0:5000->5000/tcp berserk_bartik fce072cc88ce training/webapp "python app.py" ... 0.0.0.0:32768->5000/tcp grave_hopper
docker port コマンドは、ポートのバインド状況を簡単に確認することができます。
w3codebox@w3codebox:~$ docker port adoring_stonebraker 5000 127.0.0.1:5001
ポートマッピングは、dockerを別のコンテナに接続する方法の一つに過ぎません。
dockerには、複数のコンテナを接続して共有情報を共有するための接続システムがあります。
dockerの接続は、親コンテナが子コンテナの情報を見ることができる親子関係を作成します。
コンテナを作成する際に、dockerは自動的に名前を付けます。また、以下のように使用することもできます --name 識別子を使用してコンテナに名前をつけることができます。例えば:
w3codebox@w3codebox:~$ docker run -d -P --name w3codebox training/webapp python app.py 43780a6eabaaf14e590b6e849235c75f3012995403f97749775e38436db9a441
私たちは以下のように使用できます docker ps コマンドを使用してコンテナの名前を確認します。
w3codebox@w3codebox:~$ docker ps -l CONTAINER ID IMAGE COMMAND ... PORTS NAMES 43780a6eabaa training/webapp "python app.py" ... 0.0.0.0:32769->5000/tcp w3codebox
まず新しいDockerネットワークを作成します。
$ docker network create -d bridge test-net
パラメータ説明:
-d:パラメータはDockerネットワークタイプを指定します。bridge、overlayがあります。
overlayネットワークタイプはSwarmモード用で、このセクションでは無視してください。
新しいtestに接続するコンテナを実行します。-net 网络:
$ docker run -itd --name test1 --network test-net ubuntu /bin/bash
新しいターミナルを開き、testに新しいコンテナを追加します。-net 网络:
$ docker run -itd --name test2 --network test-net ubuntu /bin/bash
画像をクリックして拡大表示:
以下でpingを使用してtest1 コンテナと test2 コンテナが相互接続されました。
もしtest1、test2 コンテナ内にpingコマンドがない場合、以下のコマンドを実行してpingをインストールします(即学即用:1つのコンテナでインストールし、コンテナをイメージに提交し、新しいイメージで上記の2つのコンテナを再起動します)。
apt-get update apt install iputils-ping
test1 コンテナに以下のコマンドを入力します:
画像をクリックして拡大表示:
同様に、test2 コンテナも成功して接続されます:
画像をクリックして拡大表示:
このように、test1 コンテナと test2 コンテナが相互接続されました。
複数のコンテナ間で相互接続が必要な場合は、Docker Composeを使用することをお勧めします。後で紹介します。
ホストマシン上で以下の場所に配置するDNSを設定できます: /etc/docker/daemon.jsonファイルに以下の内容を追加してすべてのコンテナのDNSを設定します:
{ "dns" : [ "114.114.114.114", "8.8.8.8" ] }
設定後、コンテナのDNSは自動的に以下のように設定されます 114.114.114.114 を使用します。 8.8.8.8。
設定が完了したら、dockerを再起動する必要があります。
コンテナのDNSが有効かどうかを確認するには以下のコマンドを使用できます。それはコンテナのDNS情報を出力します:
$ docker run -it --rm ubuntu cat etc/resolv.conf
画像をクリックして拡大表示:
コンテナの設定を手動で指定する
指定のコンテナにDNSを設定するだけなら、以下のコマンドを使用できます:
$ docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu
パラメータ説明:
--rm:コンテナが終了した際にコンテナ内のファイルシステムを自動的にクリーンアップします。
-h HOSTNAME または --hostname=HOSTNAME:コンテナのホスト名を設定します。設定されたホスト名はコンテナ内の /etc/hostname および /etc/hosts に追加します。
--dns=IP_ADDRESS:DNS サーバーをコンテナの /etc/resolv.conf 内で、コンテナがこのサーバーを使用してすべての不在 /etc/hosts 内のホスト名。
--dns-search=DOMAIN:コンテナの検索ドメインを設定します。検索ドメインが .example.com に設定されている場合、ホスト名 host を検索する際には、host.example.com も検索されます。
画像をクリックして拡大表示:
もしコンテナの起動時に指定されていない場合 --dns を使用します。 --dns-search、Docker はデフォルトでホストマシンの /etc/resolv.conf を使用してコンテナの DNS を設定します。