目录

1、云的种类

2、IaaS/Paas/Saas/

2.1、扩展——BaaS(Blockchain as a Service)区块链即服务

3、常见文件的作用

3.1、/etc/hosts

3.1.1、/etc/hostname

3.2、/etc/resolv.conf

3.2.1、和/etc/sysconfig/network-scripts/ifcfg-ens33文件的关系

3.2.2、若是ping 114.114.114.114能通,但是ping 域名不通怎么解决

3.3、docker里边也有这些文件

3.4、网关和dns服务器

3.4.1、上网是否一定要填写dns服务器

3.5、json

4、常见进程的作用

5、link

6、容器网络类型

6.1、桥接模式(bridge)

6.2、host模式

6.3、container模式

6.4、none模式

6.5、总结和overlay模式

6.6、怎么查看某种模式有哪些容器在使用呢?

6.6.1、查看开启容器之后网卡的状态

7、docker底层的隔离机制

7.1、命名空间的类别

7.2、隔离实验

7.3、创建了一个命名空间在宿主机是怎么体现的


软件介绍:

  • openstack:云计算的软件,将多台服务器的资源整合,然后再分配,分配的是一个一个的虚拟机,例如:云服务器,其实就是一台虚拟机。开源并且免费的云计算软件

云计算的好处:节约成本、集中力量做事情,集中调度

1、云的种类

  • 公有云:公开给大家使用(拥有)的云,个人、企业和政府都可以购买使用的。例如:阿里云,腾讯云,华为云。b2b:business to business,企业和企业之间做生意;b2c:business to customer,企业对个人做生意。
  • 私有云:私人拥有的,只是自己使用,不对外公开的云。
  • 混合云:一部分是公有云,另外一部分是私有云,不同的业务会使用不同的云,但是他们之间是有联系的。
  • 云原生:对于k8s而言,k8s是docker的集群容器的编排工具。k8s是用来管理不同的机器上的docker容器的。
    • 云原生技术:就是和k8s相关的计算。例如:docker、prometheus(容器监控的软件)、Etcd(存放数据的地方)

2、IaaS/Paas/Saas/

定义:

  • IaaS,基础设施即服务(Infrastructure as a Service)给其他人或者企业提供虚拟机(cpu、内存、disk、网络等),这就是一种服务,花钱购买这个服务你就可以得到虚拟机了,你就可以去安装你需要的软件了。可以理解为卖云服务器
  • PaaS,平台即服务(Platform as a Service)云平台对外提供某个软件的服务,例如:数据库平台可以对外提供数据库服务。各大云(阿里云、ucloud、七牛云、金山云等,提供存储服等某个具体的功能服务)可以理解为卖功能的服务
  • SaaS,软件即服务(Software as a Service)使用之后你可以不需要安装相应的软件就能够使用的服务。例如:你使用wps云,可以不用安装wps软件。可以理解为:这是在卖软件,这是在云平台运行的软件,你不需要安装部署

2.1、扩展——BaaS(Blockchain as a Service)区块链即服务

给别人提供区块链的服务,属于PaaS的。BaaS

3、常见文件的作用

3.1、/etc/hosts

# 这个文件是用来给本机做域名解析的,DNS是给所有人做域名解析的
# 这两个的顺序为:先看本机的/etc/hosts文件是否有相关的域名解析,如果没有再问DNS服务器
[root@centos7-docker containers]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6# 访问域名解析IP 

3.1.1、/etc/hostname

存放主机名字的文件

[root@centos7-docker containers]# cat /etc/hostname
centos7-docker

3.2、/etc/resolv.conf

容器里的dns服务器的地址使用的是宿主机的dns的配置

[root@centos7-docker containers]# cat /etc/resolv.conf # 存放dns服务器的文件
# Generated by NetworkManager
search localdomain
nameserver 192.168.29.2

3.2.1、和/etc/sysconfig/network-scripts/ifcfg-ens33文件的关系

这里边的"ifup ens33"是centos8刷新网络服务的命令,centos7刷新网络服务的命令为"service network restart"。刷新网络服务,会将ifcfg-ens33这个文件里的dns1和dns2的IP地址写到"/etc/resolv.conf"文件里边。

3.2.2、若是ping 114.114.114.114能通,但是ping 域名不通怎么解决

可能就是"/etc/resolv.conf"这个文件出了问题

[例子],我们故意错误的修改了/etc/resolv.conf这个文件

现在这个文件是这个样子的

[ping实验]

3.3、docker里边也有这些文件

这三个文件中,只有容器里的resolv.conf文件和宿主机的这个文件的配置是一样的。

最后这一行是容器的IP地址对应的容器的标志

这里可以看到/etc/resolv.conf文件和这里的resolv.conf文件是一致的

3.4、网关和dns服务器

  • 网关:是路由器LAN口,这个LAN口的IP地址是多少,其他的机器要上网的话,就填这个。
  • dns:做域名解析使用的。例如:www.baidu.com对应的IP地址是14.215.177.39;www.qq.com对应的IP地址是121.14.77.201

3.4.1、上网是否一定要填写dns服务器

答:不一定。因为我们要是上网的话一定会填网关的,若是网关不知道这个域名对应的IP,可以向全球的dns服务器(114.114.114.114)要数据。所以我们填数据的时候可以不填dns服务器。

3.5、json

json(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。是一种用来描述数据的格式。数据的形式是文本。格式是:key:value,是非关系型的数据或者说是非结构化的数据。实现各种各样的程序之间交换数据(传递数据)的格式。

优点:

  • 文本的数据,而且容易看懂,不需要再安装额外的软件
  • 是key和value的形式,结构清晰
[root@centos7-docker 8d5390c5335a4225bcda251597765c4c949f8a0b2c209712b0e189ecaa5b5bc3]# cat hostconfig.json
{"Binds":null,"ContainerIDFile":"","LogConfig":{"Type":"json-file","Config":{}},"NetworkMode":"default","PortBindings":{"80/tcp":[{"HostIp":"","HostPort":"7790"}]},"RestartPolicy":{"Name":"no","MaximumRetryCount":0},"AutoRemove":false,"VolumeDriver":"","VolumesFrom":null,"CapAdd":null,"CapDrop":null,"CgroupnsMode":"host","Dns":[],"DnsOptions":[],"DnsSearch":[],"ExtraHosts":null,"GroupAdd":null,"IpcMode":"private","Cgroup":"","Links":null,"OomScoreAdj":0,"PidMode":"","Privileged":false,"PublishAllPorts":false,"ReadonlyRootfs":false,"SecurityOpt":null,"UTSMode":"","UsernsMode":"","ShmSize":67108864,"Runtime":"runc","ConsoleSize":[0,0],"Isolation":"","CpuShares":0,"Memory":0,"NanoCpus":0,"CgroupParent":"","BlkioWeight":0,"BlkioWeightDevice":[],"BlkioDeviceReadBps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteIOps":null,"CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpusetCpus":"","CpusetMems":"","Devices":[],"DeviceCgroupRules":null,"DeviceRequests":null,"KernelMemory":0,"KernelMemoryTCP":0,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":null,"OomKillDisable":false,"PidsLimit":null,"Ulimits":null,"CpuCount":0,"CpuPercent":0,"IOMaximumIOps":0,"IOMaximumBandwidth":0,"Mounts":[{"Type":"volume","Source":"FanMY","Target":"/usr/share/nginx/html"}],"MaskedPaths":["/proc/asound","/proc/acpi","/proc/kcore","/proc/keys","/proc/latency_stats","/proc/timer_list","/proc/timer_stats","/proc/sched_debug","/proc/scsi","/sys/firmware"],"ReadonlyPaths":["/proc/bus","/proc/fs","/proc/irq","/proc/sys","/proc/sysrq-trigger"]}

4、常见进程的作用

  • docker-proxy:这个进程是专门负责端口映射(监听端口的)
  • dockerd:docker server的进程
  • containerd:真个容器的管理进程
  • containerd-runc-v2:具体某个容器对应的进程

5、link

使得容器之间可以使用主机名访问,在容器的/etc/hosts文件里添加名字和名字对应的IP地址

[root@centos7-docker ~]# docker run -d --name xie-redis-1 -p 6379:6379 redis
88cbb66d64f1f9a657bf534aa7dacda99bb5082391d603ff303a330f68634ce6
[root@centos7-docker ~]# docker run -d --name xie-nginx-2 --link xie-redis-1:redis daocloud.io/nginx
e51ee3ca7c32649c3eb14cea6d63010679b9901ca0e7bf74cd9fbf5c7fd72455
# --link xie-redis-1:redis 将xie-redis-1这个容器起一个别名叫redis,目的是在xie-nginx-2这个容器的/etc/hosts文件里添加一条解析记录。这个记录一个IP地址等于xie—redis-1。这个别名是在/etc/hosts文件里的名字

[结果查看]

[root@centos7-docker ~]# docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS          PORTS                                       NAMES
e51ee3ca7c32   daocloud.io/nginx   "/docker-entrypoint.…"   27 seconds ago   Up 26 seconds   80/tcp                                      xie-nginx-2
88cbb66d64f1   redis               "docker-entrypoint.s…"   8 minutes ago    Up 8 minutes    0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   xie-redis-1
[root@centos7-docker ~]# docker exec -it xie-nginx-2 /bin/bash
root@e51ee3ca7c32:/# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.3  redis 88cbb66d64f1 xie-redis-1   # 加的内容就是这一条,名字和名字所对应的IP地址
172.17.0.2  e51ee3ca7c32

6、容器网络类型

默认的私有网络,所有的容器上网都需要经过宿主机。底层使用的是iptable的SNAT和DNAT

[root@centos7-docker ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
3a5042a29ad9   bridge    bridge    local
76addee0beab   host      host      local
fbc44a618d8f   none      null      local# 一个命名空间就是一个网段

我们使用"docker network create"创建一个新的namespace,并

使用"docker container inspect haung-nginx-1"命令查看这个容器的IP地址

在用这个命令查看其他容器的IP地址

这个证实了一个命令空间就是一个网段

[docker有四种网络类型]

Docker网络模式 配置 说明
host模式 –net=host 容器和宿主机共享Network namespace。
container模式 –net=container:NAME_or_ID 容器和另外一个容器共享Network namespace。 kubernetes中的pod就是多个容器共享一个Network namespace。
none模式 –net=none 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等。
bridge模式 –net=bridge (默认为该模式)

这里有篇关于docker的四种模式写的挺好的文章大家可以作为参考: Docker四种网络模式 - 简书

6.1、桥接模式(bridge)

容器的网卡是虚拟出来的叫做veth

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

从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。

bridge模式是docker的默认网络模式,不写--net参数,就是bridge模式。使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。

bridge模式如下图所示:

[root@centos7-docker ~]# docker container inspect xie-nginx-2 |grep -A 5 NetworkSettings"NetworkSettings": {"Bridge": "","SandboxID": "e9237247fd31fbec7796415cde5d08adec4ac345d145ab9a6543646c67003432","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,

6.2、host模式

如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。

Host模式如下图所示:

6.3、container模式

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

Container模式示意图:

类似于k8s的pod

6.4、none模式

使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。

这种网络模式下容器只有lo回环网络,没有其他网卡。none模式可以在容器创建时通过--network=none来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。

None模式示意图:

6.5、总结和overlay模式

以上四种模式,只是考虑宿主机和容器之间的通信,在同一台机器里。若是想要实现不同机器之间的通信,要使用overlay模式。可以参考这文章

Docker Overlay 工作原理 - kevin.Xiang - 博客园

[overlay]

实现跨主机的docker的容器之间的通信

Overlay网络实际上是目前最主流的容器跨节点数据传输和路由方案。overlay网络用于连接不同机器上的docker容器,允许不同机器上的容器相互通信,同时支持对消息进行加密,以此达到跨主机的docker容器之间的通信。

6.6、怎么查看某种模式有哪些容器在使用呢?

[root@centos7-docker ~]# docker start fan-mysql-1  # 先启动一个容器
fan-mysql-1
[root@centos7-docker ~]# docker network inspect bridge
.....  # 内容省略只显示要想的部分"ConfigOnly": false,"Containers": {"17fd266ec3a6298dfc15063358270c7eaf4b008258124e0d8b50f17c3e589eca": {"Name": "fan-mysql-1","EndpointID": "77641ad219b6b09726b6a66e8a62f6bd018bb38b301f6af5ee0708ac69002c14","MacAddress": "02:42:ac:11:00:02","IPv4Address": "172.17.0.2/16","IPv6Address": ""}
.....

6.6.1、查看开启容器之后网卡的状态

[root@centos7-docker ~]# ip add
...
# 我们最开始没有容器的时候,这个docker0的state是down的;我们一开启容器这个就变成up了
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:43:29:76:b4 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:43ff:fe29:76b4/64 scope link valid_lft forever preferred_lft forever
5: vethec47f5d@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 8a:f4:22:a8:9b:49 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet6 fe80::88f4:22ff:fea8:9b49/64 scope link valid_lft forever preferred_lft forever
# 这个是刚刚开启的容器的网络连接
....

7、docker底层的隔离机制

  • namespace,命名空间:Namespace是内核的一个功能,用来给进程隔离一系列(网络、文件系统、进程等)系统资源

命名空间( namespace )是 Linux 内核的一个强大特性,为容器虚拟化的实现带来极大便利,利用这 特性,每个容器都可以拥有自己单独的命名空间,运行在其中的应用都像是在独立的操作系统环境中一样 命名 间机制保证了容器之间彼此互不影响。
在操作系统中,包括内核、文件系统、网络、进程号( Process ID, PID )、用户号( UserID, UID 进程间通信( Inter Process Communication, IPC )等资源,所有的资源都是应用进程直接共享的 要想实现虚拟化,除了要实现对内存、 CPU 、网络 IO 、硬盘 IO 、存储空间等的限制外,还要实现文件系统、网络、 PID UID IPC 等的相互隔离 前者相对容易实现一些,后者则需要宿主主机系统的深入支持。
随着 Linux 系统对于命名空间功能的逐步完善,现在已经可以实现这些需求,让进程在彼此隔离的命名空间中运行 虽然这些进程仍在共用同 个内核和某些运行时环境(runtime ,例如一些系统命令和系统库),但是彼此是不可见的,并且认为自己是独占系统的
Docker 容器每次启动时候,通过调用 func setNamespaces(daemon *Daemon, s *specs. Spec, c *container.Container) error 方法来完成对各个命名 间的配置

  • Control Groups:对资源进行限制。例如:cpu、内存、磁盘、带宽等

7.1、命名空间的类别

namespace类别 隔离资源 系统调用参数 内核版本 Docker中的例子
Mount namespace(挂载命名空间) 挂载点(文件系统) CLONE_NEWNS 2.4.19 独立的挂载点
UTS Namespace 主机名和域名 CLONE_NEWUTS 2.6.19 独立的hostname
IPC Namespace 信号量、消息队列和共享内存 CLONE_NEWIPC 2.6.19
PID Namespace(进程命名空间) 进程ID CLONE_NEWPID 2.6.24 容器进程PID为1
Network Namespace(网络命名空间) 网络设备,端口,网络栈 CLONE_NEWNET 2.6.24 独立的网络和端口
User Namespace(用户命名空间) 用户/用户组 CLONE_NEWUSER 3.8 独立的用户ID

参考的博客可以参考这一篇:namespace · Docker 学习笔记

命名空间的作用就是用来隔离空间

7.2、隔离实验

[实验前提]

用同一个centos镜像创建两个容器一个命名"fan-centos-1",一个命名"fan-centos-2"。

但是这个ping到不同的命名空间的接口可以,但是不能够做路由。即172.18.0.4能够ping  172.17.0.1,但是不能够ping 172.17.0.2。

7.3、创建了一个命名空间在宿主机是怎么体现的

[docker]六、云计算和云的种类、4种容器网络类型、docker中常见文件和进程的作用、json、link、docker底层的隔离机制相关推荐

  1. 【云安全系列】云原生场景下的容器网络隔离技术

    一.研究背景 随着云计算时代的到来,尤其是容器化技术的飞速发展,云原生作为云计算的未来阶段,其安全势必成为云安全的主要战场.从目前的云原生环境来看,云原生网络安全问题层出不穷,威胁程度逐渐上升,从业人 ...

  2. docker 启动时指定需要绑定的网卡_Docker容器网络-基础篇

    Docker的技术依赖于Linux内核的虚拟化技术的发展,Docker使用到的网络技术有Network Namespace.Veth设备对.Iptables/Netfilter.网桥.路由等.接下来, ...

  3. 云计算与云原生 — Docker 容器技术完全解析

    目录 文章目录 目录 Docker Overview Docker 的组件 Docker 的软件架构 Docker Client Docker Daemon Docker Registry Graph ...

  4. [云原生专题-18]:容器 - docker自带的集群管理工具swarm - 手工搭建集群服务全过程详细解读

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  5. Spring Boot与Docker(一):微服务架构和容器化概述

    本文讲的是Spring Boot与Docker(一):微服务架构和容器化概述,[编者的话]本篇是<使用Spring Boot和Docker构建微服务架构>系列四部曲的第一篇,本篇将会对我们 ...

  6. Docker容器网络实例管理

    Docker容器网络实例管理 Linux内核实现名称空间的创建 ip netns命令 可以借助ip netns命令来完成对 Network Namespace 的各种操作.ip netns命令来自于i ...

  7. Docker: docker network 容器网络

    容器网络命令 : docker network --help 常用的是 docker network create/ls/rm/inspect 容器网络类型,一共有以下5种 bridge –net=b ...

  8. 以Mesos和Docker为核心的云操作系统

    11月18日,北京数人云COO谢乐冰老师在DBA+社群中间件用户组进行了一次主题为"以Mesos和Docker为核心的云操作系统"的线上分享.小编特别整理出其中精华内容,供大家学习 ...

  9. [ 云计算 华为云 ] 华为云开天 aPaaS:构建高效的企业数字化平台(下)

    文章目录 前言 四.华为云开天aPaaS 核心功能 4.1 业务模型管理 4.2 连接器 4.2.1 连接器的种类 4.2.1.1 公共连接器 4.2.1.2 私有连接器 4.2.2连接器的开发步骤 ...

  10. 云计算与云原生技术系列文章

    目录 文章目录 目录 云计算 云原生 云原生思想 容器技术 Docker containerd Kata Container APIGW ETCD 服务治理 - Service Mesh FaaS O ...

最新文章

  1. java 文件上传ssm_ssm框架下实现文件上传
  2. 想要成为JAVA高手的25个学习目标
  3. java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x12问题
  4. 设计一个名为complex的类来表示复数_complex类java解决
  5. 仿真器和模拟器的区别是什么?
  6. 利用Pin实现CodeCoverage
  7. 给用户添加sudo功能
  8. 富文本 NSAttributedString
  9. Entity Framework的简单使用之一对一关系
  10. Mac下使用Docker快速搭建pinpont追踪系统APM
  11. 如何调试一个无法重现的错误?
  12. springboot2 druid监控控制台去掉下面的图片广告和powered by
  13. 【格式化文档】ISO27001控制措施+ISO27002实施指南 【上】
  14. 用友YonSuite前后端一体化数智赋能,有化妆品的地方就有老中医
  15. 写在1024,致程序员致程序员节致自己
  16. 微信小程序iBeacon获取问题(wx.onBeaconUpdate不执行)【已解决】
  17. UG NX 12 布尔运算
  18. 2022重装Win7系统(64位)提示Windows update无法搜索新更新错误代码80072EFE
  19. 已知销售额怎么计算成本_知道销售总额怎么计算成本价?
  20. LaTeX tabular实现垂直居中

热门文章

  1. 深度理解感受野(一)什么是感受野?
  2. 文案撰写方法三:制造反差
  3. 《中国睡眠研究报告2022》:被调查大学生睡前不看手机的不足3%
  4. AMD EPYC(霄龙)Genoa服务器 | 综合评测
  5. 天行健,君子以自强不息;地势坤,君子以厚德载物 释意
  6. YDOOK:STM32: CH340G 芯片介绍 USB 转串口芯片
  7. 笔记本计算机无法开机怎么办,笔记本开机按了没反应 笔记本电脑开不了机怎么办...
  8. python项目实战:免费下载某平台任意付费音乐
  9. Python爬取腾讯招聘信息
  10. 20190118 阿耐---《艰难的制造》