您现在的位置是:首页 > 文章详情

Docker基础之八: 容器的网络

日期:2015-12-13点击:645

容器的网络

对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面。

根据之前的教程我们只是运行了简单的应用程序。之前我们编译了自己的image,在本节中我们将讲述如何管理容器的网络。

1 容器命名

如果你仔细查看docker ps的输出,你会看到docker自动生成了容器的名称:

root@gctest:~/.ghostcloud/bin# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 09475612bb40 ghostcloud.cn:5005/gcali:1.0.8 "/usr/local/ghostclou" 2 minutes ago Up 2 minutes gcsagent f8eb8005de81 myimage "/bin/sh -c 'echo 'he" 15 minutes ago Exited (0) 15 minutes ago compassionate_cray 46ffa55f5680 ubuntu "/bin/bash" 37 minutes ago Exited (0) 29 minutes ago lonely_mirzakhani 40b4301839a1 ubuntu "echo hello-world" 40 minutes ago Exited (0) 40 minutes ago compassionate_torvalds 

compassionate_cray就是一个名称。通过容器命令,可以提供两个有用的功能:

  • 默认你是通过容器的ID进行操作,你可以为特定容器设置容器名称,比如如果容器是一个web应用,你可以把它标记为web。
  • 容器之间,可以通过名称进行相互的引用和链接.

容器的名称通过--name来进行设置:

$ docker run -d -P --name web training/webapp python app.py 

我们可以通过docker inspect来查看容器的详细参数:

``` ##2 容器的默认网络 Docker自身通过网络驱动来管理网络。默认Docker提供两种网络驱动,bridge和overlay。你可以自己编写网络驱动作为插件,但是这个工作比较麻烦,这儿就省略了。 Docker安装后,会自动生成3种网络: 

root@gctest:~# docker network ls NETWORK ID NAME DRIVER 782f465fa194 none null 6887a082de45 host host 6e75573f448f bridge bridge

bridge是一种特殊的网络模式,这是默认的网络模式。我们可以通过inspect来查看详细信息: ```Bash root@gctest:~# docker network inspect bridge [ { "Name": "bridge", "Id": "6e75573f448f525f4edc07be25318af82f3a2c79640aa00eb403208583d542f3", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ { "Subnet": "172.17.0.1/16", "Gateway": "172.17.0.1" } ] }, "Containers": { "85a568452350d44a467802383308b318a9bb79301714913d7df7a54bfc770567": { "EndpointID": "48fbb1fa53db756cc4afdf4db81182bd4347bf208dba49ed27c3187ea2d6c8c0", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" } }, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" } } ] 

从上面我们可以看出,桥接的网卡是172.17.0.1/16,网关是172.17.0.1。其中有一个容器连接到了这个桥接网络中,它的ip是172.17.0.2/16。 如果你想将容器从网络中移除,你可以使用:

root@gctest:~# docker network disconnect bridge 85a5 root@gctest:~# docker network inspect bridge [ { "Name": "bridge", "Id": "6e75573f448f525f4edc07be25318af82f3a2c79640aa00eb403208583d542f3", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ { "Subnet": "172.17.0.1/16", "Gateway": "172.17.0.1" } ] }, "Containers": {}, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" } } ] 

3 创建自己的桥接网络

Docker原生支持bridge和overlay网络,bridge只能在单个主机上使用。overlay可以在多台主机间使用,这部分将在后续进行详细讲解。下面我们就来建立一个自己的网络:

root@gctest:~# docker network create -d bridge mybridge 36328af2a0b1cf04c7f13254804abbea81b32cc0361b4407fb68e9f70b8ce6a9 root@gctest:~# docker network ls NETWORK ID NAME DRIVER 6e75573f448f bridge bridge 782f465fa194 none null 6887a082de45 host host 36328af2a0b1 mybridge bridge 

-d表示使用已有的bridge来创建新的网络,你也可以省略该参数,这个是默认参数。

4 添加容器到网络

默认情况,容器使用的是同一个bridge网络,这样可能有一定的安全隐患,为了做到完全的隔离,我们可以自己建一个桥接网络,然后在启动容器时将容器加入到自己的网络中。比如:

root@gctest:~# docker run -it --net=mybridge ubuntu /bin/bash 

如果你inspect你的网络,你会看到详细的连接信息:

root@gctest:~/.ghostcloud/bin# docker network inspect mybridge [ { "Name": "mybridge", "Id": "36328af2a0b1cf04c7f13254804abbea81b32cc0361b4407fb68e9f70b8ce6a9", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ {} ] }, "Containers": { "2c1fda7b6efda429d2bf7c85a131200ee370512cea214a7fe423c28d952e1320": { "EndpointID": "1b988bffa26ca9e6ee3cbfc5081b8adb5dcb5cde359404ff6afb73fb954a2b93", "MacAddress": "02:42:ac:12:00:03", "IPv4Address": "172.18.0.3/16", "IPv6Address": "" }, "85a568452350d44a467802383308b318a9bb79301714913d7df7a54bfc770567": { "EndpointID": "0440158825ce6c1e6efc224238ab83084761a9c2e6fa28f162d2188e514aa737", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" } }, "Options": {} } ] 

如果启动时没有指定网络或想加入多个网络,可以通过connect命令加入。

原文链接:https://yq.aliyun.com/articles/137
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章