Docker 网络类型
Docker 网络类型
前言
a. 本文主要为 Docker的视频教程 笔记。
b. 环境为 CentOS 7.0 云服务器
c. 上一篇:docker-compose 的使用和负载均衡的初探
1. None:不为容器配置任何网络功能
创建容器时指定:--net=none,容器将无法访问网络
2. Bridge:Docker 的 NAT 网络模型 (默认)
启动一个容器,并查看其详细信息:
[root@VM_0_2_centos ~]# docker run -it -d centos_with_nettool
4861cdf313bcca909b3009a86c57867f78c83aaa134fb16d6b487d7f5bed3196
[root@VM_0_2_centos ~]# docker inspect 4861cdf313bcca909b300
......
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "cb843ba162ad6185bb3c646d4a80dbff14bd223893231dfe3c6a7c252f0132e5",
"EndpointID": "c8d5d5133d789058b89ea6294cb2448dcbf4d7bde2144a9c0206ae1eb3a3c230",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
......
可以看到 Docker 创建了一个网关地址为 172.17.0.1 的网络
查看所有网络,发现我们新建的容器使用的正是 bridge 类型的网络(ID 都为 cb843ba162ad6185bb3c6...):
[root@VM_0_2_centos ~]# docker network ls --no-trunc
NETWORK ID NAME DRIVER SCOPE
cb843ba162ad6185bb3c646d4a80dbff14bd223893231dfe3c6a7c252f0132e5 bridge bridge local
847bfe624f2b6db706b1d3527346c975537c4c9776ab1e22a1715613fbb458bf host host local
c4f5ad4d49d30b79d7f9e6ffda48522d0f405c18336a7d35114d6238d2c08bfa none null local
进入容器后,查看ip地址确实为 172.17.0.2,在容器中使用 ping 命令,可以 ping 通外网
[root@4861cdf313bc /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 2078 bytes 11123467 (10.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1368 bytes 92785 (90.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@4861cdf313bc /]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=2 ttl=110 time=41.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=110 time=41.8 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=110 time=41.5 ms
^C
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 3 received, 25% packet loss, time 3003ms
rtt min/avg/max/mdev = 41.581/41.813/41.974/0.237 ms
在宿主机中查看网卡,发现 Docker 为我们创建了一块名为 docker0,地址为 172.0.0.1 的虚拟的网卡,以进行网络地址转换(NAT),因此容器可以访问外网。
[root@VM_0_2_centos ~]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:12:a1:91:2f txqueuelen 0 (Ethernet)
RX packets 575067 bytes 46549887 (44.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 638280 bytes 2075407385 (1.9 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.21.0.2 netmask 255.255.240.0 broadcast 172.21.15.255
需要注意的是,Bridge 的网络和名为 docker0 的网卡没有因为容器的删除而被 Docker 删除,它们会一直存在。
3. Host:与宿主机共享 Network Namespace,性能最高
使用 --network=host 启动一个容器,并进入该容器:
[root@VM_0_2_centos ~]# docker run -it -d --network=host centos_with_nettool
e034bcabdad0ebdd13af8d91c0bab438bf4817788cb6e889aa0937078a3188b8
[root@VM_0_2_centos ~]# docker exec -it e034bcabdad0 /bin/bash
[root@VM_0_2_centos /]# hostname
VM_0_2_centos
[root@VM_0_2_centos /]#
可以看到此时容器的主机名和宿主机的主机名一致,网络也与宿主机的网络一致(ifconfig命令结果一致)。因此如果在 Bridge 模式时原镜像需要将端口映射到宿主机,在使用 Host 模式时无需再进行端口映射(同时也不能与宿主机已有端口冲突)。
4. Container:与另一个运行中的容器共享 Network Namespace,
先启动一个容器后,再使用 --network=container:<containerID> 启动另一个容器,并进入第二个容器:
[root@VM_0_2_centos ~]# docker run -it -d centos_with_nettool
ca5daf0d21d9fc9b0f8f9eeb687d47245b01dea8c63231cc3604ad801714ae88
[root@VM_0_2_centos ~]# docker run -it -d --network=container:ca5daf0d21d9fc9b0f8 centos_with_nettool
cf32c9b69f2aa51706b0cd23a4ac98657ecba60920c7dcb62f0751d435732974
分别进入两个容器中查看:
[root@ca5daf0d21d9 /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
[root@cf32c9b69f2a /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
二者的网络一致!
在宿主机查看两个容器的网络情况:
[root@VM_0_2_centos ~]# docker inspect ca5daf0d21d9fc9b0f8 | grep -i network
"NetworkMode": "default",
"NetworkSettings": {
"Networks": {
"NetworkID": "cb843ba162ad6185bb3c646d4a80dbff14bd223893231dfe3c6a7c252f0132e5",
[root@VM_0_2_centos ~]# docker inspect cf32c9b69f2aa51706b | grep -i network
"NetworkMode": "container:ca5daf0d21d9fc9b0f8f9eeb687d47245b01dea8c63231cc3604ad801714ae88",
"NetworkSettings": {
"Networks": {}
可以看到后来的容器完全使用第一个容器的网络,自身网络信息为空。
Docker 网络类型的更多相关文章
- docker网络类型访问原理
• bridge –net=bridge 默认网络,Docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中. • host –net=host 容器不会获得一个独立的netw ...
- docker网络
docker网络 Docker 允许通过外部访问容器或容器互联的方式来提供网络服务. 端口映射允许外部访问容器 --link 容器互联 容器桥接网络 .通过--link容器通信,给test2添加一 ...
- 16.2,docker网络
Docker 允许通过外部访问容器或容器互联的方式来提供网络服务. 端口映射允许外部访问容器 --link 容器互联 容器桥接网络 .通过--link容器通信,给test2添加一个hosts解析记 ...
- 037.集群网络-Docker网络实现
一 Docker网络 1.1 Docker网络类型 标准的Docker支持以下4类网络模式: host模式:使用--net=host指定. container模式:使用--net=container: ...
- 五、docker网络
一.Docker 网络 docker网络主要是解决容器联网问题,也是我们使用容器中最重要的一个环节,如果容器没有网络则无法向网络中提供服务. 网络管理命令:docker network [root@z ...
- Docker:容器的四种网络类型 [十三]
一.None类型 简介:不为容器配置任何网络功能,--net=none 1.创建容器 docker run -it --network none busubox:latest 2.功能测试 [root ...
- docker单机网络类型
docker单机网络类型概述 Docker 安装时会自动在 host 上创建三种网络 分别为 bridge host none . 可用 docker network ls 命令查看 ...
- Docker的网络类型
四种网络类型: None:不为容器配置任何网络功能,--net=noneContainer:与另一个运行中的容器共享Network Namespace,--net=container:containe ...
- 理解Docker(5):Docker 网络
本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...
随机推荐
- CentOS后台服务管理类
目录 一.service 后台服务管理(临时,只对当前有效) 二.chkconfig 设置后台服务的自启配置(永久) 三.CentOS7 后添加的命令:systemctl 一.service 后台服务 ...
- JAVA的一般输入输出 和 快速输入输出 (BufferedReader&BufferedWrite)(转载)
1.JAVA的一般输入输出 和 快速输入输出 (BufferedReader&BufferedWrite) 摘要 本文主要介绍快速输入输出, 文中提到了几个IO类,这里推荐使用Buffered ...
- 在 CSS 中表示颜色的hex code方法和rgb方法
hexadecimal code(十六进制编码),简写为 hex code. 我们通常使用 decimals,也就是十进制数字,它对每一位数字使用符号0到9来表示.Hexadecimals (或 he ...
- SpringCloud-技术专区-从源码层面让你认识Feign工作流程和运作机制
Feign工作流程源码解析 什么是feign:一款基于注解和动态代理的声明式restful http客户端. 原理 Feign发送请求实现原理 微服务启动类上标记@EnableFeignClients ...
- go配置私有仓库 (go mod配置私有仓库)
windows 配置go私有仓库 一.环境 1.私有gitlab (gitlab.xxx.com) 2.go 1.16.3 3.win10系统, 家目录:C:\Users\Administrator, ...
- 漏洞复现|Dubbo反序列化漏洞CVE-2019-17564
01漏洞描述 - Apache Dubbo支持多种协议,官方推荐使用Dubbo协议.Apache Dubbo HTTP协议中的一个反序列化漏洞(CVE-2019-17564),该漏洞的主要原因在于当A ...
- SQL 练习7
查询所有同学的学生编号.学生姓名.选课总数.所有课程的总成绩(没成绩的显示为 null ) SELECT Student.SId,sname,t.选课总数,t.总成绩 from Student LEF ...
- .Net Core with 微服务 - 分布式事务 - TCC
上一次我们讲解了分布式事务的 2PC.3PC .那么这次我们来理一下 TCC 事务.本次还是讲解 TCC 的原理跟 .NET 其实没有关系. TCC Try 准备阶段,尝试执行业务 Confirm 完 ...
- redis搭建集群和主从
说明 Redis集群至少需要3个节点,来支持投票容错机制,每个节点都有从节点,所有最少是6个服务(3个主3个从) 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384 ...
- java导出excel(easypoi)
介绍 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 ...