前言

这篇笔记是 docker 官网教程 自定义 bridge 网络的实践。

用户自定义 bridge 网络是在生产环境中推荐到最佳方式,因此这篇教程要特别注意。

这个教程中,启动了2个 alpine 容器,将他们附着到用户自定义网络 alpine-net 。这些容器无法连接到默认到 bridge 网络。然后再启动第3个容器 alpine ,连接到默认 bridge 网络。第4个容器 alpine 连接到两个网络。

我正在学习Docker容器技术,相关笔记汇总在Docker容器技术 学习笔记汇总

1 创建 alpine-net 网络

# docker network create --driver bridge alpine-net
694e28e19bbc5083491ee0d5c75b6fc8aef6c4274582be9f5a7c0184abb8f087

2 列出网络

# docker network ls
NETWORK ID          NAME                        DRIVER              SCOPE
694e28e19bbc        alpine-net                  bridge              local
02231307198a        bridge                      bridge              local
81b1d878dd80        host                        host                local
194a422ad895        none                        null                local

查看网络 alpine-net

# docker network inspect alpine-net
[{"Name": "alpine-net","Id": "694e28e19bbc5083491ee0d5c75b6fc8aef6c4274582be9f5a7c0184abb8f087","Created": "2020-02-08T20:14:17.312752369+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "192.168.80.0/20","Gateway": "192.168.80.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}}
]

网络 alpine-net 的网关是 192.168.80.1,与默认 bridge 网络不同。

3 创建 4 个容器

# docker run -dit --name alpine1 --network alpine-net alpine ash
8e0ab36ed621c23b0fb50256f4e67f3ee22eb114400e37a5c71bd22275b9668b
# docker run -dit --name alpine2 --network alpine-net alpine ash
347af28200e49c07a1b6845387ce9abf8d0dd34a21680145097d638b73b0f4c8
# docker run -dit --name alpine3 alpine ash
bf038a99bceec1d897cc60c7de0548e296ab308f9486691279172524e74aeb18
# docker run -dit --name alpine4 --network alpine-net alpine ash
4c192d113af8513acd39cacb36d668604cecfafe990801d5e37f17e500c322aa
# docker network connect bridge alpine4
#
# docker container ls
CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS              PORTS                    NAMES
4c192d113af8        alpine                             "ash"                    2 minutes ago       Up 2 minutes                                 alpine4
bf038a99bcee        alpine                             "ash"                    2 minutes ago       Up 2 minutes                                 alpine3
347af28200e4        alpine                             "ash"                    2 minutes ago       Up 2 minutes                                 alpine2
8e0ab36ed621        alpine                             "ash"                    2 minutes ago       Up 2 minutes                                 alpine1

4 再次查看网络 bridge 和 alpine-net

# docker network inspect bridge
[{"Name": "bridge","Id": "02231307198a766660ed883e7117e65d04dbc0a111b68ce6b65e9f50e4887674","Created": "2019-09-10T15:39:22.052117578+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": null,"Config": [{"Subnet": "172.17.0.0/16","Gateway": "172.17.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"4c192d113af8513acd39cacb36d668604cecfafe990801d5e37f17e500c322aa": {"Name": "alpine4","EndpointID": "35e16d957e312067b77354a7d7febd95e3d168b66508a859db3c6c15743639cd","MacAddress": "02:42:ac:11:00:04","IPv4Address": "172.17.0.4/16","IPv6Address": ""},"bf038a99bceec1d897cc60c7de0548e296ab308f9486691279172524e74aeb18": {"Name": "alpine3","EndpointID": "d7749027672de5a6a265e7f9245446b2bdfd9df6474eb327e11a5ad7a2393328","MacAddress": "02:42:ac:11:00:03","IPv4Address": "172.17.0.3/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"},"Labels": {}}
]

alpine3alpine4 都连接到 bridge 网络。

# docker network inspect alpine-net
[{"Name": "alpine-net","Id": "694e28e19bbc5083491ee0d5c75b6fc8aef6c4274582be9f5a7c0184abb8f087","Created": "2020-02-08T20:14:17.312752369+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "192.168.80.0/20","Gateway": "192.168.80.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"347af28200e49c07a1b6845387ce9abf8d0dd34a21680145097d638b73b0f4c8": {"Name": "alpine2","EndpointID": "82dc832bd1f0d8406039c30964f8c5c31cc393cb0dd53c9758bf0c52f52da4ca","MacAddress": "02:42:c0:a8:50:03","IPv4Address": "192.168.80.3/20","IPv6Address": ""},"4c192d113af8513acd39cacb36d668604cecfafe990801d5e37f17e500c322aa": {"Name": "alpine4","EndpointID": "09fcc106f88b619d32204fa6399c9bfdbda34822de4035a9f5295f6db841c859","MacAddress": "02:42:c0:a8:50:04","IPv4Address": "192.168.80.4/20","IPv6Address": ""},"8e0ab36ed621c23b0fb50256f4e67f3ee22eb114400e37a5c71bd22275b9668b": {"Name": "alpine1","EndpointID": "1b8782cb01f48f19b34e8caf4fcc08a66e326fa60c6af8743b7e40434302b93b","MacAddress": "02:42:c0:a8:50:02","IPv4Address": "192.168.80.2/20","IPv6Address": ""}},"Options": {},"Labels": {}}
]

容器 alpine1alpine2alpine4 都连接到了 alpine-net 网络。

5 同网络内的容器可以通信

alpine1 可以和 alpine2alpine4 通信,并且可以直接通过容器名来通信

在用户自定义网络中,容器不仅能通过IP地址通信,可以通过解析容器名来得到IP地址。这个能力称为 automatic service discovery 自动服务发现。

# docker attach alpine1
/ # ping -c 2 alpine2
PING alpine2 (192.168.80.3): 56 data bytes
64 bytes from 192.168.80.3: seq=0 ttl=64 time=0.113 ms
64 bytes from 192.168.80.3: seq=1 ttl=64 time=0.095 ms--- alpine2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.095/0.104/0.113 ms
/ # ping -c 2 alpine4
PING alpine4 (192.168.80.4): 56 data bytes
64 bytes from 192.168.80.4: seq=0 ttl=64 time=0.100 ms
64 bytes from 192.168.80.4: seq=1 ttl=64 time=0.089 ms--- alpine4 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.089/0.094/0.100 ms
/ # ping -c 2 alpine1
PING alpine1 (192.168.80.2): 56 data bytes
64 bytes from 192.168.80.2: seq=0 ttl=64 time=0.029 ms
64 bytes from 192.168.80.2: seq=1 ttl=64 time=0.060 ms--- alpine1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.029/0.044/0.060 ms
/ #

6 不同网络的容器无法通信

alpine1 不能连接 alpine3,因为它不在 alpine-net 网络中。

不仅仅不能通过容器名来ping通,也不能通过ip来ping通。

/ # ping -c 2 alpine3ping: bad address 'alpine3'
/ # ping -c 2 172.17.0.3
PING 172.17.0.3 (172.17.0.3): 56 data bytes--- 172.17.0.3 ping statistics ---
2 packets transmitted, 0 packets received, 100% packet loss

Detach 容器 alpine1 ,使用快捷命令 CTRL + pCTRL + q (按住 CTRL 输入 p 和 q)。

7 连接多个网络的容器可以和多个网络进行通信

alpine4 连接了默认到 bridgealpine-net 网络,因此它能和其他容器通信。但对 alpine3 容器对通信需要采用它的 ip 地址,因为它在默认的 bridge 网络中。

# docker attach alpine4
/ # ping -c 2 alpine1
PING alpine1 (192.168.80.2): 56 data bytes
64 bytes from 192.168.80.2: seq=0 ttl=64 time=0.105 ms
64 bytes from 192.168.80.2: seq=1 ttl=64 time=0.097 ms--- alpine1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.097/0.101/0.105 ms
/ # ping -c 2 alpine2
PING alpine2 (192.168.80.3): 56 data bytes
64 bytes from 192.168.80.3: seq=0 ttl=64 time=0.104 ms
64 bytes from 192.168.80.3: seq=1 ttl=64 time=0.085 ms--- alpine2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.085/0.094/0.104 ms
/ # ping -c 2 alpine3
ping: bad address 'alpine3'
/ # ping -c 2 alpine4
PING alpine4 (192.168.80.4): 56 data bytes
64 bytes from 192.168.80.4: seq=0 ttl=64 time=0.039 ms
64 bytes from 192.168.80.4: seq=1 ttl=64 time=0.057 ms--- alpine4 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.039/0.048/0.057 ms
/ # ping -c 2 172.17.0.3
PING 172.17.0.3 (172.17.0.3): 56 data bytes
64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.112 ms
64 bytes from 172.17.0.3: seq=1 ttl=64 time=0.089 ms--- 172.17.0.3 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.089/0.100/0.112 ms

8 所有基于 bridge 驱动的网络都能接通宿主机网络

最后测试下几个容器是否能联通网络。

/ # ping -c 2 baidu.com
PING baidu.com (220.181.38.148): 56 data bytes
64 bytes from 220.181.38.148: seq=0 ttl=248 time=35.715 ms
64 bytes from 220.181.38.148: seq=1 ttl=248 time=35.568 ms--- baidu.com ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 35.568/35.641/35.715 ms
/ # read escape sequence
# docker attach alpine1
/ # ping -c 2 baidu.com
PING baidu.com (39.156.69.79): 56 data bytes
64 bytes from 39.156.69.79: seq=0 ttl=248 time=38.493 ms
64 bytes from 39.156.69.79: seq=1 ttl=248 time=38.408 ms--- baidu.com ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 38.408/38.450/38.493 ms
/ # read escape sequence
# docker attach alpine3
/ # ping -c 2 baidu.com
PING baidu.com (220.181.38.148): 56 data bytes
64 bytes from 220.181.38.148: seq=0 ttl=248 time=37.688 ms
64 bytes from 220.181.38.148: seq=1 ttl=248 time=37.655 ms--- baidu.com ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 37.655/37.671/37.688 ms

9 停止并删除所有容器以及 alpine-net 网络

Stop and remove all containers and the alpine-net network.

# docker stop alpine1 alpine2 alpine3 alpine4
# docker rm alpine1 alpine2 alpine3 alpine4
# docker network rm alpine-net

小结

容器网络有如下规则:

  • 同网络内的容器可以通信
  • 不同网络的容器无法通信
  • 连接多个网络的容器可以和多个网络进行通信

命令操作上:

命令 功能
docker network create NETWORK 创建网络
docker network rm NETWORK 删除网络
docker network ls 罗列网络
docker network inspect NETWORK 查看具体网络到详情
docker network connect NETWORK CONTAINER 将容器连接到网络
docker run --network NETWORK CONTAINER 运行容器并指定网络

END


Docker 官网教程实践 自定义 bridge 网络相关推荐

  1. Docker Network 配置,自定义bridge网络

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  2. java官网教程(基础篇)—— 基础的Java类 —— 基础 I / O

    目录 基本 Java 类 基础 I/O I/O流 字节流 字符流 缓冲流 扫描和格式化 扫描 格式化 从命令行中进行IO操作 数据流 对象流 文件 I/O(采用 NIO.2) 什么是路径? Path类 ...

  3. Gem5模拟器,详解官网教程Event-driven programming(五)

    目录 一.解释一下gem5中的event-driven? 二.Creating a simple event callback (1)定义一个新的 C++ 类,并继承自 SimObject 抽象基类 ...

  4. 容器单机编排工具 Docker Compose,swap 限制,配置默认的CFS调度程序,Stress-ng 压力测试工具,docker官网镜像上传,及阿里云镜像上传,Docker 的资源限制

    目录 Docker Compose介绍   有版本问题 一键生成 docker-compose.yml docker官网镜像上传,及阿里云镜像上传 Docker 之分布式仓库 Harbor Docke ...

  5. Angular官网教程示例知识点总结

    Angular官网教程示例知识点总结 1.背景 2.知识点 2.1 应用的外壳 2.1.1 使用 Angular CLI 创建初始的应用结构 2.1.2 启动应用服务器 2.1.3 双花括号表达式 2 ...

  6. [pytorch] 官网教程+注释

    pytorch官网教程+注释 Classifier import torch import torchvision import torchvision.transforms as transform ...

  7. MNE溯源fieldtrip官网教程

    MNE溯源fieldtrip官网教程 Introduction 在本教程中,您可以找到有关如何使用最小范数估计进行源重构的信息,以重构单个主题的事件相关字段(MEG).我们将使用预处理教程中描述的数据 ...

  8. ABP框架官网例子实践(2)(ASP.NET core+Multi Page Web Application)

    ABP框架官网例子实践(1)(ASP.NET core+Multi Page Web Application) 第三步:开始在Application中进行编写代码 1.为app service定义一个 ...

  9. Spring Cloud学习笔记—网关Spring Cloud Gateway官网教程实操练习

    Spring Cloud学习笔记-网关Spring Cloud Gateway官网教程实操练习 1.Spring Cloud Gateway介绍 2.在Spring Tool Suite4或者IDEA ...

最新文章

  1. Docker入门六部曲——基本引导
  2. ubuntu12.04 alternate win7 双系统安装
  3. Python 工匠:在边界处思考
  4. 如何做好项目规划,完成一个保质保量的软件工程!
  5. DWZ与百度编辑器的IE8以下上传图片兼容问题
  6. Nginx基本数据结构之ngx_chain_t
  7. MongoDb学习(四)--Repository
  8. 内核如何检测soft lockup与hard lockup?
  9. .NET性能系列文章二:Newtonsoft.Json vs System.Text.Json
  10. js定义入参_js函数传参类型
  11. 眼见为实:关于微服务熔断这几个知识点,你可能理解错了
  12. mysql 日期group_MySql 使用GROUP BY 按照日期分组统计
  13. 【安卓学习之常见问题】 使用Eclipse clean时,出现“cleaning all project has encountered a problem”提示
  14. 苹果xr黑屏转圈圈解决方法_iPhonexr黑屏转圈怎样解决?
  15. 魔兽世界怀旧服务器无限刷怪点,魔兽世界怀旧服法师A怪升级路线地点 法师刷怪速升60全攻略...
  16. java Spring IOC
  17. PAT乙级真题 1075 链表元素分类 C++实现(测试点5:用map会超时)
  18. 数据库DB之MySQLOracle
  19. 论文调研——23.2.28
  20. 喝红茶有什么好处和不好

热门文章

  1. 运放如何产生方波信号
  2. wan端口未连接怎么弄_路由器wan口显示未连接,如何设置?
  3. 微商引流产品有什么秘诀?为大家整理了以下几种最有效的引流方法
  4. 增长量计算n+1原则_国家公务员考试:资料分析中增长量的计算 (1)
  5. 鬼吹灯写的真好啊!!
  6. 让你的网站关键词排名排到首页的九大技巧
  7. 小米蓝牙鼠标在Ubuntu18.0.4下反应迟钝问题的解决
  8. 华为汽车问界M5订单惊人,狙击特斯拉在望
  9. 22考研英语复习学长攻略:英语做题的最优顺序
  10. carla-ros-bridge ERRO:raise AttributeError(“module {!r} has no attribute “ [bridge-1] AttributeError