【14】Docker network | bridge | host | none | container

news2024/11/20 18:35:40

目录

1、Docker 运行的基本流程为:

2、Docker0

 3、Docker默认的三种网络模式

4、Docker的网络命令

5、网络模式

6、实例:

7、bridge模式

8、host模式

9、none模式

10、container模式

11、自定义网络


1、Docker 运行的基本流程为:

  • 1.用户是使用 Docker Client与 Docker Daemon建立通信,并发送请求给后者
  • 2.Docker Daemon作为 Docker 架构中的主体部分,首先提供 Docker Server 的功能使其可以接受 Docker Client的请求。
  • 3.Docker Engine 执行 Docker内部的一系列工作,每一项工作都是以一个Job的形式的存在。
  • 4.Job的运行过程中,当需要容器镜像时,则从 Docker Reisty 中下载境像,并通过镜像管理驱动 Graph driver将下载像以Graph的形式存储。
  • 5.当需要为 Docker创建网络环境时,通过网络管理驱动 Network driver创建并配置 Docker容器网络环境。
  • 6.当需要限制 Docker容器运行资源或执行用户指令等操作时,则通过 Execdriver来完成。
  • 7.Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。

2、Docker0

Docker启动的时候会在主机上自动创建一个docker0网桥,所有容器的启动如果没有指定网络模式的情况下都会挂载到docker0网桥上。这样容器就可以和主机甚至是其他容器之间通讯了。

Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚扣网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker默认指定了docker0接口的地址和子网掩码,让主机和容器之间可以通过网桥相互通信

 3、Docker默认的三种网络模式

[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
919709756d0d   bridge    bridge    local
cf00b70b0a68   host      host      local
b5230e2ac5d0   none      null      local

4、Docker的网络命令

[root@localhost ~]# docker network --help

Usage:  docker network COMMAND

Manage networks

Commands:
  connect     Connect a container to a network                         #连接网络         
  create      Create a network                                         #创建网络
  disconnect  Disconnect a container from a network                    #中断网络
  inspect     Display detailed information on one or more networks     #查看网络的详细信息
  ls          List networks                                            #列出网络
  prune       Remove all unused networks                               #删除没用的网络
  rm          Remove one or more networks                              #删除网络

Run 'docker network COMMAND --help' for more information on a command.

5、网络模式

bridge

  • 为每一个容器分配、设置IP 等,并将容器连接到一个 docker0
  • 虚拟网桥,默认为该模式

host

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

none

  • 容器有独立的 Network namespace,但并没有对其进行任何网络设置,如分配 veth pair 和网桥连接,IP 等。

container

  • 新创建的容器不会创建自己的网卡和配置自己的IP,而是和一个指定的容器共享IP、端口范围等
  • 命令:--network bridge/host/none/container

6、实例:

[root@localhost ~]# docker run -it --name u1 ubuntu /bin/bash
root@af09658d26d3:/# 
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS         PORTS     NAMES
af09658d26d3   ubuntu    "/bin/bash"   11 seconds ago   Up 9 seconds             u1
[root@localhost ~]# docker inspect u1 |tail -n 20 
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "919709756d0d3b1fb9f24c9b10409340ff5e7bedf5e7e3bdc28e9d7d597e126c",
                    "EndpointID": "0bf213d3d0d05cb81a06b1fd98520944205a3860ec02fe965bba1df21fcf523b",
                    "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
                }
            }
        }
    }
]

7、bridge模式

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

2 、docker run 的时候,没有指定network的话默认使用的网桥模式就是bridge,使用的就是docker0。在宿主机ifconfig,就可以看到docker0和自己create的nework的eth0,eth1,eth2. 代表网卡一,网卡二,网卡三...lo代表127.0.0.1即locahost, inet addr用来表示网卡的IP地:

3 、网桥docker0创建一对对等虚拟设备接口一个叫veth,另一个叫eth0,成对匹配。

      3.1 整个宿主机的网桥模式都是docker0,类似一个交换机有一堆接口,每个接口叫veth,在本地主机和 容器内分别创建一个虚拟接口,并让他们彼比联通(这样一对接口叫veth pair) ;

     3.2 每个容器实例内部也有一块网卡,每个接口叫eth0;

     3.3 docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一一匹配。通过上述,将宿主机 上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网关下各自拿到分配的ip,此时两个容器的网络是互通的。

 

8、host模式

容器将不会获得一个独立的Network Namespace而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。

 

 

[root@localhost ~]# docker run -d --network host --name tomcat01 tomcat
08850fe8df1aa99e21d9ec25c9bd3139e9f6fb2333bf35a489f733fefc711c32

9、none模式

禁用网络功能,只有lo标识(就是127.0.0.1表示本地回环)

10、container模式

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

新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。

 

 

[root@localhost ~]# docker run -d -p 8085:8080 --name my_tomcat tomcat
18a598a32b335fb9822c74c6cceeffbbe39a512a615cd41e3c7914e4918eaaa2
[root@localhost ~]# docker run -d --network container:my_tomcat  --name my_tomcat01 tomcat
6720ae57b43a72f7faeb3cda5bf6609f7facb5984434e9633d2a76bce3bde366
[root@localhost ~]# 

以上不适合,因为两个tomcat共用8080

下面做举例 

[root@localhost ~]# docker run -it --name alpine01 alpine /bin/sh
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
59bf1c3509f3: Pull complete 
Digest: sha256:21a3deaa0d32a8057914f36584b5288d2e5ecc984380bc0118285c70fa8c9300
Status: Downloaded newer image for alpine:latest
/ # 
/ # 
/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
40: eth0@if41: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # 

 再另开一个窗口

[root@localhost ~]# docker run -it --network container:alpine01 --name alpine02 alpine /bin/sh
/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
40: eth0@if41: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # ^C

 #再第一个容器停掉后,第二个容器的网络也丢了

11、自定义网络

【1】新建网络

[root@localhost ~]# docker network create my_network
d51fe35c177df6be0a3bf3468e740ecacd650e7ec4113165941a8581a05e2ee9

 【2】先建立一个容器(用自定义的额网络)

[root@localhost ~]# docker run -it --network my_network --name alpine03 alpine sh

/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
7: eth0@if8: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
       valid_lft forever preferred_lft forever

 【3】再用自定义的网络建立一个容器,并用名字ping,发现可以ping通

[root@localhost ~]# docker run -it --network my_network --name alpine04 alpine sh

/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
9: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.3/16 brd 172.18.255.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # ping alpine03
PING alpine03 (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.113 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.274 ms
^C
--- alpine03 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.113/0.193/0.274 ms
/ # 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/162881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UDS诊断系列介绍10-28服务

本文框架1. 系列介绍1.1 28服务概述2. 28服务请求与应答2.1 28服务请求2.2 28服务正响应2.3 否定应答3. Autosar系列文章快速链接1. 系列介绍 UDS&#xff08;Unified Diagnostic Services&#xff09;协议&#xff0c;即统一的诊断服务&#xff0c;是面向整车所有ECU的一种诊…

session利用的小思路

session利用的小思路 前言 做题的时候经常考到session利用&#xff0c;常见的基本就两种&#xff0c;session文件包含和session反序列化&#xff0c;之前没有详细总结过&#xff0c;就写写吧。 session文件包含 php.ini session的相关配置 session.upload_progress.enabl…

15、ThingsBoard-自定义阿里云SMS规则节点

1、概述 一个物联网平台承载着很多设备的连接,当设备出现异常的时候,能够快速的通知到运维管理员是非常重要的,thingsboard提供了自定义配置邮箱,但是它对支持发送短信的不是很友好,都是国外的sms服务商,我反正是不用那个,在国内常见就是阿里、腾讯、华为、七牛常用的s…

CORBA,Common Object Request Broker Architecture 简介

CORBA&#xff0c;Common Object Request Broker Architecture 简介 1. 简介 CORBA&#xff08;Common ObjectRequest Broker Architecture&#xff0c;公共对象请求代理体系结构&#xff09;是由OMG组织&#xff08;OMG组织是一个国际性的非盈利组织&#xff0c;其职责是为应…

【17】Docker | CAdvisor_InfluxDB_Granfana | 成功安装

目录 1、查看目前docker容器的状态 2、三大组件 【1】、CAdvisor 【2】、InfluxDB 【3】、Granfana 3、用docker-compose安装三个组件 4、三大组件的登录 【1】浏览cAdvisor收集服务&#xff0c;http://ip:8080 【2】浏览influxdb存储服务&#xff0c;http://ip:8083 …

python日志处理模块讲解-loguru

说明&#xff1a; 本篇文章主要讲的是python日志模块loguru详解&#xff0c;感兴趣的同学赶快来看一看吧。 背景&#xff1a; 在部署一些定时运行或者长期运行的任务时&#xff0c;为了留存一些导致程序出现异常或错误的信息&#xff0c;通常会采用日志的方式来进行记录这些…

运放指标-压摆率SR

1. 压摆率SR 处理交流信号时&#xff0c;压摆率是运放器件重要的指标。其表示运放输出电压的转换速率。在高频信号时&#xff0c;若压摆率不够&#xff0c;则运放输出的信号会变形&#xff0c;导致不满足要求。其实际就是运放输出信号的分辨率&#xff0c;只有分辨率足…

机器学习中的数学基础(四):概率论

机器学习中的数学基础&#xff08;四&#xff09;&#xff1a;概率论4 概率论4.1 一些概念4.2 二维随机变量4.2.1 离散型4.2.2 连续型4.3 边缘分布4.3.1 离散型边缘分布4.3.2 连续型边缘概率密度4.4 期望4.4.1 一维期望4.4.2 二维期望4.5 马尔可夫不等式4.6 切比雪夫不等式在看…

Vue2.0开发之——组件数据共享-Eventbus(39)

一 概述 兄弟组件之间数据共享的方案—EventBusEventBus的使用步骤EventBus的使用示例 二 兄弟组件之间数据共享的方案—EventBus 在 vue2.x 中&#xff0c;兄弟组件之间数据共享的方案是EventBus。 三 EventBus的使用步骤 创建 eventBus.js 模块&#xff0c;并向外共享一…

个人项目部署在云服务器上以及购买云服务器后如何操作

一. 购买云服务器后简单的操作1.镜像: 镜像可以认为是云服务器的操作系统&#xff0c;选择什么镜像云服务器就安装对应的操作系统。云服务器操作系统主要分为两大类&#xff0c;即Linux和Windows. 本次说明在linux操作系统下进行项目的部署, 那么在选择镜像的时可以选择Linux镜…

linux系统中利用QT实现串口通信的方法

大家好&#xff0c;今天主要和大家分享一下&#xff0c;如何使用QT中的串口通信方法。 目录 第一&#xff1a;资源简介 第二&#xff1a;应用实例的具体实现 第三&#xff1a;程序运行效果 第一&#xff1a;资源简介 在开发板的资源中出厂系统中&#xff0c;默认已经配置了两…

ASP.NET Core 3.1系列(27)——Autofac使用JSON、XML配置文件

1、前言 很多IoC框架都支持以配置文件的形式实现接口和类的注册&#xff0c;Autofac当然也不例外。本文就来介绍一下如何利用JSON、XML等配置文件来实现接口和类的注册。 2、定义接口和类 这里搭建了一个简单的分层项目&#xff0c;如下图所示&#xff1a; Repository层代码…

Verilog HDL

一、基础语法 1. 基础知识 &#xff08;1&#xff09;逻辑值 逻辑0&#xff1a;低电平。 逻辑1&#xff1a;高电平。 逻辑X&#xff1a;未知&#xff0c;可能是高电平&#xff0c;也可能是低电平。 逻辑Z&#xff1a;高阻态&#xff0c;外部没有激励信号&#xff0c;是一…

读书笔记《深度学习与图像识别原理与实践 大白话讲解对小白易懂》2022-8-5

开始 目录前言1. 常见深度学习框架2. 图像分类算法2.1 传统类2.2 机器学习2.2.1 人工神经网络&#xff08;神经元&#xff09;2.2.2 卷积神经网络3. 目标检测算法3.1 分类定位&#xff08;单目标&#xff09;3.2 分类定位&#xff08;多目标&#xff0c;目标检测&#xff09;3.…

近端串扰NEXT和远端串扰的ADS仿真

目录 近端串扰NEXT和远端串扰FEXT 串扰仿真原理图 NEXT特征 减少NEXT的措施 FEXT特征 减少FEXT的措施 本文记录近阶段对近端串扰和远端串扰概念的理解。 经验法则&#xff1a;最大可容许串扰大约是信号摆幅的5%。 近端串扰NEXT和远端串扰FEXT 静态线上的靠近驱动源的一端…

CTF中常用的http知识点总结

目录 前提知识 请求头大全 响应头大全 请求方法大全 常见考点 从某ip访问 从某网站跳转 身份为admin才可以访问 从某某浏览器访问 靶场练习 [极客大挑战 2019]Http Become A Member 前提知识 请求头大全 Header解释示例Accept指定客户端可以接收的内容类型Accep…

逆向分析资料汇总

商务合作 2023年招聘 ​安全业务和软件业务(商务合作) 移动端漏洞或隐私合规检测 APP常见漏洞扫描器 ​移动端APP隐私合规检测 2023年逆向分析资料汇总 移动端漏洞/安全检测与隐私合规解决方案 Frida逆向分析基础 APP基于Frida脱壳 frida hook so导出或未导出函数的方法…

【写作能力提升】写作小白需要避免的五个写作误区和灵魂五问

“ 【写作能力提升】系列文章&#xff1a; 为什么建议你一定要学会写作? 手把手教你快速搞定4个职场写作场景 5种搭建⽂章架构的⽅法”免费赠送! ”一、前言 Hello&#xff0c;我是小木箱&#xff0c;今天主要分享的内容是: 写作小白需要避免的五个写作误区和灵魂五问。 二、 …

E. The Human Equation(前缀和与差分数组)

嘤&#xff0c;总算过了 题目大意&#xff1a;可以从一个序列中按照顺序&#xff08;可间断&#xff09;选出一堆数&#xff0c;选出的这些数可以做以下操作&#xff1a; 奇数位置&#xff0b;1&#xff0b;1&#xff0b;1&#xff0c;偶数位置−1- 1−1偶数位置&#xff0b;1…

微信小程序项目实例——食堂吃哪个

微信小程序项目实例——食堂吃哪个 文章目录微信小程序项目实例——食堂吃哪个一、项目展示二、操作流程和核心代码三、效果展示文末项目代码见文字底部&#xff0c;点赞关注有惊喜 一、项目展示 这是一款娱乐性的小程序 目的是为了解决大学生吃饭的选择困难症 用户可以选择不…