码迷,mamicode.com
首页 > 其他好文 > 详细

《docker》

时间:2021-01-27 13:12:20      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:时间片   普通用户   无法   rom   指令   令行   分发   执行   res   

 

docker pull 获取一个新的镜像
docker images 来列出本地主机上的镜像
docker run -itd --name ubuntu-test ubuntu
运行容器,并且可以通过 exec 命令进入 ubuntu 容器

docker ps 命令查看容器的运行信息:

docker build -t nginx:test 构建镜像




Dockerfile 是一个用来构建镜像的文本文件,包含了构建镜像所需的指令和说明。


FROM nginx
RUN echo ‘这是一个本地构建的nginx镜像‘ > /usr/share/nginx/html/index.html

 


FROM:定制的镜像都是基于基础镜像

RUN:用于执行后面跟着的命令行命令。

 

 

 

Docker 与虚拟机
虚拟机:
需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,
虚拟机一旦被开启,预分配给他的资源将全部被占用。每一个虚拟机包括应用,必要的二进制和库,
以及一个完整的用户操作系统。

Docker:
容器技术是和我们的宿主机共享硬件资源及操作系统可以实现资源的动态分配。
容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,
在用户空间以分离的进程运行。

 

 

从虚拟化层面来看,传统虚拟化技术是对硬件资源的虚拟,容器技术则是对进程的虚拟,
从而可提供更轻量 级的虚拟化,实现进程和资源的隔离。

从架构来看,Docker比虚拟化少了两层,取消了hypervisor层和GuestOS层,使用 Docker Engine 进行
调度和隔离,所有应用共用主机操作系统,因此在体量上,Docker较虚拟机更轻量级,在性能上优于
虚拟化,接近裸机性能。从应用场景来 看,Docker和虚拟化则有各自擅长的领域,

 

1. docker启动快速属于秒级别。虚拟机通常需要几分钟去启动。

2. docker需要的资源更少,docker在操作系统级别进行虚拟化,docker容器和内核交互,几乎没有
性能损耗,性能优于通过Hypervisor层与内核层的虚拟化。;


3. docker更轻量,docker的架构可以共用一个内核与共享应用程序库,所占内存极小。
同样的硬件环境,Docker运行的镜像数远多于虚拟机数量。对系统的利用率非常高


4. 与虚拟机相比,docker隔离性更弱,docker属于进程之间的隔离,虚拟机可实现系统级别隔离;

5. 安全性: docker的安全性也更弱。Docker的租户root和宿主机root等同,一旦容器内的用户从
普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作。

虚拟机租户root权限和宿主机的root虚拟机权限是分离的,并且虚拟机利用如Intel的VT-d和VT-x的
ring-1硬件隔离技术,这种隔离技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式
的硬件隔离,这使得容器容易受到攻击。


6. 可管理性:docker的集中化管理工具还不算成熟。各种虚拟化技术都有成熟的管理工具,
例如VMware vCenter提供完备的虚拟机管理能力。


7. 高可用和可恢复性:docker对业务的高可用支持是通过快速重新部署实现的。
虚拟化具备负载均衡,高可用,容错,迁移和数据保护等经过生产实践检验的成熟保障机制,
VMware可承诺虚拟机99.999%高可用,保证业务连续性。

8. 快速创建、删除:虚拟化创建是分钟级别的,Docker容器创建是秒级别的,Docker的快速迭代性,
决定了无论是开发、测试、部署都可以节约大量时间。


9. 交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化;
Docker在Dockerfile中记录了容器构建过程,可在集群中实现快速分发和快速部署;

 


Linux内核提供namespace完成隔离,Cgroup完成资源限制。


容器本质上是把系统中为同一个业务目标服务的相关进程合成一组,放在一个叫做namespace的空间中,
同一个namespace中的进程能够互相通信,但看不见其他namespace中的进程。

每个namespace可以拥有自己独立的主机名、进程ID系统、IPC、网络、文件系统、用户等等资源。
在某种程度上,实现了一个简单的虚拟:让一个主机上可以同时运行多个互不感知的系统。



资源限制(Resource Limitation):
cgroups 可以对进程组使用的资源总额进行限制。如设定应用运行时使用内存的上限,一旦超过这个配额
就发出 OOM(Out of Memory)。


优先级分配(Prioritization):
通过分配的 CPU 时间片数量及硬盘 IO 带宽大小,实际上就相当于控制了进程运行的优先级。

资源统计(Accounting):
cgroups 可以统计系统的资源使用量,如 CPU 使用时长、内存用量等等,这个功能非常适用于计费。

进程控制(Control):cgroups 可以对进程组执行挂起、恢复等操作。
Docker正是使用cgroup进行资源划分,每个容器都作为一个进程运行起来,每个业务容器都会有一个
基础的pause容器也就是POD作为基础容器。

《docker》

标签:时间片   普通用户   无法   rom   指令   令行   分发   执行   res   

原文地址:https://www.cnblogs.com/zrzct/p/14327981.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!