1.container介绍

本文介绍了Docker容器技术,包括其与虚拟机的区别、优点、目标和使用场景。Docker利用Linux内核的Namespace和Cgroups实现资源隔离,通过UnionFS创建轻量级的镜像。此外,文章还探讨了Docker的潜在争议和基本组成,如Docker Client、Daemon、Image和Container,并提到了Docker Registry。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是docker

将应用程序自动部署到容器的技术

什么是容器

一种虚拟化的方案

与虚拟机不同,虚拟机是通过中间层将一台或多台虚拟系统独立运行在硬件之上,而容器是运行在操作系统的内核之上的,可以称为操作系统虚拟化

只能运行相同或相似的内核操作系统

依赖于linux内核特性:Namespace和Cgroups,所以docker上只能运行linux操作系统

优点:

  运行时的性能可以获取极大提升(经典的案例是提升97%)

  管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。

敏捷

  像虚拟机一样敏捷,而且会更便宜,在bare metal(裸机)上布署像点个按钮一样简单。

灵活

  将应用和系统“容器化”,不添加额外的操作系统,

轻量

  你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。

便宜

  开源的,免费的,低成本的。由现代Linux内核支持并驱动。注* 轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。

生态系统

  正在越来越受欢迎,只需要看一看Google的趋势就知道了, docker or LXC.

  还有不计其数的社区和第三方应用。

云支持

  不计其数的云服务提供创建和管理Linux容器框架。

  有关Docker性能方面的优势,还可参考此IBM工程师对性能提升的评测,从各个方面比VMs(OS系统级别虚拟化)都有非常大的提升。

有争论的地方:

能否彻底隔离

  在超复杂的业务系统中,单OS到底能不能实现彻底隔离,一个程序的崩溃/内存溢出/高CPU占用到底 会不会影响到其他容器或者整个系统?很多人对Docker能否在实际的多主机的生产环境中支持关键任务系统还有所怀疑。 注* 就像有人质疑Node.JS单线程快而不稳,无法在复杂场景中应用一样。

  不过可喜的是,目前Linux内核已经针对Container做了很多改进,以支持更好的隔离。

GO语言还没有完全成熟

  Docker由Go语言开发,但GO语言对大多数开发者来说比较陌生,而且还在不断改进,距离成熟还有一段时间。此半git、半包管理的方式让一些人产生不适。

被私有公司控制

   Docker是一家叫Dotcloud的私有公司设计的,公司都是以营利为目的,比如你没有办法使用源代码编绎Docker项目,只能使用黑匣子编出的 Docker二进制发行包,未来可能不是完全免费的。 目前Docker已经推出面向公司的企业级服务(咨询、支持和培训)。

Doker目标:

1.提供简单轻量的建模方式(同一台宿主机可以运行多个容器)

2.职责的逻辑分离

加强开发人员的开发环境与生产部署的环境的一致性

3.快速高效的开发的生命周期

缩短从开发到生产的周期,使开发,测试,生产环境相一致,并且都以容器的方式进行交付,避免了额外调试部署的时间开销

4.鼓励使用面向服务的架构

鼓励单个容器之运行单一服务,这就形成了一种分布式模型,避免服务之间的互相应影响,在定位出现的问题时,也变得简单直接

docker的使用场景:

1.使用docker容器开发,测试,部署服务.

2.创建隔离的运行环境.

3.搭建测试环境

4.构建多用户的平台即服务(PaaS)基础设施

5.提供软件机服务(SaaS)应用程序

6.高性能,超大规模的宿主机部署

docker容器技术的实现

namespace 命名空间(隔离资源)

cgroup 资源控制(限制资源)

unionfs 联合文件系统

--------------------------------------------------

docker基本组成

Docker Client客户端

Docker Daemon 守护进程

Docker Image 镜像

容器的基石,保存了启动容器的各种条件

层叠的只读文件系统

联合加载(union mount)

add Apache

add emacs

rootfs

bootfs 引导

镜像其实就是多个层来组成的,引导层,文件系统层,软件层,这些都是属于只读文件系统,也就是说多个文件系统共同组成,镜像也能相互叠加在一起.有子镜像和父镜像

Docker Container 容器

通过镜像启动

可以通过一个镜像运行一个或者多个容器

启动和执行阶段

可写层-----------容器层

add Apache

add emacs

rootfs

bootfs 引导

采用copy on write

Docker Registry 仓库

公有 Docker Hub Docker Hub

私有

Docker依赖的linux内核特性

Namespaces 命名空间

Control groups(cgroups) 控制组

Namespaces

编程语言

封装 代码隔离

操作系统

进程资源的隔离

进程,网络,文件系统....

PID 进程隔离

NET 管理网络接口

IPC 管理跨进程通信的访问

MNT 管理挂载点

UTS (Unix Timesharing System)隔离内核和版本标示

Control groups控制组来完成命名空间的隔离

用来分配资源

来源于google

linux kernel-2.6.24内核版本以后

可以说没有cgroups就没有容器技术的今天

Control groups控制组

资源限制(如限制mem,超出oom)

优先级设定(设定那个进程组使用更多资源)

资源计量(计算进程组使用了多少资源,尤其是在计费系统中)

资源控制(将进程组挂起,恢复)

Docker容器的能力

文件系统隔离:每个容器有自己的root文件系统

进程隔离:每个容器都运行在自己的进程环境中

网络隔离:容器间的虚拟网络接口和IP地址都是分开的

资源隔离和分组:使用cgroups将cpu和内存之类的资源独立分配给每个Docker

容器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王羲之的之

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

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

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

打赏作者

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

抵扣说明:

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

余额充值