Docker--网络详解
文章目录
- 一、Docker网络原理
- 1.1**容器内先安装net-tools工具yum install -y net-tools然后查看容器IP(container ip)**
- 1.2**默认网络**
一、Docker网络原理
Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP, 同时Docker网桥是 每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信
[root@localhost ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255ether 02:42:b1:c5:3b:4f txqueuelen 0 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
1.1容器内先安装net-tools工具yum install -y net-tools然后查看容器IP(container ip)
[root@localhost ~]# yum install -y net-tools
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d1f43c3d536 tomcat:latest "/bin/bash" 6 seconds ago Created reverent_banzai#使用大写p进行随机端口映射
[root@localhost ~]# docker run -itd --name test1 -P tomcat
95fffcb47dbbd93ed798ada33a54b2aa5b17d8fb1e4a7ab73fb638501ca54a5b
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
95fffcb47dbb tomcat "catalina.sh run" 5 seconds ago Up 4 seconds 0.0.0.0:49153->8080/tcp, :::49153->8080/tcp test1
2d1f43c3d536 tomcat:latest "/bin/bash" 2 minutes ago Exited (137) About a minute ago reverent_banzai#使用小写p加端口进行指定的端口映射
[root@localhost ~]# docker run -itd --name test2 -p 49110:80 tomcat
581f77fc4c7cd42d2c41bd9126d9ff0226583e3368d8366dedb1a56e4417a389
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
581f77fc4c7c tomcat "catalina.sh run" 3 seconds ago Up 2 seconds 8080/tcp, 0.0.0.0:49110->80/tcp, :::49110->80/tcp test2
95fffcb47dbb tomcat "catalina.sh run" 2 minutes ago Up 2 minutes 0.0.0.0:49153->8080/tcp, :::49153->8080/tcp test1
2d1f43c3d536 tomcat:latest "/bin/bash" 4 minutes ago Exited (137) 3 minutes ago reverent_banzai#测试
分别登录192.168.237.141:49110和192.168.237.141:49153可以访问tomcat页面#可以访问是因为通过iptables的DNAT进行了转换
[root@localhost ~]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCALChain INPUT (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCALChain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
RETURN all -- 192.168.122.0/24 224.0.0.0/24
RETURN all -- 192.168.122.0/24 255.255.255.255
MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24
MASQUERADE tcp -- 172.17.0.2 172.17.0.2 tcp dpt:8080
MASQUERADE tcp -- 172.17.0.3 172.17.0.3 tcp dpt:80Chain DOCKER (2 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:49153 to:172.17.0.2:8080
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:49110 to:172.17.0.3:80
1.2默认网络
当你安装Docker时,它会自动创建三个网络。你可以使用以下docker network ls命令列出这些网络
[root@localhost ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
69b39f1a9e1a bridge bridge local
da57f14ea87a host host local
b3681285c530 none null local
Docker网络类型
网络类型 | 描述 |
---|---|
Host | 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口 |
Container | 创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围 |
None | 该模式关闭了容器的网络功能 |
Bridge | 默认为该模式,此模式会为每一个 容器分配、设置IP等,并将容器连接到一个docker0虛拟网桥,通过docker0网桥以及iptables nat表配置与宿主机通信 |
自定义网络模式 | 安装Docker时,它会自动创建三个网络,bridge (创建容器默认连接到此网络)、none 、host |
使用docker run 创建Docker容器时,可以用–net或–network 选项指定容器的网络模式
网络类型 | 描述 |
---|---|
host模式 | 使用–net=host指定 |
Container模式 | 使用–net=none 指定 |
None模式 | 使用–net=container:NAME_ _or_ID指定 |
Bridge模式 | 使用–net=bridge指定,默认设置,可省略 |
Host模式
Host 模式并没有为容器创建一个隔离的网络环境。而之所以称之为host模式,是因为该模式下的 Docker 容器会和 host 宿主机共享同一个网络 namespace,故 Docker Container可以和宿主机一样,使用宿主机的eth0,实现和外界的通信。换言之,Docker Container的 IP 地址即为宿主机 eth0 的 IP 地址,其特点包括:
(1)这种模式下的容器没有隔离的 network namespace
(2)容器的 IP 地址同 Docker host 的 IP 地址
(3)需要注意容器中服务的端口号不能与 Docker host 上已经使用的端口号相冲突
(3)host 模式能够和其它模式共存
container模式
Container 网络模式是 Docker 中一种较为特别的网络的模式。处于这个模式下的 Docker 容器会共享其他容器的网络环境,因此,至少这两个容器之间不存在网络隔离,而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离
[root@localhost ~]# docker inspect -f '{{.State.Pid}}' 95fffcb47dbb #查看容器进程PID
5996
[root@localhost ~]# ls -l /proc/5996/ns
总用量 0
lrwxrwxrwx. 1 root root 0 7月 10 23:58 ipc -> ipc:[4026532623]
lrwxrwxrwx. 1 root root 0 7月 10 23:58 mnt -> mnt:[4026532621]
lrwxrwxrwx. 1 root root 0 7月 10 23:38 net -> net:[4026532626] #查看container模式的Network Namespace
lrwxrwxrwx. 1 root root 0 7月 10 23:58 pid -> pid:[4026532624]
lrwxrwxrwx. 1 root root 0 7月 10 23:58 user -> user:[4026531837]
lrwxrwxrwx. 1 root root 0 7月 10 23:58 uts -> uts:[4026532622][root@localhost ~]# docker run -itd --name test4 --net=container:95fffcb47dbb centos bash
590162d14ba58f544969ab80754389f6667799f27e92b276013f6cc83b71907f
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
590162d14ba5 centos "bash" 27 seconds ago Up 26 seconds test4
431ecd6d0eec tomcat "bash" 5 minutes ago Up 5 minutes test3
581f77fc4c7c tomcat "catalina.sh run" 25 minutes ago Up 25 minutes 8080/tcp, 0.0.0.0:49110->80/tcp, :::49110->80/tcp test2
95fffcb47dbb tomcat "catalina.sh run" 27 minutes ago Up 27 minutes 0.0.0.0:49153->8080/tcp, :::49153->8080/tcp test1
2d1f43c3d536 tomcat:latest "/bin/bash" 30 minutes ago Exited (137) 29 minutes ago reverent_banzai
[root@localhost ~]# docker inspect -f '{{.State.Pid}}' 590162d14ba5
6713
[root@localhost ~]# ls -l /proc/6713/ns
总用量 0
lrwxrwxrwx. 1 root root 0 7月 11 00:06 ipc -> ipc:[4026532845]
lrwxrwxrwx. 1 root root 0 7月 11 00:06 mnt -> mnt:[4026532843]
lrwxrwxrwx. 1 root root 0 7月 11 00:06 net -> net:[4026532626] #container模式的Network Namespace和上面的一致
lrwxrwxrwx. 1 root root 0 7月 11 00:06 pid -> pid:[4026532846]
lrwxrwxrwx. 1 root root 0 7月 11 00:06 user -> user:[4026531837]
lrwxrwxrwx. 1 root root 0 7月 11 00:06 uts -> uts:[4026532844]
none模式
网络模式为 none,即不为 Docker 容器构造任何网络环境。一旦Docker 容器采用了none 网络模式,那么容器内部就只能使用loopback网络设备,不会再有其他的网络资源。Docker Container的none网络模式意味着不给该容器创建任何网络环境,容器只能使用127.0.0.1的本机网络
bridge模式
Docker 容器默认使用 bridge 模式的网络。其特点如下:
(1)使用一个 linux bridge,默认为 docker0
(2)使用 veth 对,一头在容器的网络 namespace 中,一头在 docker0 上
(3)该模式下Docker Container不具有一个公有IP,因为宿主机的IP地址与veth pair的 IP地址不在同一个网段内
(4)Docker采用 NAT 方式,将容器内部的服务监听的端口与宿主机的某一个端口port 进行“绑定”,使得宿主机以外的世界可以主动将网络报文发送至容器内部
(5)外界访问容器内的服务时,需要访问宿主机的 IP 以及宿主机的端口 port
(6)NAT 模式由于是在三层网络上的实现手段,故肯定会影响网络的传输效率
(7)容器拥有独立、隔离的网络栈;让容器和宿主机以外的世界通过NAT建立通信
自定义网络模式创建步骤
[root@localhost ~]# docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork
dc47693a08090ecfbccdfef829aad2dfe1e6104dbe35f663935c0b3937e39d25[root@localhost ~]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255inet6 fe80::42:b1ff:fec5:3b4f prefixlen 64 scopeid 0x20<link>ether 02:42:b1:c5:3b:4f txqueuelen 0 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 12 bytes 1668 (1.6 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0docker1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255ether 02:42:94:ae:e6:48 txqueuelen 0 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
指定IP运行docker
[root@localhost ~]# docker run -it --name test7 --net mynetwork --ip 172.18.0.15 centos:7 /bin/bash
[root@228a9b43ff7b /]# yum install net-tools[root@228a9b43ff7b /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 172.18.0.15 netmask 255.255.0.0 broadcast 172.18.255.255ether 02:42:ac:12:00:0f txqueuelen 0 (Ethernet)RX packets 2895 bytes 23643460 (22.5 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 2007 bytes 111783 (109.1 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Docker--网络详解相关推荐
- Docker网络详解——原理篇
前言 当你开始大规模使用Docker时,你会发现需要了解很多关于网络的知识.Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完 ...
- 云原生时代必须具备的核心技能之Docker高级篇(Docker网络详解)
前面给大家项目的介绍了Docker的基础内容 Docker基础篇 接下来给大家系统的介绍下Docker高级篇的内容:网络核心.Docker实战.DockerCompose.Harbor以及Swar ...
- Docker 网络详解
前置网络知识 OSI七层网络模型 从下到上依次为:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层. 交换机:处在第二次,也就是数据链路层.作用:通过一个或者多个设备将不同子网连接在一起,相 ...
- 小白都能懂的 玩转docker系列之 Docker网络详解(超详细)
首先移掉之前所有的容器: [root@xiaoxiao tomcat]# docker rm $(docker ps -aq) fcfddcab1789 [root@xiaoxiao tomcat]# ...
- Docker学习之路(三)Docker网络详解
1. Docker的4种网络模式 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用--net=host ...
- Dockerfile详解、镜像发布、网络详解学习
一.DockerFile 1.Docker介绍 Dockerfile是用来构建Docker镜像的文件是命令参数脚本.docker build命令用于从Dockerfile构建镜像.可以在docker ...
- ResNet网络详解与keras实现
ResNet网络详解与keras实现 ResNet网络详解与keras实现 Resnet网络的概览 Pascal_VOC数据集 第一层目录 第二层目录 第三层目录 梯度退化 Residual Lear ...
- GoogleNet网络详解与keras实现
GoogleNet网络详解与keras实现 GoogleNet网络详解与keras实现 GoogleNet系列网络的概览 Pascal_VOC数据集 第一层目录 第二层目录 第三层目录 Incepti ...
- Linux系统下ifconfig和route配置网络详解
Linux系统下ifconfig和route配置网络详解 ifconfig和route合用于配置网络(ip命令综合二者功能,此处不讲),通常在前者设置好ip地址等信息后,采用route命令配置路由.( ...
- EfficientNetV2网络详解
原论文名称:EfficientNetV2: Smaller Models and Faster Training 论文下载地址:https://arxiv.org/abs/2104.00298 原论文 ...
最新文章
- 引用头文件#include queue出错
- Beautiful Soup-4.2.0
- vb链接mysql登录界面_求大神!有谁会用VB设计用户登陆界面连接到数据库
- 无风扇网站服务器,这款服务器采用无风扇设计
- 恭喜!已获8个院士的他,又新当选德国院士!
- Object.assign()怎么用?
- LG_3459_[POI2007]MEG-Megalopolis
- 蘑菇车联打造一体化解决方案,致力产业协同发展
- css重新认识(2)
- 【洛谷习题】售货员的难题
- kubernets nodeport 无法访问
- cygwin安装gcc/g++
- 小颗粒积木步骤图纸_loz小颗粒钻石积木拼图图纸谁有
- PowerDesigner16配置显示注释comment配置方法
- ie不能加载flash html,ie浏览器flash无法加载怎么修复_win7系统ie浏览器flash加载不了如何解决-系统城...
- 40套各种风格游戏行业网站html5模板wap手机游戏资讯网站模板游戏动漫设计公司html模板游戏公司网站模板html5网页静态模板Bootstrap扁平化网站源码css3手机seo自适响应
- 软件java安卓版_AIDE软件下载-AIDE【Java开发IDE软件】下载v3.2.18 安卓版-西西软件下载...
- 中文分词jieba python 学习
- 跨境电商独立站是如何布局的-扬帆凌远
- DDoS 的肉鸡都是哪来的?
热门文章
- 关于grep,sed,awk的几个用法
- 如何移除Chrome浏览器让人不爽的GoogleUpdate.exe后台更新进程
- 【计算机毕业设计】美容美发微信小程序的设计与实现
- 06解决Anaconda3安装完成后在开始菜单找不到的问题
- c语言字母分别代表的意思,C语言中%c,%s分别代表什么意思? 在C语言中c% 和 d% 是表示什么意思?...
- 什么是业务对象?业务逻辑是什么?
- Go 青年团聚召集令,2050,我们来了
- springboot中hibernate validator校验模式,分组校验,自定义校验
- [6.2] UI Automation with the Modern Experience-UiPath ARD Certification Training
- 一个完整的软件研发流程是怎样的?