Docker 网络模式

文章目录

  • 一、Docker 网络实现原理
    • 1.容器的端口映射
  • 二、Docker的网络模式
    • 1.Host模式
    • 2.Container模式
    • 3.none模式
    • 4.bridge模式
  • 三、自定义网络
    • 1、查看网络模式列表
    • 2、查看容器信息(包含配置、环境、网关、挂载、cmd等等信息)
    • 3、指定分配容器IP地址
  • 面试题


一、Docker 网络实现原理

1、docker使用linux桥接,在宿主机虚拟一个docker容器网桥(docker0)

2、docker启动一个容器时会根据docker网桥的网段分配给容器一个IP地址,称为Container-IP

3、同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能通过容器的Container-IP直接通信。

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

1.容器的端口映射

端口映射,底层原理实际是做了一个DNAT转换。
方法一:随机映射端口(从32768开始) -P(大P)

docker run -itd  --name=为容器指定名称 -P 镜像名称docker run -itd --name test1 -P nginx					#随机映射端口(从32768开始)

在这里插入图片描述
浏览器访问:http://192.168.40.104:32768
在这里插入图片描述

方法二:指定映射端口 -p(小p)

docker run -itd --name=为容器指定名称 -p 宿主机端口:容器端口 镜像名称docker run -itd --name test2 -p 43000:80 nginx		#指定映射端口

在这里插入图片描述
浏览器访问:http://192.168.40.104:43000
在这里插入图片描述

二、Docker的网络模式

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

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

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

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

1.Host模式

host容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口范围。如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的
NetworkNamespace,而是和宿主机共用一个 Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。使用host模式的容器可以直接使用宿主机的Ip地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是dockerhost 上已经使用的端口就不能再用了,网络的隔离性不好。

在这里插入图片描述

2.Container模式

1、container模式: 使用–net=contatiner:NAME_or_ID 指定

2、这个模式指定新创建的容器和已经存在的一个容器共享一个Network
Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP,端口范围等。可以在一定程度上节省网络资源,容器内部依然不会拥有所有端口。

3、同样,两个容器除了网络方面,其他的如文件系统,进程列表等还是隔离的。

4、两个容器的进程可以通过lo网卡设备通信
在这里插入图片描述

#基于镜像centos:7 创建一个名为test1的容器
[root@localhost ~]#: docker run -itd --name test3 centos:7 /bin/bash
5cde2ff96b6d706fb159b31f3e023cadefbdbd6c2c203a31163f9359f8363e61#查看容器的pid号
[root@localhost ~]#: docker inspect -f '{{.State.Pid}}' test1
22955#查看该容器的命名空间编号
[root@localhost ~]#: ls -l /proc/22955/ns
总用量 0
lrwxrwxrwx. 1 root root 0 818 11:19 ipc -> ipc:[4026532751]
lrwxrwxrwx. 1 root root 0 818 11:19 mnt -> mnt:[4026532749]
lrwxrwxrwx. 1 root root 0 818 11:18 net -> net:[4026532754]
lrwxrwxrwx. 1 root root 0 818 11:19 pid -> pid:[4026532752]
lrwxrwxrwx. 1 root root 0 818 11:19 user -> user:[4026531837]
lrwxrwxrwx. 1 root root 0 818 11:19 uts -> uts:[4026532750]#创建test2容器,使用container网络模式,和test1共享network Namespace
[root@localhost ~]#: docker run -itd --name test4 --net=container:test1 centos:7 /bin/bash
bb4ac525abc96725a8b8ef80c67b1e018ac3cb2b247041d7048cea2e9868f216#查看test2容器的pid
[root@localhost ~]#: docker inspect -f '{{.State.Pid}}' test4
23046#查看该容器的命名空间编号
[root@localhost ~]#: ls -l /proc/23046/ns
总用量 0
lrwxrwxrwx. 1 root root 0 818 11:20 ipc -> ipc:[4026532826]
lrwxrwxrwx. 1 root root 0 818 11:20 mnt -> mnt:[4026532824]
lrwxrwxrwx. 1 root root 0 818 11:20 net -> net:[4026532754]
lrwxrwxrwx. 1 root root 0 818 11:20 pid -> pid:[4026532827]
lrwxrwxrwx. 1 root root 0 818 11:20 user -> user:[4026531837]
lrwxrwxrwx. 1 root root 0 818 11:20 uts -> uts:[4026532825]

3.none模式

1、none模式:使用 --net=none指定

2、使用none 模式,docker 容器有自己的network Namespace ,但是并不为3、Docker 容器进行任何网络配置。也就是说,这个Docker 容器没有网卡,ip, 路由等信息。

3、这种网络模式下,容器只有lo 回环网络,没有其他网卡。

4、这种类型没有办法联网,但是封闭的网络能很好的保证容器的安全性

5、该容器将完全独立于网络,用户可以根据需要为容器添加网卡。此模式拥有所有端口。(none网络模式配置网络)
6、特殊情况下才会用到,一般不用

4.bridge模式

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

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

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

(2)从docker0子网中分配一个IP给容器使用(分配一个和网桥相同网段内的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查看。每个容器有自己独立的命名空间。容器之间通过网桥转发进行通信,成对的网络设备veth pair。
在这里插入图片描述

三、自定义网络

1、查看网络模式列表

[root@localhost opt]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
b87dc8ba51a3   bridge    bridge    local
d218e0246c94   host      host      local
da14a0020e59   none      null      local
[root@localhost opt]# 

在这里插入图片描述

2、查看容器信息(包含配置、环境、网关、挂载、cmd等等信息)

docker inspect  容器ID
例:
[root@localhost opt]# docker images 
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
centos       7         eeb6ee3f44bd   23 months ago   204MB
[root@localhost opt]# docker inspect eeb6ee3f44bd

在这里插入图片描述

3、指定分配容器IP地址

[root@localhost opt]# docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork[root@localhost opt]# docker run -itd --name test1 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash

在这里插入图片描述


面试题

怎么把宿主机的文件传入到容器内部
1、linux 怎么复制
cp 原文件路径 目标文件路径
docker cp /opt/abc 容器id:/opt/abc #======复制到容器中
echo abc123 > ~/test.txt
docker cp ~/test.txt 2592d3fad0fb:/opt/#从容器复制文件到主机
docker cp 2592d3fad0fb:/opt/test.txt ~/abc123.txt

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

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

相关文章

shiro550漏洞分析

准备工作 启动该项目 可以看到没有登录时候,cookie中没有rememberme字段 登录时候 当账号密码输入正确时候 登录后存在该字段 shiro特征: 未登陆的情况下,请求包的cookie中没有rememberMe字段,返回包set-Cookie⾥也没有del…

美创科技一体化智能化公共数据平台数据安全建设实践

公共数据是当今政府数字化转型的关键要素和未来价值释放的核心锚点,也是“网络强国”、“数字中国”的战略性资源。 作为数字化改革先行省份,近年来,浙江省以一体化智能化公共数据平台作为数字化改革的支撑总平台,实现了全省公共数…

2022年12月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:区间合并 给定 n 个闭区间 [ai; bi],其中i=1,2,…,n。任意两个相邻或相交的闭区间可以合并为一个闭区间。例如,[1;2] 和 [2;3] 可以合并为 [1;3],[1;3] 和 [2;4] 可以合并为 [1;4],但是[1;2] 和 [3;4] 不可以合并。 我们的任务是…

数据结构(Java实现)-反射、枚举以及lambda表达式

Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们就可以修改部分…

java对时间序列每x秒进行分组

问题&#xff1a;将一个时间序列每5秒分一组&#xff0c;返回嵌套的list&#xff1b; 原理&#xff1a;int除int会得到一个int&#xff08;也就是损失精度&#xff09; 输入&#xff1a;排序后的list&#xff0c;每几秒分组值 private static List<List<Long>> get…

C语言——指针基本语法

概述 内存地址 在计算机内存中&#xff0c;每个存储单元都有一个唯一的地址(内存编号)。 通俗理解&#xff0c;内存就是房间&#xff0c;地址就是门牌号 指针和指针变量 指针&#xff08;Pointer&#xff09;是一种特殊的变量类型&#xff0c;它用于存储内存地址。 指针的实…

Flutter 项目结构文件

1、Flutter项目的文件结构 先helloworld项目&#xff0c;看看它都包含哪些组成部分。首先&#xff0c;来看一下项目的文件结构&#xff0c;如下图所示。 2、介绍上图的内容。 -litb/main.dart文件&#xff1a;整个应用的入口文件&#xff0c;其中的main函数是整个Flutter应…

Redis与Mysql区别

一、关系型数据库 mysql&#xff0c;pgsql,oracle ,sqlserver 支持连表关联查询&#xff08;会有一些特定的语法特特性&#xff09; 二、非关系型数据库 redis,mongodb,memcache &#xff08;key-value&#xff09; 三、关系型数据库与非关系型数据库的区别&#xff1a; 1&am…

[笔记] 阿里云域名知识

文章目录 前言一、域名二、域名常见分类2.1 泛域名2.2 为什么要设置子域名 三、记录类型3.1 A- 将域名指向一个PV4地址3.2 CNAME- 将域名指向另外一个域名3.3 AAAA- 将域名指向一个PV6地址3.4 MX- 将域名指向邮件服务器地址3.5 SRV- 记录提供特定的服务的服务器使用场景 3.6 TX…

一个集成的BurpSuite漏洞探测插件1.2

4、DNSLog查询漏报 注&#xff1a;扫描结束后才会在BurpSuite的Target、Dashboard模块显示高危漏洞&#xff0c;进程扫描中无法进行同步&#xff0c;但可以在插件中查看&#xff08;涉及到DoPassive方法问题&#xff09;。

说说Flink on yarn的启动流程

分析&回答 核心流程 FlinkYarnSessionCli 启动的过程中首先会检查Yarn上有没有足够的资源去启动所需要的container&#xff0c;如果有&#xff0c;则上传一些flink的jar和配置文件到HDFS&#xff0c;这里主要是启动AM进程和TaskManager进程的相关依赖jar包和配置文件。接着…

Linux

LINUX http://www.kernel.org/(Linux内核源代码官方网站) 驱动 裸机驱动 系统驱动 设备驱动在Linux操作系统中的层次 Linux系统驱动类型 字符设备 块设备 网络设备 Linux内核模块的三要素 入口 出口 许可证 #include <linux/init.h> #include <linux/module.h…

vue3:使用:图片生成二维码并复制

实现在 vue3 中根据 url 生成一个二维码码&#xff0c;且可以复制。 注&#xff09;复制功能 navigator.clipboard.write 只能在安全的localhost 这种安全网络下使用。https中需要添加安全证书&#xff0c;且在域名&#xff08;例&#xff1a;https://www.baidu.com&#xff0…

微服务通信[HTTP|RPC同步通信、MQ异步通信]

概念 A服务调用B服务,B服务调C服务,C服务调D服务,即微服务之间的通信(也可以叫微服务之间的调用) HTTP同步通信 一种轻量级的通信协议,常用于在不同的微服务之间进行通信,也是最简单的通信方式使用REST ful为开发规范&#xff0c;将服务对外暴露的HTTP调用方式为REST API(如GET…

大数据项目实战(安装Hive)

一&#xff0c;搭建大数据集群环境 1.3 安装Hive 1.3.1 Hive的安装 1.安装MySQL服务 1&#xff09;检查是否安装MySQL&#xff0c;如安装将其卸载。卸载命令 rpm -qa | grep mysql 2&#xff09;搜索MySQL文件夹&#xff0c;如存在则删除 find / -name mysql rm -rf /etc/s…

【ELK日志收集系统】

目录 一、概述 1.作用 2.为什么使用&#xff1f; 二、组件 1.elasticsearch 1.1 作用 1.2 特点 2.logstash 2.1 作用 2.2 工作过程 2.3 INPUT 2.4 FILETER 2.5 OUTPUTS 3.kibana 三、架构类型 1.ELK 2.ELKK 3.ELFK 4.ELFKK 四、案例 - 构建ELK集群 1.环境…

【数学建模竞赛】Matlab逻辑规则,结构基础及函数

逻辑基础 逻辑变量 在Matlab中&#xff0c;逻辑变量是一种特殊类型的变量&#xff0c;用于表示逻辑值。逻辑变量只有两个可能的值&#xff1a;true&#xff08;真&#xff09;和false&#xff08;假&#xff09;。在Matlab中&#xff0c;我们可以使用0和1来表示逻辑变量的值。…

存储成本降低85%,携程历史库场景的降本实践

携程&#xff0c;一家中国领先的在线票务服务公司&#xff0c;从 1999 年创立至今&#xff0c;数据库系统历经三次替换。在移动互联网时代&#xff0c;面对云计算卷积而来的海量数据&#xff0c;携程通过新的数据库方案实现存储成本降低 85% 左右&#xff0c;性能提升数倍。本文…

取证工具prodiscover的基本操作

前言提醒 取证工具ProDiscover在网上讲解操作的文章实在太少&#xff0c;一是prodiscover是用于磁盘取证的工具&#xff0c;本身比较小众比不上其他的编程软件能用到的地方多&#xff0c;二是这个工具是用来恢复提取磁盘中被删除的文件&#xff0c;是比较隐晦的软件。 需要注…

【洛谷】P3853 路标设置

原题链接&#xff1a;https://www.luogu.com.cn/problem/P3853 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 整体思路&#xff1a;二分答案 由题意知&#xff0c;公路上相邻路标的最大距离定义为该公路的“空旷指数”。在公路上增设一些路标&…