基于 Docker18.09.0


Docker 系列文章目录

安装Docker和容器管理

Docker镜像管理

Dockerfile详解

Docker数据卷管理

Docker网络之默认网络

Docker网络之Host和none

Docker网络之自定义网络

容器端口发布

Docker 官方镜像仓库 之 Docker Hub

单机容器编排工具之 dockercompose

目录

  • Docker 系列文章目录
  • 认识默认网桥
    • 查看默认的网桥信息
  • 默认网桥上的容器互相通信
    • 1. 先创建两个容器
    • 2. 观察默认网桥的信息
    • 3. 进入容器中测试互相通信
  • 禁用默认桥接网络
  • 配置默认网桥

认识默认网桥

安装Docker时,它会自动创建三个网络。您可以使用以下docker network ls命令列出这些网络:

$ docker network lsNETWORK ID          NAME                DRIVER
7fca4eb8c647        bridge              bridge
9f904ee27bf5        none                null
cf03ee007fb4        host                host

这三个网络都内置在 Docker 中。运行容器时,可以使用该 --network 标志指定容器应连接到的网络。

上面的 bridge 是 Docker 服务启动时默认创建的 docker0 网桥(其上有一个 docker0 内部接口),它在内核层连通了其他的物理或虚拟网卡。

除非您使用该docker run --network=选项另行指定,否则Docker守护程序默认情况下将容器连接到此网络。这就将所有容器和本地主机都放到同一个物理网络。

在宿主机上执行 ip addr show 命令可以看到此设备

在每创建一个容器时,Docker 都会为此容器创建一对儿网络接口,比如上图中的 eth0 就是容器 Test1 的一端的 网口。
当我们不指定具体的网络去创建一个容器的时候,Docker 会同时把这两个接口放在 docker0的网络名称空间中。就相当于,为此容器做了一条网线,网线的一端连接到 docker0 这个网桥上,另一端连接到这个容器的 eth0 这个接口上。
只要是连接到 docker0 这个网桥上的任何容器都可以通过彼此的 ip 地址互相通信。

查看默认的网桥信息

可以在宿主机上执行 docker network inspect bridge 来查看默认网桥的源数据信息。

$ docker network inspect bridge
[{"Name": "bridge","Id": "8a5f470ffe774f4f96a712642ed361fbeb0d8e66018e1d629ab44cfdf3e42a05","Created": "2018-12-09T03:03:21.385313598Z","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": {},  # 目前没有任何容器加入到此网络中,所以是空的"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": {}}
]

默认网桥上的容器互相通信

刚才提到了,默认情况下 Docker 会将主机上所有容器连接到此网桥上,他们默认情况下就是可以互相通信的。
但是只能使用彼此的 IP 通信,不可以使用容器名。

下面我们就来实操验证一下。

1. 先创建两个容器
# shark @ SharkAir in ~ [10:51:48]
$ docker run -itd --name=container1 busybox
b0ca6cc19650cfdaa572c9e656a64a5a041b0825e4f68416e9b36dfdbeca3dc8# shark @ SharkAir in ~ [10:52:47]
$ docker run -itd --name=container2 busybox
df5375eaeb17ea49f6dbbf87b7dd5fb6bda42b33eaa4708a4e2cb9c67ae63145
2. 观察默认网桥的信息

在宿主机上执行命令 docker network inspect bridge

从上图中不难看出,刚才我们运行的连个容器被添加到了默认的网桥上,并且分配了具体的地址信息。

官方提示:
连接到默认bridge网络的容器可以通过IP地址相互通信。Docker不支持默认网桥上的自动服务发现。如果你希望容器能够通过容器名称解析的IP地址,你应该使用用户定义的网络代替。您可以使用旧版 docker run --link 选项将两个容器链接在一起,但在大多数情况下不建议这样做。

3. 进入容器中测试互相通信

a. 容器 1 的操作

$ docker exec -it container1 /bin/sh  # 进入容器 1
/ # ip -4 addr        # 查看 IPv4 地址信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
51: eth0@if52: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueueinet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever
/ # cat /etc/hosts    # 查看本地 DNS 解析文件
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  b0ca6cc19650  # 可以看出只有 ip 和 容器 ID 的对应关系
/ # ping -w2 b0ca6cc19650      # 尝试 ping 另外一个容器的 ID
PING b0ca6cc19650 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.847 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.113 ms--- b0ca6cc19650 ping statistics ---
3 packets transmitted, 2 packets received, 33% packet loss
round-trip min/avg/max = 0.113/0.480/0.847 ms
/ # ping -w2 172.17.0.2           # 尝试 ping 另外一个容器的 IP
PING 172.17.0.2 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.574 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.155 ms
^C
--- 172.17.0.2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.155/0.364/0.574 ms
/ # exit                 # 退出这个容器

b. 容器 2 的简单操作

$ docker exec -it container2 /bin/sh
/ # 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.3  df5375eaeb17
/ # ping -w1 df5375eaeb17
PING df5375eaeb17 (172.17.0.3): 56 data bytes
64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.122 ms--- df5375eaeb17 ping statistics ---
2 packets transmitted, 1 packets received, 50% packet loss
round-trip min/avg/max = 0.122/0.122/0.122 ms
/ # exit

值得注意的是: 默认网桥的hosts文件中只有 IP 到容器 ID 之间的对应关系,所以是无法通过容器名称进行互相通信的。

禁用默认桥接网络

如果您不希望创建默认桥接网络,请将以下内容添加到该daemon.json文件中。这仅适用于Docker守护程序在Linux主机上运行的情况。

"bridge": "none",
"iptables": "false"

重新启动Docker以使更改生效。

这属于高级操作,大部分情况下你都不需要禁用它。

配置默认网桥

Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,可以在 Docker 服务启动时改变它:

  • --bip=CIDR IP 地址加掩码格式,例如 192.168.1.5/24
  • --mtu=BYTES 覆盖默认的 Docker mtu 配置

由于目前 Docker 网桥是 Linux 网桥,用户也可以使用 brctl show 来查看网桥和端口连接信息。

brctl 命令需要安装 bridge-utils

[root@docker ~]# yum install bridge-utils
[root@docker ~]# brctl show
bridge name bridge id       STP enabled interfaces
br-592bf266d1de     8000.0242d53c8ae4   no      veth1357758vetha2ea524
br-8f91b60157b9     8000.02421002c747   no
docker0     8000.0242b23bc676   no      vethcc2dfbevethe52debb

容器技术-Docker 网络01-默认网络相关推荐

  1. 容器技术-Docker 网络03-用户自定义网络-网络命令的使用

    基于 Docker18.09.0 Docker 系列文章目录 安装Docker和容器管理 Docker镜像管理 Dockerfile详解 Docker数据卷管理 Docker网络之默认网络 Docke ...

  2. 企业级容器技术 Docker

    企业级容器技术 Docker docker隔离级别中包含两个核心组成: Namespace(名称空间):namespace是Linux系统的底层概念,在内核层实现,即有一些不同类型的命名空间被部署在内 ...

  3. 云漫圈 | 容器技术docker应用场景解析

    戳蓝字"CSDN云计算"关注我们哦! 作者:channingbreeze 文章转载自程序员乔戈里 话说小史已经接受了A厂的offer,这不,已经在公司附近租好了房子,准备搬家过去住 ...

  4. 漫画 | 从搬家到容器技术 Docker 应用场景解析

    作者 |  channingbreeze 责编 | 仲培艺 小史是一个非科班的程序员,虽然学的是电子专业,但是通过自己的努力成功通过了面试,现在要开始迎接新生活了. 生活现场 话说小史已经接受了 A ...

  5. 容器技术-Docker 容器的端口发布

    基于 Docker18.09.0 Docker 系列文章目录 安装Docker和容器管理 Docker镜像管理 Dockerfile详解 Docker数据卷管理 Docker网络之默认网络 Docke ...

  6. 容器技术 - docker

    文章目录 一.Docker简介 1.1 Docker诞生 1.2 Docker相关解释 1.3 Docker与传统虚拟化对比 1.4 Docker的构成 二.Docker安装 2.1 Docker的安 ...

  7. 【云原生之企业级容器技术 Docker实战一】Docker 介绍

    目录 一.Docker 介绍 1.1 容器历史 1.2 Docker 是什么 1.3 Docker 和虚拟机,物理主机 1.4 Docker 的组成 1.5 Namespace 1.6 Control ...

  8. 容器技术Docker

    文章目录 一.引言 1.1 环境不一致 1.2 隔离性 1.3 弹性伸缩 1.4 学习成本 二.Docker介绍 2.1 Docker的由来 2.2 Docker的思想 三.Docker的安装 3.1 ...

  9. 企业级容器技术Docker

    1 Docker 介绍和基础操作 移植性比较好----拥有独自的仓库,但要内核新 可移植性,标准化,隔离性) 1.1.2 Docker 是什么 Docker 是基于 Linux 内核实现,最早采用 L ...

最新文章

  1. 《COM组件开发实践》系列文章
  2. create 2021 | 一图读懂汽车智能化分论坛
  3. 快速排序的三种实现方法
  4. 二叉树的基本理论知识
  5. python定义一个类怎么弄_Python怎么创建一个类
  6. 2017广东全国计算机12月,2018年广东考研时间:2017年12月23日至24日
  7. 一个正则替换:一段文本中有若干a img标记,替换文本中的某些词,不包含除了a img标记 中的文字、属性...
  8. 埃氏筛法求质数(例如:200以内的质数)
  9. idea关于mybatis去除黄色背景色与绿色背景
  10. redis做几十万待办列表_用待办规划我的一天 | 指南 x 待办清单
  11. Java二级练习试题一
  12. GitChat · 安全 | 揭秘我国的电子取证技术
  13. 关于TSP问题的几种解决办法
  14. 群晖NAS系统DSM入门
  15. 微信支付:小微商户申请入驻第一步:平台证书序列号的获取
  16. 室内定位算法_基于RFID技术的室内定位方法简述
  17. 一张表看懂英式音标和美式音标的差异
  18. get请求获取淘宝吱口令
  19. 项目管理(如何进行团队管理)
  20. python闰年判断 从儒略历到格里高利历 公历历史

热门文章

  1. 【spider】关于scrapy的安装的几个问题
  2. 中国各大银行网址及服务电话
  3. 如何做一个软件项目经理? ----写给公司所有的开发人员
  4. mac中怎么打摄氏度的圆点
  5. LINUX下,C语言MALLOC可能达到的最大空间测试
  6. uva 10286 Trouble with a Pentagon
  7. 用python去除SQL中的注释
  8. LVS+Nginx实现高可用集群
  9. JavaScript 面向对象(二)——案列篇
  10. 软件对硬盘性能测试,新买的固态硬盘 有哪些软件可以测试性能?