Docker-网络模式

Docker-网络模式

1.Docker网络模式概述

Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP, 同时Docker网桥是 每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。

启动docker后,使用ifconfig可以看到docker的网桥

Docker-网络模式

然后运行一个容器

Docker-网络模式

Docker-网络模式

1.1 docker网络模式实验

Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过Container-IP访问到容器。如果容器希望外部访问能多访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run创建容器时候通过-p或-P参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器。

docker run -itd --name test1 -P nginx                           #使用大写p进行随机端口映射
docker run -itd --name test2 -p 44541:80 nginx                  #使用小写p加端口进行指定的端口映射

docker ps -a
[root@local ~]# docker run -itd --name test1 -P nginx
b9527c89fb49da2d116f63bd180d41debf4c0f6761e74693930ff757de120952
[root@local ~]# docker run -itd --name test2 -p 44541:80 nginx
5ace523962fc7a84ae9250befdb7e61c67171753bd375689b42ae3cbfb5e5bb7
[root@local ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                     NAMES
5ace523962fc   nginx     "/docker-entrypoint...."   3 seconds ago    Up 2 seconds    0.0.0.0:44541->80/tcp, :::44541->80/tcp   test2
b9527c89fb49   nginx     "/docker-entrypoint...."   42 seconds ago   Up 41 seconds   0.0.0.0:49153->80/tcp, :::49153->80/tcp   test1

访问:192.168.80.20:44541与192.168.80.20:49153

Docker-网络模式

Docker-网络模式

Docker-网络模式

1.2 docker的网络模式

1、Host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

2、Container:创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。

3、None:该模式关闭了容器的网络功能。

4、Bridge:默认为该模式,此模式会为每一个 容器分配、设置IP等,并将容器连接到一个docker0虛拟网桥,通过docker0网桥以及iptables nat表配置与宿主机通信。

自定义网络:安装Docker时,它会自动创建三个网络,bridge (创建容器默认连接到此网络)、none 、host

1)安装Docker时,它会自动创建三个网络,bridge (创建容器默认连接到此网络)、none 、host。

docker network ls   或   docker network list             #查看docker网络列表

NETWORK ID     NAME      DRIVER    SCOPE
3cce31b7db4e   bridge    bridge    local
6f7e4930aab4   host      host      local
2ded2fffb055   none      null      local

Docker-网络模式

2)使用docker run 创建Docker容器时,可以用–net或–network 选项指定容器的网络模式

host模式:使用 --net=host指定。
none模式:使用 --net=none 指定。
container模式:使用 --net=container:NAME_ _or_ ID指定。
bridge模式:使用 --net=bridge指定,默认设置,可省略。

  1. Docker 网络模式详解

2.1 host模式

如果对容器使用主机网络模式,容器的网络堆栈与Docker主机是不隔离的(容器共享主机的网络命名空间),并且容器不会分配自己的ip地址。例如,如果您运行一个绑定到80端口的容器,并且您使用主机网络,那么该容器的应用程序在主机IP地址的80端口上是可用的。

假设容器在使用主机模式网络时没有自己的ip地址,端口映射将不起作用,并且-p,–publish, -p和 –publish-all选项将被忽略,取而代之产生一个警告:
WARNING: Published ports are discarded when using host network mode

主机模式网络对于优化性能非常有用,并且在容器需要处理大量端口的情况下,因为它不需要网络地址转换(NAT),并且不为每个端口创建”userland-proxy”。

主机网络驱动只适用于Linux主机,Docker Desktop for Mac、Docker Desktop for Windows、Docker EE for Windows Server不支持该驱动。

你也可以通过将 --network host传递给 docker service create命令来使用主机网络来创建集群服务。在这种情况下,控制流量(与管理蜂群和服务相关的流量)仍然通过覆盖网络发送,但单独的蜂群服务容器使用Docker守护进程的主机网络和端口发送数据。这就产生了一些额外的限制。例如,如果一个服务容器绑定到80端口,那么在给定的集群节点上只能运行一个服务容器。

2.2 Bridge模式

bridge模式是docker的默认网络模式,不用 --net参数,就是bridge模式。

____相当于Vmware中的nat 模式,容器使用独立network Namespace, 并连接到docker0虚拟网卡。通过docker0网桥以及iptables nat表配置与宿主机通信,此模式会为每一个容器分配Network Namespace、 设置IP等, 并将一个主机上的Docker容器连接到一个虚拟网桥上。

(1) 当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

(2) 从docker0子网中分配一-个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建—对虚拟网卡veth
pair设备。veth设备总是成对出现的,它们组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来。因此,veth设备常用来连接两个网络设备。

(3) Docker将 veth pair设备的一-端放在新创建的容器中,并命名为eth0 ( 容器的网卡),另一端放在主机中,以veth*
这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。

(4) 使用docker run -p时,docker 实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL
查看。

2.3 none模式

使用none模式,Docker 容器拥有自己的Network Namespace, 但是,并不为Docker容器进行任何网络配置。

也就是说,这个Docker容器没有网卡、IP、路由等信息。这种网络模式下容器只有lo回环网络,没有其他网卡。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。

2.4 container模式

这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace(网络命名空间),而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo网卡设备通信。

docker inspect -f '{{.State.Pid}}' 5ace523962fc                         #查看容器进程PID
14685
ls -l /proc/14685/ns
docker run -itd --name test3 --net=container:5ace523962fc centos bash
docker inspect -f '{{.State.Pid}}' 2b7af7c8842d
15832
ls -l /proc/15832/ns

Docker-网络模式

2.5 自定义网络模式

直接使用bridge模式,是无法支持指定IP运行docker的,例如执行以下命令就会报错
docker run -itd --name test4 --network bridge --ip 172.17.0.5 centos:7 /bin/bash

提示只能在自定义网络指定IP启动容器

Docker-网络模式

自定义网络模式创建步骤

1)可以先自定义网络,再使用指定IP运行docker

docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork

#docker1为执行ifconfig -a命令时,显示的网卡名,如果不使用–opt 参数指定此名称,那你在使用ifconfig -a命令查看网络信息时,看到的是类似br-110eb56a0b22 这样的名字,这显然不怎么好记。

#mynetwork为执行docker network list 命令时,显示的bridge网络模式名称。

2)使用指定IP运行docker

docker run -itd --name test5 --net mynetwork --ip 172.18.0.10 centos /bin/bash

实际操作:

1.自定义网络docker1并创建docker

Docker-网络模式

2.宿主机使用 ifconfig可以看到新的虚拟网卡

Docker-网络模式

Docker-网络模式

Original: https://www.cnblogs.com/Canyun-blogs/p/16448300.html
Author: 残-云
Title: Docker-网络模式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/683861/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • GPS的调试与报文解析

    GPS的调试与报文解析 来源 https://zhuanlan.zhihu.com/p/450203417 1.驱动与软件 直接用串口助手的话,可看到GPS发送的信息。当然串口可以…

    技术杂谈 2023年5月30日
    0116
  • docker学习:docker三要素

    镜像 docker 镜像(image)就是一个 只读的模板。镜像可以用来创建docker容器,一个镜像可以创建很多容器 容器 docker 利用容器(Container)独立运行的…

    技术杂谈 2023年7月10日
    084
  • lightdb异常There is a column named <xxx> in table <xxx>, but it cannot be referenced fromthis part of the query

    seehttps://dba.stackexchange.com/questions/239064/error-there-is-a-column-named-in-table-s…

    技术杂谈 2023年6月1日
    083
  • HashMap实现原理分析

    1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时…

    技术杂谈 2023年5月31日
    098
  • 没有发生GC也进入了安全点?这段关于安全点的JVM源码有点意思!

    文末 JVM 思维导图,有需要的可以自取 熟知并发编程的你认为下面这段代码的执行结果是怎么样的? 我如果说,执行流程是: t1 线程和 t2 线程一直执行 num 的累加操作 主线…

    技术杂谈 2023年7月25日
    0103
  • 《睡在天堂的爱》作者:如意

    一天,父亲开口跟我要钱了。最初的借口是身体不太好,要去医院做个全身检查,我便给他寄了钱。 没想到时间不长,他又来了电话,说想买个电动三轮车。我犹豫了一下,他好像听出我的迟疑,说:&…

    技术杂谈 2023年6月1日
    0101
  • 日常踩坑_jpa的踩坑心得

    背景提要 使用jpa的出现了很多问题1、使用between做日期范围查询时报错2、使用@Query注解写原生sql时报错3、使用@where注解自动在sql后添加条件时查不出东西4…

    技术杂谈 2023年7月25日
    073
  • http和https的区别

    http协议和https协议的区别: 传输信息安全性不同、 连接方式不同、 端口不同、 证书申请方式不同 一、传输信息安全性不同 1、http协议:是超文本传输协议,信息是明文传输…

    技术杂谈 2023年5月31日
    089
  • Masked Autoencoders Are Scalable Vision Learners

    https://arxiv.org/pdf/2111.06377.pdf 构建自编码器,对mask的图片进行重建 先看效果 左:mask的图片 中:重建的图片 右:ground t…

    技术杂谈 2023年6月21日
    0112
  • 白鹭和layabox H5游戏开发引擎比较

    选择H5游戏引擎的思考维度 开发语言的支持 2D、3D、VR的支持 性能 引擎的应用广度 设计理念 工作流支持力度 商业化成熟案例 学习资源与技术支持能力 首先,我们要知道,当前主…

    技术杂谈 2023年5月31日
    0132
  • shopify速度评分怎么提升

    shopify速度慢对用户和搜索引擎都不友好,提升shopify速度迫在眉睫!那么,shopify速度评分怎么提升呢?从app、theme code、image、video等几点优…

    技术杂谈 2023年5月31日
    087
  • 腾讯社会招聘内推(长期有效)

    一、内推方式 扫描以下图二维码,选择自己想要投递的岗位直接投递,即可以博主名义进行内推。 如以上二维码过期可添加博主微信,寻求新的内推链接: 二、投递建议 一是工作年限/学历/证书…

    技术杂谈 2023年5月31日
    0104
  • Vue编程式路由导航和路由守卫

    具体编码: methods: { pushShow(m) { this.$router.push({ name: ‘msg-d’, // 就是路由的名称,不能使用path para…

    技术杂谈 2023年6月21日
    099
  • Lua在windows下的安装

    Lua在windows下的安装 posted on2021-10-20 10:11 Ruthless 阅读(139 ) 评论() 编辑 Original: https://www….

    技术杂谈 2023年5月30日
    0104
  • 【SSM框架】Spring笔记 – 事务详解

    1、Spring的事务管理: 事务原本是数据库中的概念,在实际项目的开发中,进行事务的处理一般是在业务逻辑层, 即 Service 层。这样做是为了能够使用事务的特性来管理关联操作…

    技术杂谈 2023年7月10日
    089
  • 内部类

    当目前某个类现在需要一个只能该类使用的类时 1.能修饰类的权限修饰符只能时 默认不写(default) 和公共(public) 2.内部类私有化 正向思考: 四种权限修饰符常用来修…

    技术杂谈 2023年6月21日
    0115
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球