ドッカーデータ管理と通信ネットワーク

A、ドッカーデータ管理
ドッカーでは、データ共有との間の容器の容器又は複数の中に生成されたデータを簡単に表示するため、データ管理コンテナ、主に2つの方法でデータ管理ドッカーコンテナの動作を含みます:データボリュームとデータボリュームのコンテナ。

1は、データボリューム
のデータボリュームは、コンテナの使用のための特別なディレクトリであり、容器、ホストのディレクトリは、データボリューム上の変更操作直ちに可視データボリュームに取り付けられてもよいし、更新され、その結果、画像データに影響を与えませんローカルホストは、ディレクトリが容器に装着されている、例えば:マウントデータボリューム操作は、Linux(音符のディレクトリに類似しているマウント使用して、ホストと容器との間のデータの移行を実現ローカルホストの場合搭載されている/データディレクトリがあるの/ dev / sdb1が、あなたは、ファイルシステムを使用して、データボリュームマッピング、コンテナは指定されたディレクトリでは、/ dev / sdb1が、私が説明するのか分からない場合は、あなたがそれを理解できないん/データにしたいですそれは)動作します。

例えば、データボリュームとしてカタログホストをマウントします。

ホストと容器との間でデータを移動するために使用されるデータボリューム上にマウントするホストのカタログのデータボリュームを作成し、(コンテナを実行している場合のみ、ディレクトリを作成する)データボリュームを作成するために使用する-vオプション。

パスが存在しない場合は、ホストのローカルディレクトリのパスは、絶対パスでなければなりません、ドッカーが自動的に適切なパスを作成することに留意すべきです。

[root@localhost ~]# docker run -d -p 5000:5000 -v /data/registry/:/tmp/registry docker.io/registry
#这是运行了一个私有仓库的容器,其中-p是端口映射的选项,这里不做解释。
# -v才是目录映射,将本地/data/registry/目录映射到容器中的/tmp/registry目录。
#然后容器中的/tmp/registry目录下的内容就和宿主机的/data/registry/内容一样了。
[root@localhost ~]# df -hT /data/registry/           #先查看本地/data/registry/ 挂载的文件系统
文件系统         类型            容量  已用  可用 已用% 挂载点
node4:dis-stripe fuse.glusterfs   80G  130M   80G    1% /data/registry
[root@localhost ~]# docker exec -it a6bf726c612b /bin/sh #进入私有仓库的容器中,该容器没有/bin/bash,所以使用的是/bin/sh。
/ # df -hT /tmp/registry/    #查看发现,该目录挂载的和宿主机挂载的文件系统是同一个,说明没问题。
Filesystem           Type            Size      Used Available Use% Mounted on
node4:dis-stripe     fuse.glusterfs
                                    80.0G    129.4M     79.8G   0% /tmp/registry

図2に示すように、容器のボリュームデータ
の一部のデータコンテナ間で共有する必要がある場合、最も簡単な方法は、コンテナのデータボリュームを使用することです。データボリューム・コンテナは、具体的に使用される他の容器を取り付けるためにデータボリュームを提供し、通常の容器です。使用することは、次のとおりです。まず、作成した際にデータ量が--volumes-から他のコンテナとボリューム・コンテナをマウントした後にデータを使用して、容器の容積データとしてコンテナを作成する必要が。

例えば、容器のボリュームの作成と使用、:

[root@localhost ~]# docker run -itd --name datasrv -v /data1 -v /data2  docker.io/sameersbn/bind /bin/bash
#创建运行一个容器,容器名为datasrv,并创建两个数据卷:data1和data2。
d9e578db8355da35637d2cf9b0a3406a647fe8e70b2df6172ab41818474aab08
[root@localhost ~]# docker exec -it datasrv /bin/bash     #进入创建的容器
root@d9e578db8355:/# ls | grep data             #查看是否有对应的数据卷
data1
data2
[root@localhost ~]# docker run -itd --volumes-from datasrv --name ftpsrv docker.io/fauria/vsftpd /bin/bash
#运行一个名为ftpsrv的容器,使用--volumes-from来将datasrv容器中的数据卷挂载到这个ftpsvr新容器上。
eb84fa6e85a51779b652e0058844987c5974cf2a66d1772bdc05bde30f8a254f
[root@localhost ~]# docker exec -it ftpsrv /bin/bash         #进入新创建的容器
[root@eb84fa6e85a5 /]# ls | grep data          #查看新的容器是否可以看到datasrv提供的数据卷
data1
data2
[root@eb84fa6e85a5 /]# echo " data volumes test" > /data1/test.txt       #在ftpsrv容器中向data1目录写入文件进行测试
[root@eb84fa6e85a5 /]# exit          #退出该容器
exit
[root@localhost ~]# docker exec -it datasrv /bin/bash     #进入提供数据卷的datasrv容器
root@d9e578db8355:/# cat /data1/test.txt            #可以看到刚在ftpsrv容器创建的文件,OK。
 data volumes test

本番環境にはほとんど注意がメモリの信頼性で、かつ動的にスケーラブルなストレージのデータボリュームをやったときに、この点では、このことを考慮してくださいすることはGFSファイルシステムの数にもより顕著であることに注意してください、私の上本番環境では、我々は慎重に検討する必要がある場合は、まさにこのような容器のミラーボリューム上にそれを作るように、簡単な設定を行う際には、ローカルホスト上のGFSファイルシステムをマウントした後、ミラーボリュームのコンテナを作成することができGFSをマウントされますそれは、資格のあるミラーボリュームのコンテナであるように、ミラーボリュームのディレクトリは、コンテナにマッピングされています。

二つ、ドッカー通信ネットワーク
1、ポートマッピング
ドッカーは、コンテナにネットワークサービスを提供するためにホストの相互接続機構に容器と容器口のマップを提供します。

コンテナの起動時に対応するポートが指定されていない場合、容器の外部ネットワークを介して容器内のサービスにアクセスすることができません。外部ネットワークがホストにアクセスするように、基本的に容器にホストポートをマッピングし、外部ネットワークへのアクセスを提供するために、コンテナ内のサービスを提供するために、ドッキングウィンドウポートマッピングメカニズムにおけるコンテナ港へのサービスにアクセスできます。

ポートマッピングを達成するために、あなたがドッキングウィンドウrunコマンド実行時に使用する必要がある-P(大文字)ランダムマッピングを達成するためのオプション、ドッカーは、通常のコンテナ港のオープンネットワークポート49000〜49900の内部にランダムなポートへのアクセスにマッピングされたのが、絶対ではないが、そこにマップされることはありません、この範囲には例外があり、あなたがドッキングウィンドウrunコマンドの実行時にも使用することができます-p(小文字)オプションをマップする指定したポートを達成するために(多くの場合、このメソッドを使用します)。

ポートマッピングの例:

[root@localhost ~]# docker run -d -P docker.io/sameersbn/bind      #随机映射端口
9b4b7c464900df3b766cbc9227b21a3cad7d2816452c180b08eac4f473f88835
[root@localhost ~]# docker run -itd -p 68:67 docker.io/networkboot/dhcpd /bin/bash
#将容器中的67端口映射到宿主机的68端口
6f9f8125bcb22335dcdb768bbf378634752b5766504e0138333a6ef5c57b7047
[root@localhost ~]# docker ps -a     #查看发现没问题咯
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                                                                    NAMES
6f9f8125bcb2        docker.io/networkboot/dhcpd   "/entrypoint.sh /b..."   2 seconds ago       Up 1 second         0.0.0.0:68->67/tcp                                                       keen_brattain
9b4b7c464900        docker.io/sameersbn/bind      "/sbin/entrypoint...."   4 minutes ago       Up 4 minutes        0.0.0.0:32768->53/udp, 0.0.0.0:32769->53/tcp, 0.0.0.0:32768->10000/tcp   coc_gates
#此时,访问宿主机的68端口就相当于访问第一个容器的67端口;访问宿主机的32768端口,就相当于访问容器的53端口。

図2は、容器配線
容器相互接続ネットワークは、コンテナの名前を介して容器との間の通信を可能にする特別なネットワーク・トンネルを確立しています。簡単に言えば、つまり、ソースとコンテナはコンテナが指定した情報ソースを見ることができる受信器の受信との間にトンネルを構築します。

ときにドッキングウィンドウの実行runコマンド、容器との間のオプション--link相互接続された通信を使用して、次の形式:

--link name: alias    #其中name是要连接的容器名称,alias是这个连接的别名。

同じ名前の容器を命名している場合は、もう一度その名前を使用する場合、コンテナにフレンドリ名を作成するには、nameオプションは、名前がユニークで、必要性-コンテナの相互接続は、容器の名によって行われます最初の使用のドッキングウィンドウのrmコマンドは、以前に作成した同じ名前のコンテナを削除します。
コンテナ相互接続の例:

[root@localhost ~]# docker run -tid -P --name web1  docker.io/httpd /bin/bash    #运行容器web1
c88f7340f0c12b9f5228ec38793e24a6900084e58ea4690e8a847da2cdfe0b
[[root@localhost ~]# docker run -tid -P --name web2 --link web1:web1 docker.io/httpd /bin/bash
#运行容器web2,并关联web1容器
c7debd7809257c6375412d54fe45893241d2973b7af1da75ba9f7eebcfd4d652
[root@localhost ~]# docker exec -it web2 /bin/bash     #进入web2容器
root@c7debd780925:/usr/local/apache2# cd
root@c7debd780925:~# ping web1        #对web1进行ping测试
bash: ping: command not found        #sorry,提示没有ping命令,下载一个咯
root@c7debd780925:~#apt-get update    #更新一下
root@c7debd780925:~#apt install iputils-ping     #安装ping命令
root@c7debd780925:~#apt install net-tools      #这个是安装ifconfig命令,可以不安装,我这里只是做个笔记
root@c7debd780925:~# ping web1     #再对web1进行ping测试
PING web1 (172.17.0.2) 56(84) bytes of data.
64 bytes from web1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.079 ms
64 bytes from web1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.114 ms
              ..............#省略部分内容
#ping通了,所以可以说这两个容器肯定是互联的咯
#若此时又创建了web3这个新容器,要同时和web1、web2进行互联,命令如下:
[root@localhost ~]# docker run -dit -P --name web3 --link web1:web1 --link web2:web2 docker.io/httpd /bin/bash
#运行容器时,关联web1和web2。
#以下是进入web3
[root@localhost ~]# docker exec -it web3 /bin/bash
root@433d5be6232c:/usr/local/apache2# cd
#以下是安装ping命令
root@433d5be6232c:~# apt-get update
root@433d5be6232c:~# apt install iputils-ping
#以下是分别对web1,web2进行ping测试
root@433d5be6232c:~# ping web1
PING web1 (172.17.0.2) 56(84) bytes of data.
64 bytes from web1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.102 ms
64 bytes from web1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.112 ms
              ..............#省略部分内容
root@433d5be6232c:~# ping web2
PING web2 (172.17.0.3) 56(84) bytes of data.
64 bytes from web2 (172.17.0.3): icmp_seq=1 ttl=64 time=0.165 ms
64 bytes from web2 (172.17.0.3): icmp_seq=2 ttl=64 time=0.115 ms
              ..............#省略部分内容

おすすめ

転載: blog.51cto.com/14227204/2454438