zoukankan      html  css  js  c++  java
  • Docker 简介

    转自: http://vc2tea.com/docker-intro/

    Docker 简介

    Docker 已经火了有差不多2年了,自己的部分项目也都通过 Docker 的方式进行部署,觉得还是值得简单分享一下自己的学习笔记的,下面会尽可能通俗地进行解释,但由于经验和知识水平所限,难免会有理解上的偏差或者错误,详细请以 Docker 官方网站的介绍为准。

    Docker 解决了什么问题

    Docker 和虚拟主机(VM)要解决的问题是非常类似的:

    1. 在同一台主机上运行不同的程序,而这些不同的程序之间有可能存在依赖冲突的情况;
    2. 即使依赖冲突能在同一台主机上解决,但随着运行的程序的数量互相交织,维护的成本也将会成指数上升;
    3. 程序开发过程中,由于硬件、操作系统的细微差别,在多人共同开发和部署到生产环境上后,可能会出现难以被排查出来的问题;
    4. 分布式/集群环境的程序分发和环境配置问题;
    5. 硬件资源的利用率;

    Docker 和 VM 之间的区别

    因为这样,以致于很多人认为 Docker 也是一种虚拟化技术,实际上我更倾向于称其为容器化/沙盒化技术。

    借用以下两张图来对比说明 

    === 从硬件资源利用情况看 ===

    虚拟机(VM)实际上利用了虚拟化的技术,获取了主机上实际的硬件资源(内存、CPU),通过获取到的硬件资源重新构建一个接近于真实的机器,而这部分被分配过的硬件资源(比如 512MB 内存)在虚拟机启动了以后,不管是否真的有使用到了,对于主机来说就真的少了这部分的资源了( 可用内存 = 物理内存 - 512MB);

    而 Docker 利用的是 Linux 主机上的内核技术,当一个容器在运行的时候,实际上是“映射”成主机上的一批进程,这些进程相互独立,共享主机的硬件资源,假设容器1运行 MySQL 占用了 100MB 内存,容器2运行 nginx 占用 50MB 内存,在理论上(不计算容器本身的损耗的话)主机当前剩余可用内存 = 物理内存 - 100MB - 50MB;

    === 从程序运行归属情况看 ===

    VM中的程序,是在隔离于主机的一个独立的操作系统(GuestOS)中运行的,程序运行的前提是 GuestOS 处于启动的状态,而程序运行后对于主机来说是完全透明的,主机无法看到VM中运行了什么进程;

    而在 Docker 容器中运行的程序,只是隔离了程序的依赖关系(Bins/Libs),程序的执行者还是属于主机的,对主机来说所有容器在执行的程序都是主机的进程,不存在 GuestOS 所以也不存在需要启动 GuestOS;

    === 从对主机操作系统的依赖看 ===

    VM依赖的是虚拟化技术(Hypervisor),当具体使用的技术是在对应的平台下能运行的话,该操作系统平台就可以创建VM并运行;

    而 Docker 的运行原理是基于 LXC,这是基于 Linux 内核版本 2.6.24+ 以上才有的技术,所以依赖于 Linux,在其它平台上(Windows、OSX)无法直接使用(但可通过VM创建一个Linux系统来使用);

    === Docker Logo 的解读 ===

    其实 Docker 的 Logo 很形象的说明了它自身的概念

    鲸鱼通过身上的集装箱(Container)来将不同种类的货物进行隔离;而不是通过生出很多小鲸鱼(Guest OS)来承运不同种类的货物。

  • 相关阅读:
    揭秘!如何快速提高网站权重-关键词百度指数叠加
    dede编辑文章不更新时间的方法
    PHPCMS V9轻松完成WAP手机网站搭建全教程
    如何建立关键词词库
    3gcms-Flash幻灯片上传后图片模糊解决办法
    手机端wap站网页播放腾讯视频代码
    解决dede编辑器不能保存word文档样式问题
    vi查找替换命令详解 (转载)
    eclipse上安装 windowBuilder方法
    单播、多播(组播)和广播的区别
  • 原文地址:https://www.cnblogs.com/hjbf/p/10143266.html
Copyright © 2011-2022 走看看