一、Docker bridge network

Docker 桥接网络使用软件桥接, 该软件桥接允许连接到同一桥网的容器进行通信, 同时提供与未连接到该桥网络的容器的隔离。Docker 桥接驱动程序会自动在主机中安装规则, 以便不同桥接网络上的容器不能直接相互通信。桥接网络适用于在同一 Docker 守护进程主机上运行的容器。Docker 默认网络类型为桥接,对于桥接网络用户可以使用docker默认的,也可以自定义桥接网络,自定义的桥接网络优先级高于默认的。

1、Docker default bridge

1.1、基于docker默认桥接网络的桥接容器

桥接式容器,一般拥有两个接口:一个环回接口和一个连接至物理机docker0网卡上的以太网接口;物理机docker0网卡其实是NAT桥,因此桥接式容器可通过此接口访问外部网络,但防火墙规则阻止了一切从外部网络访问桥接式容器的请求

[root@node ~]# docker container run --name br-net1 -it --rm busybox:latest
/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
22: eth0@if23: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ffinet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever

桥接网络中,容器网卡与物理机网卡各占docker虚拟网卡的一半,网关默认为物理机网卡172.17.0.1,为容器自动分配0.2到0.254的地址

1.2、基于docker默认桥接网络的开放式容器

开放容器内服务到桥接式网络宿主机外部去

1.2.1、“-P“选项或”--publish-all“将容器的所有计划要开放端口全部映射至主机端口,计划要开放的端口使用--expose选项指定

docker container run --name myweb --rm -it -P --expose 2000 --expose 2001 busybox

查看映射结果

[root@node ~]# docker port myweb
2000/tcp -> 0.0.0.0:32770
2001/tcp -> 0.0.0.0:32769

1.2.2、“-p”选项

使用格式:
-p <containerPort> :将指定的容器端口映射至主机所有地址的一个动态端口

    示例:docker container run --name myweb --rm -p 80 busybox

-p <hostPort>:<containerPort>:将容器端口<containerPort>映射至指定的主机端口<hostPort>

    示例:docker container run --name myweb --rm -p 8080:80 busybox
-p <ip>::<containerPort>:将指定的容器端口<containerPort>映射至主机指定<ip>的动态端口
    示例:docker container run --name myweb --rm -p 192.168.143.130::80 busybox
-p <ip>:<hostPort>:<containerPort>:将指定的容器端口<containerPort>映射至主机指定<ip>的端口<hostPort>
    示例:docker container run --name myweb --rm -p 192.168.143.130:8080:80 busybox

Ps:”动态端口“指随机端口,具体的映射结果可使用docker port命令查看

1.3、基于docker默认桥接网路的联盟式容器

联盟式容器,是指使用某个已存在容器的网络接口的容器,容器间的Network、IPC、UTS是共享的,共用的网络与进程间通信协议栈让容器间可通过环回口通信
联盟式容器彼此间存在端口冲突的可能性,因此,通常只会在多个容器上的程序需要程序loopback接口互相通信、或对某已存在的容器的网络属性进行监控时才使用此种模式的网络类型
示例:
创建容器b1

[root@node ~]# docker container run -it --rm --name b1 busybox:latest
/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
34: eth0@if35: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ffinet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever

创建容器b2,加入容器b1的网络,

[root@node ~]# docker container run --name b2 --network container:b1 -it --rm busybox:latest
/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
34: eth0@if35: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ffinet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever

1.4、默认桥接网络的配置

创建或运行容器时,通过--network参数指明网络类型
Docker-daemon配置文件中关于桥接网络的配置

{"bip": "10.0.0.1/24","fixed-cidr": "10.0.0.1/25","fixed-cidr-v6": "2001:db8::/64","mtu": 1500,"default-gateway": "10.0.0.1","default-gateway-v6": "2001:db8:abcd::89","dns": ["10.0.0.1","10.0.20.1"]
}

2、自定义桥接网络

通过network命令集实现网络的自定义

2.1、创建与删除自定义桥接网络

docker network create my-net
docker network rm my-net

2.2、查看自定义桥接网络信息

docker inspect my-net[{"Name": "my-net","Id": "eaeb9efaf1fe290ec90b6f8e79b1ae76f14bb8048f03511ff28946eb1aa666e7","Created": "2019-04-24T09:21:04.123600659-07:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "172.18.0.0/16","Gateway": "172.18.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}}
]

2.3、创建容器时连接容器到自定义桥接网络,通过--network参数指定

[root@node1 docker-img]# docker container run --name myweb --network my-net -it --rm busybox:latest
/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
200: eth0@if201: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ffinet 172.18.0.2/16 brd 172.18.255.255 scope global eth0valid_lft forever preferred_lft forever

2.4、容器运行是加入自定义桥接网络

docker container run --name myweb -it --rm busybox:latest
docker network connect my-net myweb myweb上查看是否连接自定义桥接网络
/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
202: eth0@if203: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:0a:00:00:02 brd ff:ff:ff:ff:ff:ffinet 10.0.0.2/24 brd 10.0.0.255 scope global eth0valid_lft forever preferred_lft forever
204: eth1@if205: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ffinet 172.18.0.2/16 brd 172.18.255.255 scope global eth1valid_lft forever preferred_lft forever

2.5、断开自定义桥接网络

docker network disconnect my-net myweb 

3、自定义桥接网络与默认桥接网络的区别

• 用户定义的桥接网络提供自动DNS解析,默认桥接网络只能通过IP地址通信

• 容器可以动态连接并与用户定义的网络分离,在容器的生存期内, 您可以动态地将其与用户定义的网络连接或断开。若要从默认桥接网络中删除容器, 需要停止该容器, 然后使用不同的网络选项重新创建它。

• 用户自定义的桥接网络可根据容器的功能分别配置用户自定义的桥接网络可以选择启用或停用IPv6,而默认桥接网络在docker支持配置IPv6的情况下,默认桥接网络会自动为 IPv6 配置,而不能禁用。

Ps:因为默认的桥接网络在功能上不如自定义桥接网络完善,且存在设计缺陷,Docker 官方不建议在生产环境使用此种网络

二、Docker host network

Docker 容器使用主机网络,则该容器的网络堆栈不会与 Docker 主机隔离。例如, 如果运行绑定到端口80的容器并使用主机网络, 则该容器的应用程序将在主机 ip 地址上的端口80上可用。主机网络仅适用于Linux主机。
容器加入主机网络

[root@node ~]# docker container run --name b2 --network host -it --rm busybox:latest
/ # echo "hello docker" > /tmp/index.html
/ # httpd -h /tmp/宿主机访问
[root@node ~]# curl 127.0.0.1
hello docker

三、Docker none network

不参与网络通信,运行于此类容器中的进程仅能访问本地环回接口,仅适用于进程无须网络通信的场景中,例如备份、进程诊断及各种离线任务等
创建封闭式容器

[root@node ~]# docker container run --name br-net1 -it --network none --rm busybox:latest
/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever

参考文章:
docker docs:https://docs.docker.com/network/

转载于:https://blog.51cto.com/jiayimeng/2384261

Docker初学乍练之单主机网络相关推荐

  1. docker单主机网络类型

    作为小笔记参考!!! 这个文主要写了docker 单主机网络类型 none host container bridge 前面三个是简单的带过 最后会详细的说下bridge网络 docker安装的时候会 ...

  2. Docker 网络模型/overlay 跨主机网络

    之前说了overylay fs,但是运行一个容器进程还需要最后一步,就是它的网络配置. docker本身在创建之初就有自己的网络驱动器,叫container network manager,CNM,本 ...

  3. docker单主机网络

    当你安装Docker时,它会自动创建三个网络.你可以使用以下docker network ls命令列出这些网络: [root@localhost ~]# docker network ls NETWO ...

  4. Docker 跨主机网络方案分析

    PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...

  5. 单主机Docker容器VLAN划分

    2 单主机Docker容器VLAN划分 pipework不仅可以使用Linux bridge连接Docker容器,还可以与OpenVswitch结合,实现Docker容器的VLAN划分.下面,就来简单 ...

  6. 在 Docker 中运行 MySQL:多主机网络下 Docker Swarm 模式的容器管理

    本文将以多主机网络环境为基础,探讨如何利用内置编排工具 Docker Swarm 模式对各主机上的容器加以管理. Docker Engine – Swarm 模式 在多台主机之上运行 MySQL 容器 ...

  7. 单一docker主机网络

    一. 容器网络模型: Docker定义了一个非常简单的网络模型,叫做container network model(CNM).如下图所示: CNM模型有三个元素---sandbox, endpoint ...

  8. docker多主机网络方案

    本文探讨Docker多主机网络的性能. 在过去的博文里,我测试过 Docker的网络 . MySQL服务器团队 提供了他们自己的结果,和我的观察是一致的. 本文里一系列的测试,想更多关注使用多主机的D ...

  9. docker swarm MySQL_容器与云|在 Docker 中运行 MySQL:多主机网络下 Docker Swarm 模式的容器管理...

    本文将以多主机网络环境为基础,探讨如何利用内置编排工具 Docker Swarm 模式对各主机上的容器加以管理. Docker Engine – Swarm 模式 在多台主机之上运行 MySQL 容器 ...

最新文章

  1. pdf一键转曲_新技能:如何利用PDF制作可变数据!
  2. Python之路----迭代器与生成器
  3. 第十一集VLAN原理和VTP协议理论讲解
  4. 十四、深入Python条件和循坏
  5. 【模板】最大权闭合图
  6. Win10怎么禁用系统更新服务 Win10禁用系统更新服务教程
  7. dmesg时间转换工具
  8. 大数据平台技术可以提供哪些服务
  9. 树莓派4B全40管脚对应功能示意图
  10. xbox360 无线手柄 通过cmd_vel控制小乌龟运动
  11. Playwright-python 教程
  12. 如何在没有安装安卓环境的mac os上装adb环境.
  13. 2016届毕业设计(论文) 基本规范及档案袋封面填写要求
  14. 转-快找个程序员做老公吧
  15. 2017年中秋前记录
  16. jupyter notebook把txt文件写成所需格式的txt文件
  17. 可怕的KCFErrordomainCFNetWork 303
  18. 新安装Win7 Windows Update 错误 代码80072EE2 80072EFE
  19. soui edit passwrod模式下禁用输入法
  20. 跨专业保研浙大计算机,保研经验:排名第一,论文两篇,七项专利,两个国家级大创,夏令营斩获多个offer,成功上岸985!...

热门文章

  1. 【集训心得】在真哥强迫下不得不写的总结
  2. 用SC命令 添加或删除windows服务提示OpenSCManager 失败5
  3. 多生产者多消费者问题
  4. SQL Server 2008存储过程的加密
  5. 巧用DOS命令合并多个文本文件的内容
  6. centos修改ip mac等
  7. Windows Socket 编程
  8. 与江岭师弟的讨论 - 关于形式化逻辑的局限以及其它
  9. 由浅至深,谈谈.NET混淆原理 -- 五(MaxtoCode原理),六(其它保护方法)
  10. 涨知识!参加过将近三十届广交会的老鸟总结!