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.mfbz.cn/a/101609.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python之分支-循环

Python之分支-循环 程序控制 顺序 按照先后顺序一条条执行。 a 1 b a 1 c max(a, b) d c 100 # 这是顺序执行分支 根据不同的情况判断,条件满足执行某条件下的语句。 if 真(True)真执行的语句体passpassif True:pass else:pass # 单分支if语句这行的最后…

【方案】基于视频与AI智能分析技术的城市轨道交通视频监控建设方案

一、背景分析 地铁作为重要的公共场所交通枢纽,流动性非常高、人员大量聚集,轨道交通需要利用视频监控系统来实现全程、全方位的安全防范,这也是保证地铁行车组织和安全的重要手段。调度员和车站值班员通过系统监管列车运行、客流情况、变电…

查询优化器内核剖析之查询的执行与计划的缓存 Hint 提示

本篇议题如下: 查询的执行与计划的缓存 Hint 提示 首先看到第一个议题 查询的执行与计划的缓存 一旦查询被优化之后,存储引擎就使用选中的执行计划将结果返回,而被使用的这个执行 计划就会被保存在内存中一个被称之为“计划缓存”的地方,从…

【负载均衡】常见的负载均衡策略有哪些?

文章目录 前言负载均衡分类常见负载均衡策略小结 前言 负载均衡策略是实现负载均衡器的关键,而负载均衡器又是分布式系统中不可或缺的重要组件。使用它有助于提高系统的整体性能、可用性、可靠性和安全性,同时支持系统的扩展和故障容忍性。对于处理大量…

Linux常用命令——cupsdisable命令

在线Linux命令查询工具 cupsdisable 停止指定的打印机 补充说明 cupsdisable命令用于停止指定的打印机。 语法 cupsdisable(选项)(参数)选项 -E:当连接到服务器时强制使用加密; -U:指定连接服务器时使用的用户名; -u&#…

程序开发:构建功能强大的应用的艺术

程序开发是在今天的数字化时代中扮演重要角色的一项技术。通过编写代码,开发人员能创造出无数不同的应用,从简单的计算器到复杂的社交平台。电子商务应用、在线教育平台、医疗记录系统等,都重视程序开发的重要性,通过这其中的交互…

[C/C++]天天酷跑超详细教程-中篇

个人主页:北海 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏✨收录专栏:C/C🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!&#x1f9…

【08期】ArrayList常见面试题

简介 ArrayList是我们开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据,ArrayList是线程不安全的,非常适合用于对元素进行查找,效率非常高。 线程安全性 对ArrayList的操作…

Linux整合seata

1、到官网下载seata,这里以ZIP为例 2、使用远程工具上传ZIP包 3、通过命令解压 unzip seata-server-1.7.0.zip4、修改配置文件、新建表,参考我之前的文章 分布式系统的多数据库,实现分布式事务回滚(1.7.0 seata整合2.0.4nacos…

2023开学礼新疆理工学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》许少辉新财经理工

2023开学礼新疆理工学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》许少辉新财经理工

怎样来实现流量削峰方案

削峰从本质上来说就是更多地延缓用户请求,以及层层过滤用户的访问需求,遵从“最后落地到数据库的请求数要尽量少”的原则。 1.消息队列解决削峰 要对流量进行削峰,最容易想到的解决方案就是用消息队列来缓冲瞬时流量,把同步的直…

[HNCTF 2022] web 刷题记录

文章目录 [HNCTF 2022 Week1]easy_html[HNCTF 2022 Week1]easy_upload[HNCTF 2022 Week1]Interesting_http[HNCTF 2022 WEEK2]ez_SSTI[HNCTF 2022 WEEK2]ez_ssrf [HNCTF 2022 Week1]easy_html 打开题目提示cookie有线索 访问一下url 发现要求我们输入手机号,可是只…

又一关键系统上线,理想车云和自动驾驶系统登陆OceanBase

8 月 1 日,理想汽车公布 7 月交付数据,理想汽车 2023 年 7 月共交付新车 34,134 辆,同比增长 227.5%,并已连续两个月交付量突破三万。至此,理想汽车 2023 年累计交付量已经达到 173,251 辆,远超 2022 年全年…

【MATLAB第71期】基于MATLAB的Abcboost自适应决策树多输入单输出回归预测及多分类预测模型(更新中)

【MATLAB第71期】基于MATLAB的Abcboost自适应决策树多输入单输出回归预测及多分类预测模型(更新中) 一、效果展示(多分类预测) 二、效果展示(回归预测) 三、代码获取 CSDN后台私信回复“71期”即可获取下…

Python Opencv实践 - 凸包检测(ConvexHull)

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/stars.png") plt.imshow(img[:,:,::-1])img_contour img.copy() #得到灰度图做Canny边缘检测 img_gray cv.cvtColor(img_contour, cv.COLOR_BGR2GRAY) edges…

NoSQL技术——Redis

简单介绍 Redis是当下最流行的NoSQL数据库。在Redis中,数据的存储格式是以键值对的方式进行存储的。在键值对的存储形式中,值除了是常见的字符串,也可以是类似于Json对象的形式,或者是List,Map等数组格式,…

vulnhub渗透测试靶场练习2

靶场介绍 靶场名:easy_cloudantivirus 靶场地址:https://www.vulnhub.com/entry/boredhackerblog-cloud-av,453 环境搭建 依旧使用VM VirtualBox搭建靶场,攻击机使用的是VMware中的kali,需要将VMware虚拟机kali和virtualbox靶机…

CSS中如何实现元素的旋转和缩放效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 元素的旋转和缩放效果⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏…

Ceph构件及组件分析

Ceph存储架构 Ceph 存储集群由几个不同的daemon组成,每个daemon负责Ceph 的一个独特功能并。每个守护进程是彼此独立的。 下面将简要介绍每个Ceph组件的功能: RADOS(Reliable Autonomic Distributed Object Store, RADOS) RADOS…

Win10搭建VisualSvn Server

Win10搭建VisualSvn Server 目录 Win10搭建VisualSvn Server一、下载VisualSvn Server安装包二、安装VisualSvn Server三、配置和使用VisualSVN Server四、添加用户及权限设定方法五、创建目录及配置权限 1、服务端:有集成了Subversion和Apache、安装使用非常简单且…