使用 Docker 容器网络

RebbecaSach 8年前
   <h2><strong>Docker 容</strong>器网络概述</h2>    <p>要构建具有安全的一致行为的 Web 应用程序,可以使用 Docker 网络特性。根据定义,网络为容器实现了完全隔离。因此,控制您的应用程序所在的网络很重要。Docker 容器网络为您提供了这种控制能力。</p>    <p>本节将概述 Docker 引擎原生提供的默认网络行为,介绍默认创建的网络类型,以及如何创建您自己的、用户定义的网络。</p>    <h2><strong>默认网络</strong></h2>    <p>安装 Docker 时,它会自动创建 3 个网络。可以使用 <strong>docker network ls</strong> 命令列出这些网络。</p>    <pre>  $ docker network ls    NETWORK ID          NAME                DRIVER    7fca4eb8c647        bridge              bridge    9f904ee27bf5        none                null    cf03ee007fb4        host                host</pre>    <p>这 3 个网络包含在 Docker 实现中。运行一个容器时,可以使用 <strong>the --net</strong> 标志指定您希望在哪个网络上运行该容器。您仍然可以使用这 3 个网络。</p>    <ul>     <li>bridge 网络表示所有 Docker 安装中都存在的 docker0 网络。除非使用 <strong>docker run --net=<NETWORK></strong> 选项另行指定,否则 Docker 守护进程默认情况下会将容器连接到此网络。在主机上使用 <strong>ifconfig</strong> 命令,可以看到此网桥是主机的网络堆栈的一部分。</li>     <li>none 网络在一个特定于容器的网络堆栈上添加了一个容器。该容器缺少网络接口。</li>     <li>host 网络在主机网络堆栈上添加一个容器。您可以发现,容器中的网络配置与主机相同。</li>    </ul>    <h2><strong>用户定义的网络</strong></h2>    <p>您可以创建自己的用户定义网络来更好地隔离容器。Docker 提供了一些默认网络驱动程序来创建这些网络。您可以创建一个新 bridge 网络或覆盖一个网络。也可以创建一个网络插件或远程网络并写入您自己的规范中。</p>    <p>您可以创建多个网络。可以将容器添加到多个网络。容器仅能在网络内通信,不能跨网络进行通信。一个连接到两个网络的容器可与每个网络中的成员容器进行通信。当一个容器连接到多个网络时,外部连接通过第一个(按词典顺序)非内部网络提供。</p>    <h2><strong>在 Power 上创建一个覆盖 Docker 网络</strong></h2>    <p>Docker 默认情况下会创建一个与 <strong>docker0</strong> 网桥对应的 bridge 网络。您也可以创建自己的网络。 <strong>docker network</strong> 命令有许多选项可用来管理网络。</p>    <pre>  [root@localhost ~]# docker network create test-network    e2f569d57eb8506602fdfc3e8a20b12073782dcfd6046ce4ef76de8db3275d21      [root@localhost ~]# docker network inspect test-network    [       {           "Name": "test-network",           "Id": "e2f569d57eb8506602fdfc3e8a20b12073782dcfd6046ce4ef76de8db3275d21",           "Scope": "local",           "Driver": "bridge",           "IPAM": {               "Driver": "default",               "Config": [                   {}               ]           },           "Containers": {},           "Options": {}       }    ]      [root@localhost ~]# docker network ls    NETWORK ID          NAME                DRIVER    e12f674fea62        bridge              bridge                 0151f24befe9        host                host                   e2f569d57eb8        test-network        bridge                 e72a1d986a84        none                null</pre>    <p>另外,还可以采用其他一些选项,比如 <strong>--subnet</strong> 、 <strong>--gateway</strong> 和 <strong>--ip-range</strong> 。可以使用 <strong>docker network – help</strong> 或 <strong>docker network [COMMAND] – help</strong> 命令查看更多信息。</p>    <p>可以通过在创建容器时显式提及某个网络,从而将该容器连接到该网络。</p>    <pre>  [root@localhost ~]# docker run -itd --name=test1 --net=test-network ppc64le/busybox /bin/sh    7699fe682353835166482d1416a70f0361ddf88940bd7102e2f84f6d46b3d113    [root@localhost ~]# docker network inspect test-network    [       {           "Name": "test-network",           "Id": "e2f569d57eb8506602fdfc3e8a20b12073782dcfd6046ce4ef76de8db3275d21",           "Scope": "local",           "Driver": "bridge",           "IPAM": {               "Driver": "default",               "Config": [                   {}               ]           },           "Containers": {               "7699fe682353835166482d1416a70f0361ddf88940bd7102e2f84f6d46b3d113": {                   "EndpointID": "cf1f3e319a1c1ec83c3eaf0d5380b9ee50c1f2d37e713425996ada6788f8e77a",                   "MacAddress": "02:42:ac:12:00:02",                   "IPv4Address": "172.18.0.2/16",                   "IPv6Address": ""              }           },           "Options": {}       }    ]</pre>    <p>也可以动态地将容器连接到网络。</p>    <pre>  [root@localhost ~]# docker run -itd --name=test2 ppc64le/busybox /bin/sh    69d79cddbdf8a920d24993bfc16e8d064479327d8cc23f10ae25e96a2b9b057a      [root@localhost ~]# docker network connect test-network test2    [root@localhost ~]# docker network inspect test-network    [       {           "Name": "test-network",           "Id": "e2f569d57eb8506602fdfc3e8a20b12073782dcfd6046ce4ef76de8db3275d21",           "Scope": "local",           "Driver": "bridge",           "IPAM": {               "Driver": "default",               "Config": [                   {}               ]           },           "Containers": {               "69d79cddbdf8a920d24993bfc16e8d064479327d8cc23f10ae25e96a2b9b057a": {                   "EndpointID": "5dc4877e71eca2243167e97153d56c5334d98991fcc3eb2f7f968d0b68416255",                   "MacAddress": "02:42:ac:12:00:03",                   "IPv4Address": "172.18.0.3/16",                   "IPv6Address": ""              },               "7699fe682353835166482d1416a70f0361ddf88940bd7102e2f84f6d46b3d113": {                   "EndpointID": "cf1f3e319a1c1ec83c3eaf0d5380b9ee50c1f2d37e713425996ada6788f8e77a",                   "MacAddress": "02:42:ac:12:00:02",                   "IPv4Address": "172.18.0.2/16",                   "IPv6Address": ""              }           },           "Options": {}       }    ]</pre>    <p> </p>    <p>来自:http://www.ibm.com/developerworks/cn/linux/l-docker-network/index.html?ca=drs-</p>    <p> </p>