初识docker容器(优势真的巨大,比虚拟机好用多了)

本文介绍了Docker容器技术,强调其相对于虚拟机的资源利用率优势。通过名称空间和cgroups实现应用隔离,Docker提供了一种轻量级的隔离环境。Docker Engine利用Linux的名称空间在多个容器之间创建隔离,同时cgroups管理资源分配。此外,Docker简化了应用程序的打包、部署和迁移,适用于微服务、CI/CD和PaaS场景。
摘要由CSDN通过智能技术生成

背景:

以linux而言,linux操作系统会有一个主进程pid=1派生出其他进程来控制不同服务
例如: pid=2 --> python pid=3–>java pid4–>php ,三个服务可能会相互影响
使用者期望将这三个不同的服务,跑在不同的运行时环境中实现相互不影响,同时不会增加服务器成本
延伸出一-》能否将这三种服务分别封装起来一》KVM虛拟化技术,实现了一-个操作系统模拟多个操作系统/不同的运行时
环境
随着技术发展—》虚拟化技术开销较大( 例如:只要运行一个py脚本,想要使用虚拟化方式实现,还需要安装一个操作系统,并不方便/合理)
延伸出容器技术
虚拟化层的抽象层(用户层)剥离,使用docker engine
来替代(来宾操作系统去除),只要通过引擎就可以直接连接到宿主机操作系统中,极大减小了开销
1232
2464
docker与虚拟机区别之一( 资源利用率/损耗)
###那如何实现应用A和应用B隔离
应用和应用的隔离,如何进行判断
以操作系统维度
应用A.与应用B隔离,在操作系统中,是通过namespaces( 名称空间、命名空间)实现的,只要实现以下6个空间隔离,才能
认为两个应用实现了完全/完整隔离

一、名称空间

容器隔离了6个名称空间(namespace次元隔离-用容器化技术封装)* * * * *

mount 文件系统,挂载点 ——》一个文件系统内,不能重复挂在一个指定目录,例如: /mnt

user 操作进程的用户和用户组 .。。。。。。。。。。

pid 进程编号

uts 主机名和主机域

ipc 信号量、消息队列,共享内存 (理解,不同的应用调用内存资源的时候应该使用不同的内存空间)

net 网络设备、网络协议栈、端口等

  • cgroups 管理 3.8版本

  • cgroups linux 内核态中资源管理的模块

  • cgroups 管理一些系统资源

Namespaces

Docker使用-种称为namespaces提供容器的隔离工作区的技术。运行容器时,Docker 会为该容器创建- -组名称空间。这些名称空间提供了一-层隔离。容器的每个方面都在单独的名称空间中运行,并且其访问仅限于该名称空间。

Docker Engine在Linux.上使用以下名称空间:

该pid命名空间:进程隔离(PID:进程ID)

该net命令空间:管理网络接口(NET:网络)

该ipc命名空间:管理访问IPC资源(IPC: 进程间通信)

该mnt命名空间:管理文件系统挂载点(MNT:mount)

该uts命名空间:隔离内核和版本标识符。(UTS:Unix时间共享系统)

docker 引擎 对内核版本是有要求的 (至少是3.8+)

docker 需要cgroups 的资源管理功能

最晚的一个名称空间是3.8

使用docker有什么意义?

ECS,属于IAAS、Docker(k8s) 属于PAAS

IASS : 基础设施服务

SAAS : 应用即服务

PAAS : 平台及服务

Docker images :镜像

Docker container:容器

Docker registry:镜像仓库

存储镜像的地方,默认在公共的Docker Hub上查找,可以搞个人仓库

二、docker与虚拟化

2.1cgroups

Linux上的Docker引擎还依赖于另一种称为控制组( cgroups)的技术。cgroup将应用程序限制为一组特定的资源。控制组允许Docker Engine将可用的硬件资源共享给容器,并有选择地实施限制和约束。
例如,您可以限制特定容器可用的内存。

2.2全虚拟、半虚拟、容器技术

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SS6HlBWQ-1641814563053)(C:\Users\赵金华\Desktop\整理复习\docker图片\1.png)]

2.3那如何区分虚拟机中的不同应用呢?

虚拟机一般不可能只跑一个应用,因为这样确实也太浪费资源了,我们可以想想,现在手上的电脑,可以用 Vmvare 导入几个虚拟机,所以诸如 Cloud Foundry通过引入操作系统的 CgroupsNamespace 等机制,从而来为每个应用单独创建一个叫做「沙盒」的隔离环境,然后在这些「沙盒」中启动应用,通过这样的方法就让虚拟机中应用各自互不干扰,让其自由翱翔,至于 Cgroups 和 Namespace 的实现原理,后续我们再共同的探讨

这里所谓的隔离环境就是「容器」。

2.4微服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ynGF9ZOG-1641814563054)(C:\Users\赵金华\Desktop\整理复习\docker图片\2.png)]

将40G的包拆分成4组10G的包来同时进行运作,化整为零就是微服务的概念,本来需要一台机器跑40G的包,但是微服务进行细小化,分成多个小块,同时进行处理,极大的加快了部署的速度。

在更新的时候包的时候一般需要全部更新,这样极度的消耗时间,而这个时候可以单独给单拆分的模块来进行镜像升级,一般只有10G左右,升级时间就减少了。

2.5企业中——开发运维整体流程

①首先由开发进行代码研发,研发好之后进行编译、打包

PS: 打包:一般会使用maven.工具打war包或者jar包.
②打完包之后,放置对应的运行时环境中,进行试运行
PS: 这里的运行时环境指:例如tomcat ( java环境) php (php环境)等1
③中间会加.上一些测试过程,测试代码的有效性、可用性和可执行性
④以上测试完成,运维会将这个软件包拉过来,运行在实际生产的运行时
环境中
问题:在以上的第o点中,不同开发语言的运行时环境混淆在一起运行会有很大的隐患,以及不便
传统中,所谓的运行时环境,例如tomcat (java环境) php ( php环境)等
容器中,所谓的运行时环境,指的试"容器”内部
在此之前,容器一》是一个运行时环境,构成容器的组件是image镜像(一个运行时环境的模板)

2.6docker数据流向图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q5c6mNTg-1641814563055)(C:\Users\赵金华\Desktop\整理复习\docker图片\3.png)]

Docker守护程序(dockerd)侦听Docker API请求并管理Docker对象,例如图像,容器,网络卷。守护程序还可以与其他守护程序通信以管理Docker服务。

Docker images:镜像

Docker container:容器

Docker registry:镜像仓库65却55lo’iuu

2.7docker镜像流向

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e9idnL4L-1641814563055)(C:\Users\赵金华\Desktop\整理复习\docker图片\4.png)]

2.8Container和VM(虚拟机)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vQJZNElH-1641814563056)(C:\Users\赵金华\Desktop\整理复习\docker图片\5.png)]

2.9docker和虚拟化比有什么优势

不同点 container VM
启动速度 秒级 分钟级
运行性能 接近原生(直接在内核中运行) 50%左右损失
磁盘占用 MB GB
数量 成百上千 一般十几台
隔离性 进程级别 系统级别(更彻底)
操作系统 主要支持Linux 几乎所有
封装程度 只打包项目代码和依赖关系,共享主机内核 完整的
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老赵学coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值