(一)Docker---容器介绍,Namespace隔离,cgroup资源限制,管理工具,优缺点,核心技术

容器核心技术之Namespace与Cgroup Namespace(命名空间)技术是一种内核级别的特性,它允许将全局系统资源隔离成独立的视图,使得在不同 Namespace 中运行的进程看到的资源是不同的。这为容器化技术提供了基础,使得多个进程或容器可以在同一台主机上独立运行而不会相互干扰。容器中的命名空间(Namespace)是一种用于隔离和分割不同容器之间和容器与主机操作系统之间资源的技术。命名空间是Linux内核提供的一种特性,容器技术(如Docker和Kubernetes)利用这些命名空间来实现容器的隔离和资源管理。 阅读详情

什么是容器

容器是一种工具,指的是可以装下其它物品的工具,以方便人类归纳放置物品、存储和异地运输,具体来说比如人类使用的衣柜、行李箱、背包等
可以成为容器,但今天我们所说的容器是一种 IT 技术。
容器技术是虚拟化、云计算、大数据之后的一门新兴的并且是炙手可热的新技术,容器技术提高了硬件资源利用率、方便了企业的业务快速横向扩容、实现了业务宕机自愈功能,因此未来数年会是一个容器愈发流行的时代,这是一个对于IT 行业来说非常有影响和价值的技术
容器技术最早出现在 freebsd 叫做 jail

一. Docker 简介

首先 Docker 是一个在 2013 年开源的应用程序并且是一个基于 go 语言编写是一个开源的 pass 服务(Platform as a Service,平台即服务的缩写),

Docker 是基于 linux 内核实现,Docker 最早采用 LXC 技术(LinuX Container 的简写,LXC 是 Linux 原生支持的容器技术,可以提供轻量级的虚拟化,可以说 docker 就是基于 LXC 发展起来的,提供 LXC 的高级封装,发展标准的配置方法)
而虚拟化技术 KVM(Kernel-based Virtual Machine) 基于模块实现,Docker 后改为自己研发并开源的 runc 技术运行容器。

Docker 相比虚拟机的交付速度更快,资源消耗更低,Docker 采用客户端/服务端架构,使用远程 API 来管理和创建 Docker 容器,其可以轻松的创建一个轻量级的、可移植的、自给自足的容器,

docker 的三大理念是 build(构建)、ship(运输)、 run(运行),Docker 遵从 apache 2.0 协议,并通过(namespace 及cgroup 等)来提供容器的资源隔离与安全保障等,所以 Docke 容器在运行时不需要类似虚拟机(空运行的虚拟机占用物理机 6-8%性能)的额外资源开销,因此可以大幅提高资源利用率,

Docker 是一种用了新颖方式实现的轻量级虚拟机.类似于 VM 但是在原理和应用上和 VM 的差别还是很大的,并且 docker的专业叫法是应用容器(Application Container)。

Docker 的组成

https://docs.docker.com/engine/docker-overview/
Docker 主机(Host):一个物理机或虚拟机,用于运行 Docker 服务进程和容器。
Docker 服务端(Server):Docker 守护进程,运行 docker 容器。
Docker 客户端(Client):客户端使用 docker 命令或其他工具调用 docker API。
Docker 仓库(Registry): 保存镜像的仓库,类似于 git 或 svn 这样的版本控制系
Docker 镜像(Images):镜像可以理解为创建实例使用的模板。
Docker 容器(Container): 容器是从镜像生成对外提供服务的一个或一组服务。

官方仓库: https://hub.docker.com/

在这里插入图片描述

Docker 对比虚拟机

资源利用率更高:一台物理机可以运行数百个容器,但是一般只能运行数十个虚拟机。
开销更小:不需要启动单独的虚拟机占用硬件资源。
启动速度更快:可以在数秒内完成启动
在这里插入图片描述

在这里插入图片描述

使用虚拟机是为了更好的实现服务运行环境隔离,每个虚拟机都有独立的内核,虚拟化可以实现不同操作系统的虚拟机,但是通常一个虚拟机只运行一个服务,很明显资源利用率比较低且造成不必要的性能损耗,我们创建虚拟机的
目的是为了运行应用程序,比如 Nginx、PHP、Tomcat 等 web 程序,使用虚拟机无疑带来了一些不必要的资源开销,但是容器技术则基于减少中间运行环节带来较大的性能提升

在这里插入图片描述

但是,如上图一个宿主机运行了 N 个容器,多个容器带来的以下问题怎么解决:

  1. 怎么样保证每个容器都有不同的文件系统并且能互不影响?
  2. 一个 docker 主进程内的各个容器都是其子进程,那么实现同一个主进程下不同类型的子进程?各个进程间通信能相互访问(内存数据)吗?
  3. 每个容器怎么解决 IP 及端口分配的问题?
  4. 多个容器的主机名能一样吗?
  5. 每个容器都要不要有 root 用户?怎么解决账户重名问题?

二. Linux Namespace 隔离技术

namespace 是 Linux 系统的底层概念,在内核层实现,即有一些不同类型的命名空间被部署在核内,各个 docker 容器运行在同一个 docker 主进程并且共用同一个宿主机系统内核,各docker 容器运行在宿主机的用户空间,每个容器都要有类似于虚拟机一样的相互隔离的运行空间,但是容器技术是在一个进程内实现运行指定服务的运行环境,并且还可以保护宿主机内核不受其他进程的干扰和影响,如文件系统空间、网络空间、进程空间等,主要通过以下技术实现容器运行空间的相互隔离:

在这里插入图片描述

1. MNT Namespace

每个容器都要有独立的根文件系统有独立的用户空间,以实现在容器里面启动服务并且使用容器的运行环境,即一个宿主机是 ubuntu 的服务器,可以在里面启动一个 centos 运行环境的容器并且在容器里面启动一个 Nginx 服务,此 Nginx运行时使用的运行环境就是 centos 系统目录的运行环境,但是在容器里面是不能访问宿主机的资源,宿主机是使用了 chroot 技术把容器锁定到一个指定的运行目录里面。
例如:/var/lib/containerd/io.containerd.runtime.v1.linux/moby/容器 ID
启动三个容器用于以下验证过程
在这里插入图片描述
Debian 系统安装基础命令
在这里插入图片描述
验证容器的根文件系统
在这里插入图片描述

2. IPC Namespace

一个容器内的进程间通信,允许一个容器内的不同进程的(内存、缓存等)数据访问,但是不能夸容器访问其他容器的数据

3. UTS Namespace

UTS namespace(UNIX Timesharing System 包含了运行内核的名称、版本、底层体系结构类型等信息)用于系统标识,其中包含了 hostname 和域名domainname ,它使得一个容器拥有属于自己 hostname 标识,这个主机名标识独立于宿主机系统和其上的其他容器

在这里插入图片描述

4. PID Namespace

Linux 系统中,有一个 PID 为 1 的进程(init/systemd)是其他所有进程的父进程,那么在每个容器内也要有一个父进程来管理其下属的子进程,那么多个容器的进程通 PID namespace 进程隔离(比如 PID 编号重复、器内的主进程生成与回收子进程等)。

例如:下图是在一个容器内使用 top 命令看到的 PID 为 1 的进程是 nginx:
在这里插入图片描述
容器内的 Nginx 主进程与工作进程
在这里插入图片描述
那么宿主机的 PID 究竟与容器内的 PID 是什么关系?

容器 PID 追踪
查看宿主机上的 PID 信息

在这里插入图片描述
查看容器中的 PID 信息
在这里插入图片描述

5. Net Namespace:

每一个容器都类似于虚拟机一样有自己的网卡、监听端口、TCP/IP 协议栈等,
Docker 使用 network namespace 启动一个 vethX 接口,这样你的容器将拥有它自己的桥接 ip 地址,通常是 docker0,而 docker0 实质就是 Linux 的虚拟网桥,网桥是在 OSI 七层模型的数据链路层的网络设备,通过 mac 地址对网络进行划分,并且在不同网络直接传递数据

查看宿主机的网卡信息
容器的网卡
在这里插入图片描述
查看宿主机桥接设备:
通过 brctl show 命令查看桥接设备:需要安装包bridge-utlis

在这里插入图片描述
在这里插入图片描述
逻辑网络图
容器的网络接口与宿主机的一一对应
在这里插入图片描述

宿主机 iptables 规则
在这里插入图片描述
在这里插入图片描述

6. User Namespace

各个容器内可能会出现重名的用户和用户组名称,或重复的用户 UID 或者GID,那么怎么隔离各个容器内的用户空间呢?

User Namespace 允许在各个宿主机的各个容器空间内创建相同的用户名以及相同的用户 UID 和 GID,只是会把用户的作用范围限制在每个容器内,即 A 容器和 B 容器可以有相同的用户名称和 ID 的账户,但是此用户的有效范围仅是当前容器内,不能访问另外一个容器内的文件系统,即相互隔离、互不影响、永不相见

在这里插入图片描述

三. Linux control groups资源限制

在一个容器,如果不对其做任何资源限制,则宿主机会允许其占用无限大的内存空间,有时候会因为代码 bug 程序会一直申请内存,直到把宿主机内存占完,为了避免此类的问题出现,宿主机有必要对容器进行资源分配限制,比如CPU、内存等,Linux Cgroups 的全称是 Linux Control Groups,它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。此外,还能够对进程进行优先级设置,以及将进程挂起和恢复等操作

验证系统 cgroups:
Cgroups 在内核层默认已经开启,从 centos 和 ubuntu 对比结果来看,显然内核较新的 ubuntu 支持的功能更多

centos 7.6 cgroups
在这里插入图片描述
ubuntu cgroups
在这里插入图片描述

cgroups 具体实现

blkio:块设备 IO 限制。
cpu:使用调度程序为 cgroup 任务提供 cpu 的访问。
cpuacct:产生 cgroup 任务的 cpu 资源报告。
cpuset:如果是多核心的 cpu,这个子系统会为 cgroup 任务分配单独的 cpu 和内存
devices:允许或拒绝 cgroup 任务对设备的访问。
freezer:暂停和恢复 cgroup 任务。
memory:设置每个 cgroup 的内存限制以及产生内存资源报告。
net_cls:标记每个网络包以供 cgroup 方便使用。
ns:命名空间子系统。
perf_event:增加了对每 group 的监测跟踪的能力,可以监测属于某个特定的 group 的所
有线程以及运行在特定 CPU 上的线程

查看系统 cgroups

 ll /sys/fs/cgroup/
total 0
drwxr-xr-x 5 root root 0 Jun 30 18:12 blkio
lrwxrwxrwx 1 root root 11 Jun 30 18:12 cpu -> cpu,cpuacct
lrwxrwxrwx 1 root root 11 Jun 30 18:12 cpuacct -> cpu,cpuacct
drwxr-xr-x 5 root root 0 Jun 30 18:12 cpu,cpuacct
drwxr-xr-x 3 root root 0 Jun 30 18:12 cpuset
drwxr-xr-x 5 root root 0 Jun 30 18:12 devices
drwxr-xr-x 3 root root 0 Jun 30 18:12 freezer
drwxr-xr-x 3 root root 0 Jun 30 18:12 hugetlb
drwxr-xr-x 5 root root 0 Jun 30 18:12 memory
drwxr-xr-x 3 root root 0 Jun 30 18:12 net_cls
drwxr-xr-x 3 root root 0 Jun 30 18:12 perf_event
drwxr-xr-x 5 root root 0 Jun 30 18:12 systemd

有了以上的 chroot、namespace、cgroups 就具备了基础的容器运行环境,但是还需要有相应的容器创建与删除的管理工具、以及怎么样把容器运行起来、容器数据怎么处理、怎么进行启动与关闭等问题需要解决,于是容器管理技术出现了

容器管理工具

目前主要是使用 docker,早期有使用 lxc

1. lxc

LXC:LXC 为 Linux Container 的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,官方网站:https://linuxcontainers.org/
Ubuntu 安装 lxc:
lxc客户端
lxd服务端

root@s1:~# apt install lxc lxd
Reading package lists... Done
Building dependency tree 
Reading state information... Done
lxd is already the newest version (3.0.3-0ubuntu1~18.04.1).
lxc is already the newest version (3.0.3-0ubuntu1~18.04.1).


root@s1:~# lxc-checkconfig #检查内核对 lcx 的支持状况,必须全部为 lcx
root@s1:~# lxc-create -t 模板名称 -n lcx-test
root@s1:~# lxc-create -t download --name alpine12 -- --dist alpine --
release 3.9 --arch amd64
Setting up the GPG keyring
Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs
---
You just created an Alpinelinux 3.9 x86_64 (20190630_13:00) container.
root@s1:~# lxc-start alpine12 #启动 lxc 容器 
root@s1:~# lxc-attach alpine12 #进入 lxc 容器
~ # ifconfig 
eth0 Link encap:Ethernet HWaddr 00:16:3E:DF:54:94 
 inet addr:10.0.3.115 Bcast:10.0.3.255 Mask:255.255.255.0
 inet6 addr: fe80::216:3eff:fedf:5494/64 Scope:Link
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 RX packets:18 errors:0 dropped:0 overruns:0 frame:0
 TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000 
 RX bytes:2102 (2.0 KiB) TX bytes:1796 (1.7 KiB)
lo Link encap:Local Loopback 
 inet addr:127.0.0.1 Mask:255.0.0.0
 inet6 addr: ::1/128 Scope:Host
 UP LOOPBACK RUNNING MTU:65536 Metric:1
 RX packets:0 errors:0 dropped:0 overruns:0 frame:0
 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000 
 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
~ # uname -a
Linux alpine12 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 
x86_64 Linux
~ # cat /etc/issue 
Welcome to Alpine Linux 3.9
Kernel \r on an \m (\l)
命令备注: -t 模板: -t 选项后面跟的是模板,模式可以认为是一个原型,用来说明我们需要一个什么
样的容器(比如容器里面需不需要有 vim, apache 等软件).模板实际上就是一个脚本文件(位 于/usr/share/lxc/templates 目录),我们这里指定 download 模板(lxc-create 会调用 lxcdownload 脚本,该脚本位于刚说的模板目录中)是说明我们目前没有自己模板,需要下载



官方的模板
--name 容器名称: 为创建的容器命名
-- : --用来说明后面的参数是传递给 download 脚本的,告诉脚本需要下载什么样的模板
--dist 操作系统名称:指定操作系统
--release 操作系统: 指定操作系统,可以是各种 Linux 的变种
--arch 架构:指定架构,是 x86 还是 arm,是 32 位还是 64 位

xc 启动容器依赖于模板,清华模板源:
https://mirrors.tuna.tsinghua.edu.cn/help/lxc-images/,但是做模板相对较难,需
要手动一步步创构建文件系统、准备基础目录及可执行程序等,而且在大规模
使用容器的场景很难横向扩展,另外后期代码升级也需要重新从头构建模板,
基于以上种种原因便有了 docker

2. docker

Docker 启动一个容器也需要一个外部模板但是较多镜像,docke 的镜像可以保 存在一个公共的地方共享使用,只要把镜像下载下来就可以使用,最主要的是
可以在镜像基础之上做自定义配置并且可以再把其提交为一个镜像,一个镜像
可以被启动为多个容器。
Docker 的镜像是分层的,镜像底层为库文件且只读层即不能写入也不能删除数
据,从镜像加载启动为一个容器后会生成一个可写层,其写入的数据会复制到
容器目录,但是容器内的数据在删除容器后也会被随之删除
在这里插入图片描述

3. pouch:

阿里巴巴的
https://www.infoq.cn/article/alibaba-pouch

文档
https://github.com/alibaba/pouch

Docker 的优缺点

优点
快速部署:短时间内可以部署成百上千个应用,更快速交付到线上。
高效虚拟化:不需要额外的 hypervisor 支持,直接基于 linux 实现应用虚拟化,相比虚拟机大幅提高性能和效率。
节省开支:提高服务器利用率,降低 IT 支出。
简化配置:将运行环境打包保存至容器,使用时直接启动即可。
快速迁移和扩展:可夸平台运行在物理机、虚拟机、公有云等环境,良好的兼容性可以方便将应用从 A 宿主机迁移到 B 宿主机,甚至是 A 平台迁移到 B 平 台

缺点

隔离性:各应用之间的隔离不如虚拟机彻底。

docker的核心技术

容器规范:
除了 docker 之外的 docker 技术,还有 coreOS 的 rkt,还有阿里的 Pouch,为了保证容器生态的标准性和健康可持续发展,包括 Linux 基金会、Docker、微软、红帽谷歌和、IBM、等公司在 2015 年 6 月共同成立了一个叫 open container(OCI) 的组织,其目的就是制定开放的标准的容器规范,目前 OCI 一共发布了两个规范,分别是 runtime spec 和 image format spec,有了这两个规范,不同的容器公司开发的容器只要兼容这两个规范,就可以保证容器的可移植性和相互可操作性

容器 runtime:
runtime 是真正运行容器的地方,因此为了运行不同的容器 runtime 需要和操作系统内核紧密合作相互在支持,以便为容器提供相应的运行环境。
目前主流的三种 runtime:
Lxc:linux 上早期的 runtime,Docker 早期就是采用 lxc 作为 runtime。
runc:目前 Docker 默认的 runtime,runc 遵守 OCI 规范,因此可以兼容 lxc。
rkt:是 CoreOS 开发的容器 runtime,也符合 OCI 规范,所以使用 rktruntime 也可以运行 Docker 容器

容器管理工具:
管理工具连接 runtime 与用户,对用户提供图形或命令方式操作,然后管理工具将用户操作传递给 runtime 执行。
lxc 是 lxd 的管理工具。
Runc 的管理工具是 docker engine,docker engine 包含后台 deamon 和 cli 两部分,大家经常提到的 Docker 就是指的 docker engine。 Rkt 的管理工具是 rkt cli
容器定义工具:
容器定义工具允许用户定义容器的属性和内容,以方便容器能够被保存、共享和重建。
Docker image:是 docker 容器的模板,runtime 依据 docker image 创建容器。
Dockerfile:包含 N 个命令的文本文件,通过 dockerfile 创建出 docker image。
ACI(App container image):与 docker image 类似,是 CoreOS 开发的 rkt 容器的镜像格式

Registry:
统一保存镜像而且是多个不同镜像版本的地方,叫做镜像仓库。
Image registry:docker 官方提供的私有仓库部署工具。
Docker hub:docker 官方的公共仓库,已经保存了大量的常用镜像,可以方便直接使用。
Harbor:vmware 提供的自带 web 界面自带认证功能的镜像仓库,目前有很多公司使用

172.18.200.101/project/centos:7.2.1511
172.18.200.101/project/centos: latest
172.18.200.101/project/java-7.0.59:v1
172.18.200.101/project/java-7.0.59:v2

编排工具:
当多个容器在多个主机运行的时候,单独管理容器是相当复杂而且很容易出错,而且也无法实现某一台主机宕机后容器自动迁移到其他主机从而实现高可用的目的,也无法实现动态伸缩的功能,因此需要有一种工具可以实现统一管理、动态伸缩、故障自愈、批量执行等功能,这就是容器编排引擎。
容器编排通常包括容器管理、调度、集群定义和服务发现等功能。
Docker swarm:docker 开发的容器编排引擎。
Kubernetes:google 领导开发的容器编排引擎,内部项目为 Borg,且其同时支持docker 和 CoreOS。
Mesos+Marathon:通用的集群组员调度平台,mesos(资源分配)与 marathon(容器编排平台)一起提供容器编排引擎功能

在这里插入图片描述

docker的依赖技术

  1. 容器网络:
    docker 自带的网络 docker network 仅支持管理单机上的容器网络,当多主机运行的时候需要使用第三方开源网络,例如 calico、flannel 等。
  2. 服务发现:
    容器的动态扩容特性决定了容器 IP 也会随之变化,因此需要有一种机制开源自动识别并将用户请求动态转发到新创建的容器上,kubernetes 自带服务发现功 能,需要结合 kube-dns 服务解析内部域名。
  3. 容器监控:
    可以通过原生命令 docker ps/top/stats 查看容器运行状态,另外也可以使heapster/ Prometheus 等第三方监控工具监控容器的运行状态。
  4. 数据管理:
    容器的动态迁移会导致其在不同的 Host 之间迁移,因此如何保证与容器相关的数据也能随之迁移或随时访问,可以使用逻辑卷/存储挂载等方式解决。
  5. 日志收集:
    docker 原生的日志查看工具 docker logs,但是容器内部的日志需要通过 ELK 等专门的日志收集分析和展示工具进行处理
(一)Docker---容器介绍,Namespace隔离,cgroup资源限制,管理工具 每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取h amd64。 阅读详情

相关推荐

Docker之NameSpace与Cgroup

一、docker容器技术与传统虚拟化技术的比较 Docker容器技术是一个与传统的虚拟化技术有些本质上的差别,传统的虚拟化技术,是站硬件物理资源的基础上,虚拟出多个OS,然后在OS的基础上构建相对独立的程序运行环境,而Docker则是在OS的基础上进行虚拟,所以,Docker轻量很多,因此其资源占用、性能消耗相比传统虚拟化都有很大的优势。 docker容器很快,启动和停止可以在秒级实现,比传统的虚...

看清所以看轻 3555

FreeBSD安装Docker记录(用runj containerd)

碰到的问题:提示没有docker-freebsd包,可真奇怪。原来2020年一月,这个包被删除了。(Deleted: Jan 2020))所以上面的例子已经不能用了。

skywalk8163的专栏 3576

认识Docker底层原理:Linux内核的Namespace、Cgroup和UnionFS

namespacesDocker使用一种名为命名空间的技术来提供被称为容器的隔离工作空间。当您运行一个容器时,Docker会为该容器创建一组命名空间。这些命名空间提供了一层隔离。容器的每个方面都在一个独立的命名空间中运行,其访问权限仅限于该命名空间。Docker容器技术的核心架构建立在Linux内核提供的三大关键技术之上:Namespace、Cgroup和UnionFS。这些技术共同确保了容器在隔离性、资源管理和文件系统效率方面的高效运作。

分享记录学习过程 2099

在FreeBSD上使用Docker

需求 FreeBSD是个好东西,因为有ZFS。Docker也是个好东西,因为很爽。 然而之前Docker只支持Linux,所以在其它平台上都需要搞个Linux虚拟机才能用,麻烦得很。 当然现在也是一样,只是官方出了一个docker-machine可以更方便地管理虚拟机里的docker。基本用法可以参考这篇《Docker on FreeBSD》 不过为了折腾这个东西,我把家里的服务器搞崩溃好多次,最...

weixin_34384681的博客 5347

docker之namespace与cgroup简介

文章目录前言容器创建过程NamespaceCgroup 前言 当谈论docker时,常常会聊到docker的实现方式。很多开发者都知道,docker容器本质上是宿主机的进程,Docker通过namespace实现了资源隔离,通过cgroups实现了资源限制,通过写时复制机制(copy-on-write)实现了高效的文件操作。 对于Linux容器的最小组成,可以由下面公式来表示 容器=namespa...

莲藕粉的博客 1392

Docker之Namespace和Cgroup

目录Namespace概念容器6六项隔离Namespace API实际操作Cgroup概念实际操作 之前学习了docker的一些原理和文件系统,对于其核心技术namespace和cgroup没有一个很好的认识,下面将记录其知识点 Namespace 概念 namespce资源隔离,又称为命名空间,它主要做访问隔离。其原理是针对一类资源进行抽象,并将其封装在一起提供给一个容器使用,对于这类资源,因为每个容器都有自己的抽象,而他们彼此之间是不可见的,所以就可以做到访问隔离。 docker就是通过这样一种技术,使

Eros1on的博客 914

【Docker】LXC所实现的隔离性、Linux Namespace等讲解

【Docker】LXC所实现的隔离性、Linux Namespace等八大详细内容讲解

m0_75058342的博客 4627

y19.第二章 Docker从入门到精通 -- Docker介绍和安装(一)

1.简介 前言 统称来说,容器是一种工具,指的是可以装下其它物品的工具,以方便人类归纳放置物品、存储和异地运输,具体来说比如人类使用的衣柜、行李箱、背包等可以成为容器,但今天我们所说的容器是一种IT 技术。 容器技术是虚拟化、云计算、大数据之后的一门新兴的并且是炙手可热的新技术,容器技术提高了硬件资源利用率、方便了企业的业务快速横向扩容、实现了业务宕机自愈功能,因此未来数年会是一个容器愈发流行的时代,这是一个对于IT 行业来说非常有影响和价值的技术,而对于IT 行业的从业者来说,熟练掌握容器技术无疑是一个很

Raymond的博客 593

Docker容器系列(一)Linux内核Namespace和Cgroup浅析

Linux内核中六种Namespace解析,和Cgroup各层级结构关系以及测试试验

97运维的博客 2973

kubernetes集群配置Cgroups驱动

Cgroups概念  cgroups 的全称是 Linux Control Groups,主要作用是限制、记录和隔离进程组(process groups)使用的物理资源(cpu、memory、IO 等)。 systemd是系统自带的cgroup管理器, 系统初始化就存在的, 和cgroups联系紧密,为每一个进程分配cgroups, 用它管理就行了. 如果设置成cgroupfs就存在2个cgroup控制管理器, 实验证明在资源有压力的情况下,会存在不稳定的情况。 由于 kubeadm 把 kubele

rendongxingzhe的博客 6252

AntV G6边动画实战:手把手教你实现数据流向箭头与虚线流动效果

本文详细解析了如何使用AntV G6实现数据流向箭头与虚线流动效果,通过自定义边动画提升数据可视化的动态表现力。从基础环境搭建到核心概念讲解,再到虚线流动动画和箭头路径动画的具体实现与参数调控,帮助开发者掌握G6边动画的高级技巧,适用于网络流量监控、数据传递等场景。

weixin_28487433的博客 268

Linux 内核中的容器技术:从 namespace 到 cgroup

Linux 内核中的容器技术是一种轻量级的虚拟化方案,它通过 namespace 和 cgroup 等机制,为应用程序提供隔离的运行环境。容器技术的设计思路与企业管理中的标准化和隔离有着密切的联系,它通过标准化环境、资源隔离、快速部署和成本控制等机制,为系统的高效运行提供了保障。工作也要流程化,容器技术就像是系统中的标准化和隔离工具,它确保了应用程序的有序运行。在实际应用中,我们需要使用轻量级基础镜像,合理设置资源限制,使用多阶段构建,监控容器状态,以实现系统的最佳性能和可靠性。

jiang_style的博客 2767

避免踩坑!杰理AC63蓝牙名修改常见问题及解决方案(含BLE后缀处理)

本文详细解析了杰理AC63蓝牙设备名称修改的全过程,包括基础操作、BLE后缀处理及高级调试技巧。针对蓝牙名修改中的常见问题,提供了实用的解决方案和代码示例,帮助开发者避免踩坑并实现高效定制。

q6r7s8t9的博客 412

Docker容器的本质,如何实现的 资源隔离、资源限制

docker 容器本质: 容器其实就是Linux下一个特殊的进程; Docker容器通过namespace实现进程隔离通过cgroups实现资源限制; Docker镜像(rootfs)是一个操作系统的所有文件和目录而不包括内核,Docker镜像是共享宿主机的内核的; Docker镜像是以只读方式挂载,所有的增删改都只会作用在容器层, 但是相同的文件会覆盖掉下一层,这种方式也被称为"...

H_sen's Blog 5953

HFSS 3D Layout一键导入PCB,高效搞定微带线损耗仿真

在高速PCB设计中,信号完整性与电磁仿真是确保链路质量的关键环节。传统的HFSS手动建模流程繁琐且极易出错,尤其面对微带线、带状线等高频结构时,叠层参数、铜箔粗糙度等细节难以精准还原,导致仿真结果与实测偏差较大。HFSS 3D Layout模块提供了从EDA工具直接导入PCB文件的能力,完整保留走线、过孔、叠层及材料属性,结合精确的介质损耗模型与端口设置,大幅缩短建模时间并提升仿真精度。该技术广泛应用于DDR、SerDes等高速数字链路的设计验证,以及SI/PI工程师对PCB损耗性能的快速评估。本文从导入操

weixin_29191081的博客 256

Modelsim:LPDDR5仿真(含美光仿真模型官方sv&vcs代码)

虽然,三星在设计跟量产上,早于其他家存储产商,但是镁光后来居上了,是业界首家支持全速 LPDDR5 的供应商,并且开发者在做开发的时候,也是用美光颗粒比较多,所以这里就先以美光的仿真模型为主进行仿真。 本工程为美光官方工程,支持Modelsim、VCS、ncverilog三种仿真器仿真。模型破解过,为完整system-verilog代码。

千歌叹尽执夏的博客 1283

Linux容器:cgroup,namespace原理与实现

转自 《容器三把斧之 | cgroup原理与实现》 《容器三把斧之 | namespace原理与实现》 目录 容器三把斧之 | cgroup原理与实现 cgroup结构体 cgroup_subsys_state结构体 css_set结构体 cgroup_subsys结构 CGroup的挂载 向CGroup添加要进行资源控制的进程 限制CGroup的资源使用 限制进程使用资源 容器三把斧之 | namespace原理与实现 namespace介绍 namespa...

RToax 3275

黑猫带你学eMMC协议第17篇:超详细的eMMC HS200 & HS400讲解

1 前言 1.1 声明 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 本文结合eMMC JEDEC5.1协议手册查看效果更佳。 1.2 内容提要 本文大约6000字,主要内容有: 1.什么是emmc hs200/hs400? 2.什么是tuning?tuning的过程又是什么? 3.如何设置才能让emmc进入hs200 mode? 4.如何设置才能让emmc进入hs400 mode? 5.emmc关于HS200/HS400内部结构框图对比。 6.部分个人相关经验总结。

黑猫奥利奥的博客 1万+

【Docker】NameSpace,Cgroup,LXC

Namespace 是 Linux 内核提供的一种重要机制,用于实现对系统资源的隔离。通过将不同的进程放置到不同的命名空间中,内核可以限制每个进程组所能“看到”的资源范围,使得一组进程只能访问与其相关的某部分资源,而另一组进程则访问另一部分资源。彼此之间互不可见,从而实现了进程环境的隔离与安全。更准确地说,Linux namespaces 是对全局性系统资源的一种封装和抽象,为不同进程组提供独立的资源视图。每一个 namespace 都仿佛构成一个轻量级的虚拟化环境。

2301_80224556的博客 1179

【DRAM存储器五十七】LPDDR5介绍--read DQ training和WCK DQ training

简述LPDDR5训练中的读写DQ训练

highman110的博客 522

【AutoSAR CAN】04 - 如何使用Davinci Configurator Pro工具配置CAN的波特率

改参数为Tx Arbitration start delay value ,可用于延迟仲裁过程的起始点,用来补偿CAN收发器及线路的传输延迟,以优化传输性能。有关详细信息,请参阅硬件手册。该参数指定采样点模式,即选择多少个采样点的数量,如果选择了每比特三个样本选项,则该点标记第三个样本的位置;我们要配置CAN的波特率,其实就是要弄明白 CAN 控制器的位时序即可,具体的理论部分和EB的配置部门可参考文章《该参数表示传播延迟有多少个时间单位Tq,即上文中的Propagation delay/PROGSEG。.

2601

Docker 核心技术 NameSpace, CGroup, AUFS, DeviceMapper

文章目录Docker 简介1. NameSpace - Linux2. CGroup - LinuxCGroup的子系统CGroup的术语下一代的CGroup3. AUFSAUFS的一些特性相关术语Whiteout 和 OpaqueAUFS的性能4. DeviceMapper - LinuxThin Provisioning 简介Device Mapper 行不行?参考 Docker 简介 Do...

AI架构师易筋 1331

OpenClaw 保姆级 window部署

OpenClaw 保姆级 window部署 养龙虾

cs821984831的博客 298

实现Docker容器的底层技术-cgroup 和namespace浅析

引言 docker启动的容器本质上是Host中的一个进程,cgroup和namespace是最重要的两项技术,cgroup主要实现资源的限额,而namespce则用来实现资源的隔离 1.cgroup cgroup全称Control Group ,Linux操作系统通过cgroup可以设置进程使用CPU、内存、和IO资源的限额,比如可以在启动容器时通过:–cpu-shares、-m、–devic...

NathanniuBee的博客 2672

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

容器的底层技术:CGroup和NameSpace

无论是容器,还是虚拟机,都依赖于内核中的技术,虚拟机依赖的是 KVM,容器依赖的是 namespace 和 cgroup 对进程进行隔离和资源限制。容器实现封闭的环境主要要靠两种技术,一种是看起来是隔离的技术,称为(命名空间)。在每个 namespace 中的应用看到的,都是不同的 IP 地址、用户空间、进程 ID 等。另一种是用起来是隔离的技术,称为(资源限制),即明明整台机器有很多的 CPU、内存,但是一个应用只能用其中的一部分。

云胜的笔记 1458

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

docker lxc cgroup namespace简述

docker、lxc、cgroup、namespace是最近比较的技术。先了解一下他们分别是什么,然后说一下他们怎么用,具体实现机制以后再单独研究。 docker是lxc的管理器,lxc是cgroup的管理工具,cgroup是namespace的用户空间的管理接口。namespace是linux内核在task_struct中对进程组管理的基础机制。 再详细点说: docker是用

职场里拉开差距的不是知识,而是认知! 9526

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: session的server共享服务器--------(memcached分布式,msm-sticky模式)
下一篇: (二)Docker----安装,docker镜像加速,容器管理,docker命令inspect
(─__─)
博客等级 码龄7年 1万+粉丝 255原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值