Docker进阶之二:Docker内部组件

                                Docker内部组件

Namespaces

   命名空间,Linux内核提供的一种对进程资源隔离的机制,例如进程,网络,挂载点等资源。

     docker run -d busybox ping baidu.com

   

    只能看见容器内的资源情况,并看不到宿主机的任何进程和文件系统.

CGroups

   控制组,Linux内核提供的一种限制进程资源的机制;例如cpu,内存等资源。

    

主要防止某一个容器资源过多导致宿主机资源紧张

UnionFS

     联合文件系统,支持将不同位置的目录挂载到同一虚拟文件系统,形成一种分层的模型。

   

                      虚拟机和容器的区别

  

虚拟机:

    使用虚拟机运行多个相互隔离的应用时,如下图:

  

  

基础设施(Infrastructure)。它可以是你的个人电脑,数据中心的服务器,或者是云主机。

主操作系统(Host Operating System)。你的个人电脑之上,运行的可能是MacOS,Windows或者某个Linux发行版。

虚拟机管理系统(Hypervisor)。利用Hypervisor,可以在主操作系统之上运行多个不同的从操作系统。类型1的Hypervisor有支持MacOS的HyperKit,支持Windows的Hyper-V以及支持Linux的KVM。类型2的Hypervisor有VirtualBox和VMWare。

从操作系统(Guest Operating System)。假设你需要运行3个相互隔离的应用,则需要使用Hypervisor启动3个从操作系统,也就是3个虚拟机。这些虚拟机都非常大,也许有700MB,这就意味着它们将占用2.1GB的磁盘空间。更糟糕的是,它们还会消耗很多CPU和内存。

各种依赖。每一个从操作系统都需要安装许多依赖。如果你的的应用需要连接PostgreSQL的话,则需要安装libpq-dev;如果你使用Ruby的话,应该需要安装gems;如果使用其他编程语言,比如Python或者Node.js,都会需要安装对应的依赖库。

应用。安装依赖之后,就可以在各个从操作系统分别运行应用了,这样各个应用就是相互隔离的。

   Docker:

   使用Docker容器运行多个相互隔离的应用时,如下图:

    

  

主操作系统(Host Operating System)。所有主流的Linux发行版都可以运行Docker。对于MacOS和Windows,也有一些办法"运行"Docker。

Docker守护进程(Docker Daemon)。Docker守护进程取代了Hypervisor,它是运行在操作系统之上的后台进程,负责管理Docker容器。

各种依赖。对于Docker,应用的所有依赖都打包在Docker镜像中,Docker容器是基于Docker镜像创建的。

应用。应用的源代码与它的依赖都打包在Docker镜像中,不同的应用需要不同的Docker镜像。不同的应用运行在不同的Docker容器中,它们是相互隔离的。

虚拟机与容器区别

? 启动时间
Docker秒级启动,KVM分钟级启动。
? 轻量级
容器镜像大小通常以M为单位,虚拟机以G为单位。
容器资源占用小,要比虚拟机部署更快速。
?性能
容器共享宿主机内核,系统级虚拟化,占用资源少,没有Hypervisor层开销,容器性能基本接近物理机;
虚拟机需要Hypervisor层支持,虚拟化一些设备,具有完整的GuestOS,虚拟化开销大,因而降低性能,没有容器性能好。
? 安全性

由于共享宿主机内核,只是进程级隔离,因此隔离性和稳定性不如虚拟机,容器具有一定权限访问宿主机内核,存在一定安全隐患。

? 使用要求
KVM基于硬件的完全虚拟化,需要硬件CPU虚拟化技术支持;
容器共享宿主机内核,可运行在主流的Linux发行版,不用考虑CPU是否支持虚拟化技术。

总结:虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。

Docker通常用于隔离不同的应用,例如前端,后端以及数据库。

  

原文地址:https://www.cnblogs.com/521football/p/10483980.html

时间: 2024-10-11 13:28:27

Docker进阶之二:Docker内部组件的相关文章

分布式进阶(十二)Docker给每一个启动的container指定一个ip, 这个如何做?

使用pipework工具. 前提:每个Container所做的工作现在还很少,可以不用save.commit. 为了便于通信,自定义一个网桥(192.168.1.180/24),使之IP与宿主主机IP在同一网段内. bridge模式 bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace.设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上.下面着重介绍一下此模式. bridge模式的拓扑 当Docker server启动时,会在主机

Docker安全性(二)——带来了新的安全功能给Docker

Docker安全性(二)--带来了新的安全功能给Docker 本篇翻译自Daniel J Walsh的一篇开源文章:http://opensource.com/business/14/9/security-for-docker 作者的演讲视频:http://v.youku.com/v_show/id_XODQwNjUwNTIw.html 在这系列的第一篇Docker的安全性,我写了"容器中不包含".在第二篇文章中,我将讨论为什么我们这样做并且我们正在对它做什么. Docker,红帽和开

Docker进阶与实战_帝都客_ pdf扫描版_完整版_资源免费下载

  <Docker进阶与实战>由机械工业出版社出版. PDF下载地址 :http://www.diduker.com/html/4640.html   PDF相关截图 :   编辑推荐 作者简介 华为Docker实践小组,致力于容器技术探索,结合华为CT/IT/Mobile等应用场景,重点在容器引擎.仓库.网络和卷存储等多领域攻关:同时该团队遵循开源精神,将开发过程中的诸多价值特性同步贡献到D0cker社区中,目前在D0cker社区贡献中全球排名稳居前三,国内排名第一. 目录 序  前言  第

docker进阶——数据管理与网络

用户在使用 Docker 的过程中,势必需要查看容器内应用产生的数据,或者 需要将容器内数据进行备份,甚至多个容器之间进行数据共享,这必然会涉及 到容器的数据管理 (1)Data Volume (数据卷) (2)Data Volume Dontainers --- 数据卷容器 Data Volume ---数据卷 Data Volume 本质上是 Docker Host 文件系统中的目录或文件,使用类似 与 Linux 下对目录或者文件进行 mount 操作.数据卷可以在容器之间共享 和重用,对

【云计算】Docker云平台—Docker进阶

Docker云平台系列共三讲,此为第二讲:Docker进阶 参考资料: 五个Docker监控工具的对比:http://www.open-open.com/lib/view/open1433897177879.html Docker编排工具简介:http://www.aixchina.net/home/space.php?uid=59140&do=blog&id=135681 集成部署攻略:http://jingyan.baidu.com/article/425e69e6df76bbbe15

Docker入门(二)

一.Docker相关概念 1.Docker: namespace,cgroup: 解决方案: lxc,openvz lxc:linux containers docker最初就是lxc的封装版本. docker engine/docker server:输出一个api,用于接受外部请求 接受到client请求,借助于lxc虚拟化技术,在lxc上创建一个虚拟机实例. docker借助于外部的dockerhub,实现image 后台docker不再使用lxc,使用libcontainer[cento

斌哥的 Docker 进阶指南

过去的一年中,关于 Docker 的话题从未断过,而如今,从尝试 Docker 到最终决定使用 Docker 的转化率依然在逐步升高,关于 Docker 的讨论更是有增无减.另一方面,大家的注意力也渐渐从 "Docker 是什么"转移到"实践 Docker"与"监控 Docker"上. 本文转自刘斌博文「如何选择 Docker 监控方案 」,文中刘斌从技术的角度深入解释了 Docker 监控的数据采集原理,介绍了现有开源的监控方案,以及能够对 D

Docker入门(二)基本操作

(一).容器的使用1.docker客户端命令.输入docker查看docker用法的语法和相关的命令. [[email protected] ~]# docker Usage: docker [OPTIONS] COMMAND A self-sufficient runtime for containers Options: --config string Location of client config files (default "/root/.docker") -D, --d

docker学习(二)

网络管理 四种网络模式 host模式使用docker run时使用--net=host指定docker使用的网络实际上和宿主机一样在容器内看到的网卡ip是宿主机上的ipcontainer模式使用--net=container:container_id/container_name多个容器使用共同的网络看到的ip是一样的none模式使用--net=none指定这种模式下不会配置任何网络bridge模式使用--net=bridge指定默认模式不用指定默认就是这种网络模式.这种模式会为每个容器分配一个