ドッカー使用の概要(b)は、ドッカードッカーデータウェアハウス管理及び容器ポートマッピング相互接続

1ドッカーリポジトリへのアクセス

サードパーティ製のミラーリング
ドッカアカウントをログに記録する必要性

root@slave1:/home/xxx/Documents# docker pull index.tenxcloud.com/docker_library/node:latest
Error response from daemon: pull access denied for index.tenxcloud.com/docker_library/node, repository does not exist or may require 'docker login'

地元の民間倉庫の設定
プライベート高い倉庫のレジストリを作成するためにミラーを使用して)1を
ドッカーをインストールした後、それは公式で提供することができregistry、単純にローカルのプライベート・ウェアハウス環境ミラーを設定します。

root@slave1:/home/xxx/Documents# docker run -d -p 5000:5000 registry:2    #自动下载井启动一个registry容器,创建本地的私有仓库服务。
Unable to find image 'registry:2' locally
2: Pulling from library/registry
c87736221ed0: Pull complete
1cc8e0bb44df: Pull complete
54d33bcb37f5: Pull complete
e8afc091c171: Pull complete
b4541f6d3db6: Pull complete
Digest: sha256:8004747f1e8cd820a148fb7499d71a76d45ff66bac6a29129bfdbfdc0154d146
Status: Downloaded newer image for registry:2
40761724cd46b129753d1d74bf51a4744d609b68a00edfc5179a922510fab1e7

すべてのコンテナを見ます

root@slave1:/home/xxx/Documents# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                           PORTS                    NAMES
40761724cd46        registry:2          "/entrypoint.sh /etc…"   10 minutes ago      Up 10 minutes                    0.0.0.0:5000->5000/tcp   dazzling_hopper

デフォルトでは、倉庫は、コンテナ内に作成されます/var/lib/registryディレクトリ。あなたはできる-vローカルパス指定されたパラメータに格納された画像ファイルです。アップロードされた画像/opt/data/registryのディレクトリ:

docker run -d -p 5000 5000 -v /opt / data/registry:/var/l ib/registry registry :2

地元の倉庫で、この時点ではポート5000をリッスンし、民間のサービスを開始します。
2)倉庫管理
ビューの既存のミラー

root@slave1:/home/xxx/Documents# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               5e13f8dd4c1a        6 weeks ago         120MB

使用docker tagイメージマークにコマンドを10.0.2.2:5000/test(フォーマットdocker tag IMAGE [:TAG] [REGISTRY.HOST/] [USERNAME/] NAME [:TAG ]

root@slave1:/home/xxx/Documents# docker tag ubuntu:16.04 10.0.2.2:5000/test
root@slave1:/home/xxx/Documents# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
10.0.2.2:5000/test   latest              5e13f8dd4c1a        6 weeks ago         120MB
ubuntu               16.04               5e13f8dd4c1a        6 weeks ago         120MB

使用docker pushアップロードタグ付けされた画像を:

# docker push 10.0.2.2:5000/test

curlビュー倉庫10.0.2.2:5000鏡の中:

# curl http://10.0.2.2:5000/v2/search

アップロードされたら、いずれかにしてにアクセスすることができ10.0.2.2、この画像をダウンロードするには、マシンのアドレス。ドッカー高いセキュリティ要件の比較的新しいバージョンでは、倉庫をサポートするように求められますSSL/TLS証明書を。内部使用のための専用倉庫は、倉庫でのセキュリティチェックをオンまたはオフ証明書自体を構成することができます。まず、修正Docker daemon、一切の安全証明書のチェック民間倉庫に自信を表明していない、次のパラメータを追加し、起動パラメータを:DOCKER_OPTS;”-- insecure-registry 10.0.2.2:500 ”再起動後にドッカーサービスを、そして地元の民間への倉庫から画像をダウンロードします

root@slave1:/home/xxx/Documents#  service docker restart
root@slave1:/home/xxx/Documents# docker pull 10.0.2.2:5000/test
root@slave1:/home/xxx/Documents# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
10.0.2.2:5000/test   latest              5e13f8dd4c1a        6 weeks ago         120MB

ダウンロードした後、あなたはまた、より一般的なタグを追加することができubuntu: 16. 04、その後の使用を容易にするために、:

root@slave1:/home/xxx/Documents# docker tag 10.0.2.2:5000/test ubuntu:16.04

2ドッカーデータ管理

ドッカーは、多くの場合、あなたが永続的なデータである必要があり、またはデータが必ずしもコンテナのデータ管理操作を必要とする複数の容器、間で共有する必要があるため、本番環境で使用します。
:主に2つの方法で管理データコンテナ
ポート・データ・ボリューム(Data Volumes;)ローカルホスト環境に直接マッピングコンテナデータ
ポートデータボリューム・コンテナ(Data Volume Containers特定のコンテナの容積を用いて、メンテナンスデータ:)。
これは、コンテナ内のデータボリュームを作成するには、容器内のデータボリュームにローカルディレクトリやファイルをマウントする方法について説明します。次に、コンテナ船のデータ量を使用し、ホスト、容器及び容器、およびバックアップと復元データとの間でデータを共有する方法。
データボリュームの
データ量(Data Volumes)特別なディレクトリで使用するための容器である、それは中のLinuxに似直接コンテナにマッピングされたオペレーティングシステムのディレクトリ、ホストとなるmount行動を。
データ量は多くの便利な機能を提供することができます
作業はコンテナ間のコンテナの簡単かつ効率的に再利用となり間でポートデータボリュームのデータを転送することができ、
データボリュームの変更内のデータの口はすぐに反映されます、またはそれが容器に動作しているかどうかローカル操作、
ポートの更新は、画像データ量に影響を与えず、塗布液は、オープン・トランザクションを選択し、
ポート・ボリュームは、コンテナが使用されなくなるまで、それは安全にアンロードすることができ存在します。
データボリュームを作成
ドッカーが提供するvolumeデータボリュームを管理するためのサブコマンドを、次のコマンドは、迅速にデータボリュームをローカルに作成することができます。

root@slave1:/home/xxx/Documents# docker volume create -d local test
test

ビュー/var/lib/docker /volumesのパスの、あなたが作成したボリュームの位置データを検索します。

root@slave1:/home/xxx/Documents# ls -l /var/lib/docker/volumes
-rw------- 1 root root 32768 9月  10 11:04 metadata.db
drwxr-xr-x 3 root root  4096 9月  10 11:04 test

加えて、createサブコマンド外、docker volumeもサポートinspect(詳細)、 ls(リスト利用可能なデータ量)を、 prune(洗浄、不要なデータのボリュームをアップ) rm(削除等、データ量)

root@slave1:/home/xxx/Documents# docker volume inspect test  #数据卷查看详细信息
[
    {
        "CreatedAt": "2019-09-10T11:04:12+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/test/_data",
        "Name": "test",
        "Options": {},
        "Scope": "local"
    }
]
root@slave1:/home/xxx/Documents# docker volume ls  #列出已有数据卷
DRIVER              VOLUME NAME
local               8ed823897243d9ef96538d5362760c81c8612e7a35380dfb599178e612325b93
local               test

データ容量結合
以外volumeのサブコマンドのデータ量だけでなく、データボリュームとして容器内の任意のパスをマウントするローカルホストは、このフォームを作成するためのデータ量がデータ量をバインディングと呼ばれるコンテナを作成することができます。timeコマンドは、使用することができますデータボリュームを使用するオプションを選択します。:オプションであって、データボリュームの三種類をサポートするポートホストにマッピングされた通常のデータ量、: パスのデータ量、指定されたパスにマッピングされたホストの結合; :一時データ・ボリューム、専用メモリ内に存在します。以下で使用するWebコンテナの画像を作成するために、そしてマウントするコンテナのデータボリュームを作成するディレクトリを:
docker [container] run-mount
- mount
volume/var/ lib /docke r /volumes
bind
tmpfs
training/webapp/opt/webapp

root@slave1:/home/xxx/Documents# docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py  #报错 不存在/webapp 使
用下面命令之后 再试一下

上記のコマンドは、古い使用するのと同じです-vタグは、コンテナ内のデータボリュームを作成することができます。

root@slave1:/home/xxx/Documents# docker run -d -P --name web -v /webapp:/opt/webapp training/webapp python app.py
Unable to find image 'training/webapp:latest' locally
latest: Pulling from training/webapp
e190868d63f8: Pull complete
909cd34c6fd7: Pull complete
0b9bfabab7c1: Pull complete
a3ed95caeb02: Pull complete
10bbbc0fc0ff: Pull complete
fca59b508e9f: Pull complete
e7ae2541b15b: Pull complete
9dd97ef58ce9: Pull complete
a4c1b0cb7af7: Pull complete
Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
Status: Downloaded newer image for training/webapp:latest
4bcc83dac6efb860a4590fb1c3540759876417714c52bb33a73013ec38414a1f

使用するtraining/webappミラーWEB1は、コンテナを作成してマウントするために、コンテナのデータボリュームを作成する/opt/webappディレクトリを:

root@slave1:/home/xxx/Documents# docker run -d -P --name web1 --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py
d7a066b7f5aaf384ac5871d50c94e4985107869b34129181d9ebd188f010501c

アプリケーションのテスト時間を作るこの機能は非常に便利である、例えば、ユーザーがローカルディレクトリに、プログラムやデータの数を置くことができ、リアルタイムで更新され、その後、コンテナ内で実行して使用されます。
さらに、ローカル・ディレクトリ・パスは、絶対にする必要があり、容器は、パスの相対パスであってもよいです。ディレクトリが存在しない場合は、ドッカーが自動的に作成されます。
ドッカー(許可データ量が読み込まれるデフォルトのマウントrw)、ユーザーは、することができro、読み取り専用に指定します:

root@slave1:/home/xxx/Documents# docker run -d -P --name d7a066b7f5aaf384ac5871d50c94e4985107869b34129181d9ebd188f010501c -v /webapp:/opt/webapp:ro training/webapp python app.py
ee35606b7e5dec26e544d60878f94137973c691ad0821a8604730a95f97f3863

彼は加えた:roその後、容器に装着され、データボリューム内のデータを変更することはできません。
ファイルコンテナに直接取り付けた場合は、ファイルには、ツールを編集しviたりsed - - in place、ファイルが原因となり、時間もinode変更します。ドッカー以降は1.1.0からは、このレポートには、エラーメッセージにつながります。したがって、推奨される方法は、直接コンテナにファイルディレクトリをマウントすることです。

データボリュームのコンテナ
ユーザーは、複数の容器の間で継続的に更新されるいくつかのデータを共有する必要がある場合は、最も簡単な方法は、データボリュームのコンテナを使用することです。データボリュームコンテナは、コンテナであるが、その目的は、他のコンテナをマウントする特殊なデータボリュームを提供することです。
まず、コンテナのデータボリュームを作成dbdataし、マウント・データ・ボリュームを作成します/dbdata

root@slave1:/home/xxx/Documents# docker run -it -v /dbdata --name dbdata ubuntu
root@257d18f2f4dd:/#

表示/dbdataカタログ:

root@257d18f2f4dd:/# ls
bin   dbdata  etc   lib    media  opt   root  sbin  sys  usr
boot  dev     home  lib64  mnt    proc  run   srv   tmp  var

その後、他の容器を使用することができる--volumes-from実装するdbdataよう作成などのデータボリューム・コンテナを、dbldb2するとの二つの容器dbdataコンテナは、データボリュームをマウントします。

root@slave1:/home/xxx/Documents# docker run -it --volumes-from dbdata --name db1 ubuntu
root@1709a48e760e:/# exit
exit
root@slave1:/home/xxx/Documents# docker run -it --volumes-from dbdata --name db2 ubuntu
root@94eeab14f62c:/# exit
exit

この場合、容器dblとはdb2同じにデータボリュームが搭載されている/dbdataディレクトリ、ディレクトリ内の3つの容器に書き込まれ、そして他の容器を見ることができるいずれか
dbdataコンテナを作成testファイル:

root@slave1:/home/xxx/Documents# docker start 94eeab14f62c   #启动db2容器
94eeab14f62c
root@slave1:/home/xxx/Documents# docker attach 94eeab14f62c  #进入容器
root@94eeab14f62c:/# ls                                      #查看目录
bin   dbdata  etc   lib    media  opt   root  sbin  sys  usr
boot  dev     home  lib64  mnt    proc  run   srv   tmp  var
root@94eeab14f62c:/# cd /dbdata                              #进入dbdata目录
root@94eeab14f62c:/dbdata# touch test                        #创建test文件
root@94eeab14f62c:/dbdata# ls
test

ではdbl1、コンテナ内のビューそれ:

root@slave1:/home/xxx/Documents# docker run -it --volumes-from dbdata --name 1709a48e760e ubuntu  #db1容器
root@6cc5d2d5ad79:/# ls
bin   dbdata  etc   lib    media  opt   root  sbin  sys  usr
boot  dev     home  lib64  mnt    proc  run   srv   tmp  var
root@6cc5d2d5ad79:/# cd dbdata
root@6cc5d2d5ad79:/dbdata# ls
test

あるいは、上記の使用attach入力するコマンドをdb1血管ビュー:

root@slave1:/home/xxx/Documents# docker start 1709a48e760e   #启动db1容器
1709a48e760e
root@slave1:/home/xxx/Documents# docker attach 1709a48e760e
root@6cc5d2d5ad79:/# ls
bin   dbdata  etc   lib    media  opt   root  sbin  sys  usr
boot  dev     home  lib64  mnt    proc  run   srv   tmp  var
root@6cc5d2d5ad79:/# cd dbdata
root@6cc5d2d5ad79:/dbdata# ls
test

注意:使用してattachコンテナに入るとき、あなたはそれ以外の場合は、次のヒントを表示され、コンテナを起動する必要があります。

root@slave1:/home/xxx/Documents# docker attach 1709a48e760e
You cannot attach to a stopped container, start it first

繰り返し使用することができる--volumes-from容器の複数のデータボリュームを複数搭載するパラメータを、他の容器のボリュームから取り付けることができる容器のデータボリュームをマウントすることでした

root@slave1:/home/xxx/Documents# docker run -d --name db3 --volumes-from db1 training/postgres
Unable to find image 'training/postgres:latest' locally
latest: Pulling from training/postgres
a3ed95caeb02: Pull complete
6e71c809542e: Pull complete
2978d9af87ba: Pull complete
e1bca35b062f: Pull complete
500b6decf741: Pull complete
74b14ef2151f: Pull complete
7afd5ed3826e: Pull complete
3c69bb244f5e: Pull complete
d86f9ec5aedf: Pull complete
010fabf20157: Pull complete
Digest: sha256:a945dc6dcfbc8d009c3d972931608344b76c2870ce796da00a827bd50791907e
Status: Downloaded newer image for training/postgres:latest
c06bced08bd6946ce2167eb7f02dcf3da796c540b0eafb380951d57a3ae4ecd2

使用して、なお--volumes-from実行状態を保持マウントする必要はありませんコンテナ自体のデータ量のパラメータを。
あなたは含めて取り付けられたコンテナを(削除した場合dbdatadb ``和DB2 ),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用ドックER RMは、関連するコンテナを指定するには、コマンドを削除-V`
コンテナのデータ量を使用して、ユーザーが自由に、以下の特定の操作をコンテナ間のデータボリュームを移動し、アップグレードすることができます。
データを移行するデータのボリューム・コンテナを使用して
容器容積達成するために前記データのバックアップ、リカバリ、データマイグレーションのデータボリュームを使用します。

1)バックアップする
バックアップするために、以下のコマンドを使用して、dbdataデータボリューム・コンテナ内のデータ量:

root@slave1:/home/xxx/Documents# docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata

まず、コンテナの労働者を使用するUbuntuのミラーを作成します。使用--volumes-from dbdata容器ワーカー取り付けられるようにパラメータをdbdata容器の容積データ(すなわち、dbdataデータ容量);使用-v$ (pwd) : /bac kup/バックアップディレクトリコンテナ者にローカルカレントディレクトリをマウントするパラメータ。
容器は使用、ワーカーを開始した後tar cvf /backup/backup.tar /dbdataにコマンドを/dbdata容器内のバックアップコンテンツ/backup/backup. tar、すなわち、現在のディレクトリホームホスト、backup.tar

2)回復
最初のデータの容量を有する容器を作成し、コンテナにデータを復元しますdbdata2

root@slave1:/home/xxx/Documents# docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

その後、別の新しいコンテナを作成マウントしdbdata2た容器を使用し、untarコンテナ内のマウントされたボリュームにバックアップファイルを解凍します。

root@slave1:/home/xxx/Documents# docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
7c9d20b9b6cd: Pull complete
Digest: sha256:fe301db49df08c384001ed752dff6d52b4305a73a7f608f21528048e8a08b51e
Status: Downloaded newer image for busybox:latest
dbdata/
dbdata/test

動作中のコンテナの障害は、ユーザーが損失が発生したデータを心配する必要がない場合でも、データ量やコンテナやその他のデータ共有、バックアップ中にコンテナのデータボリュームとすることにより、これらのメカニズムによって、復元操作、唯一素早くすることができ、コンテナを再作成する必要があります。

3コンテナポートマッピングの相互接続

実際には、多くの場合、状況は複数のサービスコンポーネントが一緒に、多くの場合、他のサービスに複数の容器の間で相互にアクセスできるようにする必要があるコンテナを、働く必要が発生しました。ドッカーネットワークアクセスを介して、より外側だけでなく、サービスアクセスの基本的なニーズを満たすために2つの非常に便利な機能を提供する:マッピング・サービス・アプリケーションは、コンテナのローカルホストのポートへのホストを可能にするためであり、他は複数の容器との間の相互接続を達成するための機構でありますコンテナ名への迅速なアクセス。
容器のアクセスポートのマッピング
1)コンテナにアクセスする外部印加
対応するパラメータが指定されていない場合、コンテナを起動中は、外側容器は、ネットワークを介して容器内のネットワークサービスとアプリケーションにアクセスすることができません。いくつかのネットワークアプリケーションは、コンテナで実行している場合、外部からのアクセスにそれらを聞かせてもよいし、-P -pパラメータ参照するには
設定されたポートマッピングを。

root@slave1:/home/xxx/Documents# docker run -d -P training/webapp python app.py
419bf896b24023396c411dc6e9718c415505f69184fa807074b4a9b0eeec7ab3
root@slave1:/home/zyy/Documents# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
419bf896b240        training/webapp     "python app.py"     9 seconds ago       Up 7 seconds        0.0.0.0:32771->5000/tcp   hardcore_shamir

ことができますdocker ps見られること、ローカルホストの32771は、容器のポート5000にマッピングされています。提供される容器にWebアプリケーションにアクセスするためのホストポートホスト・インターフェースとの間の32771回の訪問。
また、あなたができるdocker logsコマンドのアプリケーションに関する情報を表示します。

root@slave1:/home/xxx/Documents# docker logs -f hardcore_shamir
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

注意:-pあなたがマップするポートを指定することができ、かつ、指定されたポート上でのみコンテナをバインドすることができます。サポートされているフォーマットがありますIP:HostPort:ContainerPortIIP:: ContainerPortIHostPort:ContainerPort

2)すべてのインタフェースアドレスマッピング
用いHostPort:ContainerPort容器ポート5000、ポート5000形式ローカルマッピングを、次のコマンドを実行します。

root@slave1:/home/xxx/Documents# docker run -d -p 5000:5000 training/webapp python app.py
2ebb57dad1d4430133f56c8a9e238b9c0622d4036c2fd063fd01cc2d8de70e5d

このとき、デフォルトではすべてのインターフェイス上のすべてのローカルアドレスをバインドします。使用する複数の-pマーカーは、複数のポートにバインドすることができます。例えば:

docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py

3)指定されたポートにアドレス指定
を使用することができるIP:HostPart:ContainerPortようなアドレスローカルホストとして特定のアドレスマップを指定するために使用されるフォーマット127.0.0.1

docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

4)任意のポートが指定されたアドレスにマッピングされ

使用してIP::ContainerPort任意のポートに結合localhostのポート5000を、ローカルホストは自動的に容器ポートが割り当てられています。

root@slave1:/home/xxx/Documents# docker run -d -p 127.0.0.1::5000 training/webapp python app.py
13c8e9e5123b6731c91b7e60cd95050d8067dd23420c828cb7508ee711320170

また、使用することができますudp指定するタグをudpポート:

root@slave1:/home/xxx/Documents# docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
2f0c22deff8877fe1b711446e536edee1117a4e27b4b00f2e8787267d18a3059

5)ポートマッピングの設定を確認してください

使用するdocker port現在のポート設定のマッピングを表示するために、あなたはまた、アドレスバインディングを表示することができます。

root@slave1:/home/xxx/Documents# docker port hardcore_shamir 5000
0.0.0.0:32771

加えて、容器は使用し、それ自身の内部ネットワークとIPアドレスを持っているdocker [container] inspect+容器ID固有の情報は、コンテナを得ることができます。

インターネットメカニズムは、迅速な訪問を達成するために
相互接続コンテナはそれ以上の容器を使用して、対話するための簡単な方法を実行してみましょうアプリケーションである(リンク)を。これは、ソースとの関係を接続された受信機との間で、レセプタクルは、特定のIPアドレスを指定せずに、コンテナ名でソース・コンテナに素早くアクセスすることができます作成されます。
後1)カスタムコンテナ
接続システムは、コンテナの名前に基づいて行われます。まず、キャッチーな名前にコンテナをカスタマイズする必要があります。コンテナが作成された時間が、システムはデフォルトの名前を割り当てますが、カスタムの名前付けコンテナは、2つの利点があります
-一目で、それに名前ウェブを与えることができ、このようなWebアプリケーションコンテナとして、覚えて、より簡単に、カスタムの名前;
-とき(でも再起動)するとき、別の容器に接続するために、あなたは、このようなWebコンテナのデシベルコンテナに接続するよう、容器の名前を変更することなく使用することができます。

使用する--nameカスタム名前を付けることができますラベル付きの容器を:

root@slave1:/home/xxx/Documents# docker run -d -P --name web training/webapp python app.py
511678ee937939e33c935d364375edc3b61acd3e299c6b2b63e65b2a2523f48a

使用するdocker psセットの名前を確認するには:

root@slave1:/home/xxx/Documents# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                     NAMES
511678ee9379        training/webapp     "python app.py"     About a minute ago   Up About a minute   0.0.0.0:32772->5000/tcp   web

また、使用docker [container) inspect船舶の名前を見て:

root@slave1:/home/xxx/Documents# docker  inspect -f "{{.Name}}" 511678ee9379 
/web

注意:コンテナの名前は一意です。あなたがウェブと呼ばれる名前の付けられた容器を持っている場合は、再度、ウェブ名を使用したい場合、あなたは使用する必要がdocker rm削除するには、コマンドの前にコンテナによって作成された同じ名前を。
2)相互接続された容器
用いた--linkパラメータは、安全容器との間の相互作用を可能にします。新しいデータベースコンテナを作成します。

root@slave1:/home/xxx/Documents# docker run -d --name db training/postgres
048e7b6c61e9ec56e0462c5076d09d00255d932c380bfc4c9127958143777e42

root@slave1:/home/xxx/Documents# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
048e7b6c61e9        training/postgres   "su postgres -c '/us…"   About a minute ago   Up About a minute   5432/tcp            db

以前に作成したWebコンテナを削除します。

root@slave1:/home/xxx/Documents# docker rm -f web
web

新しいWebコンテナを作成し、DBコンテナにそれを接続します。

root@slave1:/home/xxx/Documents# docker run -d -P --name web --link db:db training/webapp python app.py
e88a580668bc18733f6f685817430b37e8f072a1aaf08462f7cb3c0dc3c9fc3b

インターネット関係のこの時点で、DBコンテナとWebコンテナの作成。--linkフォーマットパラメータ--link name: alias名は、コンテナをリンクするための名前である、別名は別名です。今使用してdocker ps接続した容器を表示します:

root@slave1:/home/xxx/Documents# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMES
e88a580668bc        training/webapp     "python app.py"          2 minutes ago       Up About a minute   0.0.0.0:32773->5000/tcp              web
048e7b6c61e9        training/postgres   "su postgres -c '/us…"   5 minutes ago       Up 5 minutes        5432/tcp                             db

カスタムという名前のコンテナを参照してください:デシベルとウェブ、名デシベルデシベルコンテナリストは、Web / DBです。これは、DBコンテナにリンクされているWebコンテナ、Webコンテナは、情報DBコンテナへのアクセスを許可されることを意味します。
2つの相互接続された容器との間ドッカー当量は、仮想マシン・チャネルを作成し、そのホスト上のホストポートにマッピングされていません。これは、スタートアップデシベルコンテナで使用していませんでした-pし、-Pため、外部ネットワークへの曝露データベースサービスポートを避け、マーク。
ドッカーには2つの方法でコンテナの接続情報を開示している:
経口更新、環境変数、
口の更新/etc/hostsファイル。
使用するenvWebコンテナ環境変数を表示するためのコマンドを:

root@slave1:/home/xxx/Documents# docker run --rm --name web2 --link db:db training/webapp env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=226b133d997a
DB_PORT=tcp://172.17.0.2:5432
DB_PORT_5432_TCP=tcp://172.17.0.2:5432
DB_PORT_5432_TCP_ADDR=172.17.0.2
DB_PORT_5432_TCP_PORT=5432
DB_PORT_5432_TCP_PROTO=tcp
DB_NAME=/web2/db
DB_ENV_PG_VERSION=9.3
HOME=/root

Webコンテナの始まりのための環境変数が接続されている、請求DB_デシベルの容器は、大文字の接続エイリアスを付けます。環境変数に加えて、ドッカーもホスト親コンテナに情報を追加する/etc/hostsファイル。ここでは、ウェブ親コンテナでhostsファイル:

root@slave1:/home/xxx/Documents# docker run -t -i --rm --link db:db training/webapp /bin/bash
root@e9e98e537bec:/opt/webapp# cat /etc/hosts
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.17.0.2    db b3c84640e83a
172.17.0.4    e9e98e537bec

二つのホスト情報がありますが、DBはIPとホスト名の最初の容器であり、第二は、Webコンテナ、デフォルトのホスト名と、自分のIDを持つWebコンテナです。
ウェブは、容器内に設置してもよいping容器DBをテストするためのコマンドと通信します。

root@e9e98e537bec:/opt/webapp# apt-get install -yqq inetutils-ping
(Reading database ... 18233 files and directories currently installed.)
Removing ubuntu-minimal (1.325) ...
Removing iputils-ping (3:20121221-4ubuntu1.1) ...
Selecting previously unselected package inetutils-ping.
(Reading database ... 18221 files and directories currently installed.)
Preparing to unpack .../inetutils-ping_2%3a1.9.2-1_amd64.deb ...
Unpacking inetutils-ping (2:1.9.2-1) ...
Setting up inetutils-ping (2:1.9.2-1) ...
root@e9e98e537bec:/opt/webapp# ping db
PING db (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: icmp_seq=0 ttl=64 time=0.528 ms
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.193 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.112 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.207 ms
64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.114 ms
64 bytes from 172.17.0.2: icmp_seq=5 ttl=64 time=0.175 ms
64 bytes from 172.17.0.2: icmp_seq=6 ttl=64 time=0.115 ms
64 bytes from 172.17.0.2: icmp_seq=7 ttl=64 time=0.113 ms
64 bytes from 172.17.0.2: icmp_seq=8 ttl=64 time=0.114 ms
64 bytes from 172.17.0.2: icmp_seq=9 ttl=64 time=0.115 ms
64 bytes from 172.17.0.2: icmp_seq=10 ttl=64 time=0.115 ms
64 bytes from 172.17.0.2: icmp_seq=11 ttl=64 time=0.222 ms
64 bytes from 172.17.0.2: icmp_seq=12 ttl=64 time=0.287 ms
64 bytes from 172.17.0.2: icmp_seq=13 ttl=64 time=0.116 ms
64 bytes from 172.17.0.2: icmp_seq=14 ttl=64 time=0.210 ms
64 bytes from 172.17.0.2: icmp_seq=15 ttl=64 time=0.115 ms
^C--- db ping statistics ---
16 packets transmitted, 16 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.112/0.178/0.528/0.105 ms

使用pingデシベルコンテナをテストするために、それは172.17.0.2に解決されます。ユーザーは、ウェブの複数の同じ容器DBに連結することができるように親血管、サブ複数の容器をリンクすることができます。
本番環境では、ネットワークの需要がクロスも、ホスト通信、データセンター全体で、この時間は、多くの場合、SDN(ソフトウェアネットワーク定義)またはNFV(ネットワーク機能の仮想化)などの追加のメカニズムを導入する必要があるなど、より複雑かつ多様です関連する技術。
以下のサブセクションでは、さらにどのように探求するlibnetworkホスト間通信、ドッカーネットワークを実現するために、コンテナの高度な機能と構成を。

おすすめ

転載: www.cnblogs.com/eugene0/p/11503455.html