容器和云原生(二):Docker容器化技术

 

目录

Docker容器的使用

Docker容器关键技术

Namespace 

Cgroups

UnionFS


Docker容器的使用

        首先直观地了解docker如何安装使用,并快速启动mysql服务的,启动时候绑定主机上的3306端口,查找mysql容器的ip,使用mysql -h containerIP 或者127.0.0.1就可以直接访问mysql服务,暂不考虑mysql的存储卷。

# 安装docker的rpm包
yum install -y docker
# 启动docker服务
systemctl start docker
# 查看image镜像列表,现在没有pull拉取任何镜像,列表为空
docker image list
# 修改镜像源地址为国内
vi /etc/docker/daemon.json
{
    "registry-mirrors" : [
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"]
}
# 拉取mysql的固定版本镜像mysql:5.7.29
docker image pull mysql:5.7.29
# 查看镜像信息
docker inspect mysql:5.7.29
# 把mysql的镜像run跑起来,--name指定容器名,-p绑定端口映射关系,这里主机和容器的3306绑定,-e环境变量,-d是后台运行
docker run mysql:5.7.29 --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin@123 -d 
# 查看docker的容器进程
docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
39189fab8ca8        mysql:5.7.29        "docker-entrypoint..."   44 minutes ago      Up 5 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   mysql
# 查看 mysql的容器ip,知道它的ip是172.17.0.2
docker inspect 39189fab8ca8
# centos系统本地安装mysql客户端
yum install -y mysql
# 在centos中使用docker的ip或者直接主机ip+3306端口访问mysql服务,密码是上面的admin@123
mysql -h 172.17.0.2 -P 3306 -u root -p
mysql -h 127.0.0.1 -P 3306 -u root -p
# 允许mysql的远程访问
MySQL [(none)]> grant all privileges on *.* to 'root'@'%' identified by 'admin@123' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)
MySQL [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

Docker容器关键技术

        Docker基于 Linux 内核的 Cgroup,Namespace,以及Union FS 等技术对进程进行封装隔离封装,属 于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器,与虚拟化技术相比它有更快的启动时间,更高效的资源利用率,一致的运行环境,更轻松的迁移能和更强的维护性。

 

Namespace 

        Docker 利用 Linux 内核的 namespace 技术来实现容器化。Namespace 是一种隔离机制,它将系统资源封装在一个独立的命名空间中,使得在不同的命名空间中的进程看起来像在独立的操作系统实例中运行,Linux 内核代码中进程的数据结构和Namespace 的数据结构:

namespace的类型有多种:

PID Namespace:每个容器都有自己独立的进程 ID (PID) 命名空间。这意味着容器内部的进程在容器外部是不可见的,进程 ID 在容器之间是隔离的。这使得容器内的进程可以拥有自己的进程树。

Network Namespace:每个容器都有自己独立的网络命名空间。这意味着每个容器拥有自己的网络栈,包括独立的网络接口、IP 地址、路由表和防火墙规则。这使得容器之间网络隔离,可以独立地运行和与外部网络通信。

Mount Namespace:每个容器都有自己独立的文件系统视图。这意味着每个容器可以拥有自己的文件系统挂载点和文件树。容器内部对文件系统的修改不会影响到宿主机或其他容器。

UTS Namespace:每个容器都有自己独立的主机名和域名。这意味着容器可以拥有自己的主机名,并且可以在网络中被识别为一个独立的实体。

IPC Namespace:每个容器都有自己独立的进程间通信 (IPC) 命名空间。这意味着容器之间的进程无法直接进行 IPC,它们被隔离在不同的命名空间中。

Cgroups

 Docker 使用 cgroups(Control Groups)技术来实现对容器资源的限制和管理。cgroups 是 Linux 内核中将一组进程组织在多个层次结构中,并为每个组提供资源隔离/优先级和控制的技术;

CPU 资源管理:Docker 使用 cgroups 将 CPU 资源划分为不同的组,并为每个组分配 CPU 时间片。这允许 Docker 控制容器可以使用的 CPU 资源的数量,并根据需要进行动态调整。

内存资源管理:通过 cgroups,Docker 可以为容器分配特定的内存限制。当容器超出分配的内存限制时,内核会触发 OOM(Out of Memory)机制来处理内存不足的情况。

网络带宽管理:Docker 使用 cgroups 的网络子系统来限制容器的网络带宽。这使得 Docker 可以控制容器可以使用的网络带宽,以防止某个容器占用过多的网络资源。

块设备 I/O 控制:通过 cgroups,Docker 可以对容器的块设备 I/O 进行限制和控制。这允许 Docker 控制容器对磁盘读写的速度,以避免某个容器对存储设备的过度使用。

UnionFS

Docker 使用 UnionFS(Union File System)技术来实现容器镜像的分层和联合挂载,它提供了灵活而高效的容器镜像管理和文件系统隔离功能,能构建、分发和运行容器镜像,同时节省存储空间,并提供了高度的可定制性和可扩展性。

分层镜像:Docker 使用分层镜像的概念来构建容器。每个镜像层都只包含对文件系统的增量修改,这样可以节省存储空间并提高镜像的构建效率。每个镜像层都可以看作是一个只读的文件系统,它们通过 UnionFS 技术联合挂载在一起,形成一个完整的容器镜像。

写时复制(Copy-on-write):当容器启动时,Docker 会为每个容器创建一个可写的容器层。这个可写层是基于镜像层的一个副本,当容器对文件系统进行修改时,UnionFS 使用写时复制技术将修改后的文件存储在可写层中,而不是原始镜像层中。这样可以避免对原始镜像层的修改,使得容器之间可以共享相同的镜像层。

联合挂载:通过 UnionFS 技术,Docker 将不同的镜像层联合挂载到容器的文件系统中,形成一个统一的文件系统视图。这使得容器可以访问并使用镜像层中的文件和目录,就像它们是在容器内部的文件一样。联合挂载还允许容器在运行时共享文件和目录,提高了容器之间的效率和资源利用率。

linux系统启动后,首先将 rootfs 设置为 readonly, 进行一系列检查, 然后将其切换为 “readwrite” 供用户使用,而docker容器启动时也是将 rootfs 以 readonly 方式加载并检查,然而接下来利用union mount 的方式 将一个 readwrite 文件系统挂载在 readonly 的 rootfs 之上, 并且允许再次将下层的 FS(file system) 设定为 readonly 并且向上叠加,这样一组 readonly 和一个 writeable 的结构构成一个 container 的运行时态, 每一个 FS 被称作一个 FS 层。

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

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

相关文章

设计模式——建造者(Builder)模式

建造者模式(Builder Pattern),又叫生成器模式,是一种对象构建模式 它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现的对象。建造者模式是一步一步创建一个复杂的对象,…

Python文件操作教程,Python文件操作笔记

文件的打开与关闭 想一想: 如果想用word编写一份简历,应该有哪些流程呢? 打开word软件,新建一个word文件写入个人简历信息保存文件关闭word软件 同样,在操作文件的整体过程与使用word编写一份简历的过程是很相似的…

使用 BERT 进行文本分类 (01/3)

摄影:Max Chen on Unsplash 一、说明 这是使用 BERT 语言模型的一系列文本分类演示的第一部分。以文本的分类作为例,演示它们的调用过程。 二、什么是伯特? BERT 代表 来自变压器的双向编码器表示。 首先,转换器是一种深度学习模…

【Linux命令详解 | gzip命令】 gzip命令用于压缩文件,可以显著减小文件大小

文章标题 简介一,参数列表二,使用介绍1. 基本压缩和解压2. 压缩目录3. 查看压缩文件内容4. 测试压缩文件的完整性5. 强制压缩6. 压缩级别7. 与其他命令结合使用8. 压缩多个文件9. 自动删除原文件 总结 简介 在Linux中,gzip命令是一款强大的文…

C语言笔试训练【第九天】

文章目录 👿1、下列程序的输出是( )💎2、二维数组X按行顺序存储,其中每个元素占1个存储单元。若 X[4][4] 的存储地址为 Oxf8b82140 , X[9][9] 的存储地址为 Oxf8b8221c ,则 X[7][7] 的存储地址为( &#xf…

交换实验一

题目 交换机上接口配置 SW1 interface GigabitEthernet0/0/1 port hybrid tagged vlan 2 port hybrid untagged vlan 3 to 6 interface Ethernet0/0/2 port hybrid pvid vlan 3 port hybrid untagged vlan 2 to 6 interface Ethernet0/0/3 port link-type access port d…

C++基础语法——继承

1.继承是什么? 继承是一种面向对象编程的概念,它允许一个类(称为子类或派生类)从另一个类(称为基类或父类)继承属性和方法。继承使得子类能够使用基类已有的代码,并且可以在此基础上进行扩展或修…

99页4万字XX大数据湖项目建设方案

导读:原文《99页4万字XX大数据湖项目建设方案》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 目 录 1.项目综述 1.1.项目背景 1.2.项目目标 1.3.项…

Error = [Microsoft][SQL Server Native Client 10.0]无法打开 BCP 主数据文件(已解决)

需求:分页方式查出表中数据存入excel中,并给excel标记不同的编号 前提: #all_4表中数据已准备好 版本: sql server 2008 declare n int set n 1 while n 100 begin print n:print nEXEC master.dbo.sp_configure show adva…

什么是flexbox布局?它有什么特点和优势?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是 Flexbox 布局?⭐ 特点和优势⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那…

(三)行为模式:1、责任链模式(Chain of Responsibility Pattern)(C++示例)

目录 1、责任链模式(Chain of Responsibility Pattern)含义 2、责任链模式的UML图学习 3、责任链模式的应用场景 4、责任链模式的优缺点 5、C实现责任链模式的实例 1、责任链模式(Chain of Responsibility Pattern)含义 责任…

2682. 找出转圈游戏输家

题目描述&#xff1a; n 个朋友在玩游戏。这些朋友坐成一个圈&#xff0c;按 顺时针方向 从 1 到 n 编号。从第 i 个朋友的位置开始顺时针移动 1 步会到达第 (i 1) 个朋友的位置&#xff08;1 < i < n&#xff09;&#xff0c;而从第 n 个朋友的位置开始顺时针移动 1 步…

vue之动态表单(优化)

代码资源在这儿 ↑ vue之动态表单优化 vue2js动态表单优化vue3ts动态表单优化 vue2js动态表单优化 效果图 目录结构 五个文件的完整代码: 以下是App.vue <template><div><router-view></router-view><Formpage /></div> </templa…

jenkins 安装nodejs 14

参考&#xff1a; jenkins容器安装nodejs-前端问答-PHP中文网

在ubuntu+cpolar+rabbitMQ环境下,实现mq服务端远程访问

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 RabbitMQ是一个在 AMQP(高级消息队列协议)基…

LangChain手记 Agent 智能体

整理并翻译自DeepLearning.AILangChain的官方课程&#xff1a;Agent&#xff08;源代码可见&#xff09; “人们有时会将LLM看作是知识库&#xff0c;因为它被训练所以记住了来自互联网或其他地方的海量信息&#xff0c;因而当你向它提问时&#xff0c;它可以回答你的问题。有一…

网络

mcq Java 传输层&#xff1a;拆分和组装&#xff0c;完成端到端的消息传递&#xff0c;流量控制&#xff0c;差错控制等 网络层&#xff1a; 寻址、路由&#xff0c;复用&#xff0c;拥塞控制&#xff0c;完成源到宿的传递。 显然A选项是错误的&#xff0c;有流量控制的是传输层…

JavaWeb框架:Spring MVC介绍

Spring MVC 概述 概述 MVC&#xff08;Model View Controller&#xff0c;模型-视图-控制器&#xff09;&#xff0c;作为一种设计模式&#xff0c;用于应用程序的分层开发。 Spring MVC&#xff0c;由 Spring 框架提供的基于 MVC 设计模式的一个轻量级 Web 开发框架。Spring…

基于CentOS 7 部署社区版Haproxy

HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件&#xff0c;是一款具 备高并发(一万以上)、高性能的TCP和HTTP负载均衡器&#xff0c;支持基于cookie的持久性&#xff0c;自动故障切换&#xff0c;支 持正则表达式及web状态统计。 目录 1…

微服务-Fegin

在之前我们两服务之间调用的时候用的是restTemplate,但是这个方式调用存在很多的问题 String url "http://userservice/user/" order.getUserId(); 代码可读性差&#xff0c;编码体验不统一参数复杂的url难以维护 所以我们大力推出我们今天的主角--Fegin Feign是…