zoukankan      html  css  js  c++  java
  • Docker 概述

    Docker 是一个开源项目,它以基于 Linux 操作系统级镜像来提供一个抽象的、自动分发的虚拟化附加层,通过该层使得在容器中更加容易打包应用。

    容器本身仅是基于 Linux 的 cgroups 的一个抽象实现,cgroups 是用于监控和限制进程及其子进程占用资源的底层内核结构。Dokcer 一开始是采用 LinuX Contrainers(LXC)的,但是后来切换到 runC,前者(LXC)以 libcontainer 被熟知。runC 则是跑在跟宿主相同的操作系统,这使得它可以共享很多宿主的操作系统资源,如 RAM、CPU、网络等。

    为何 Docker 如此特别?

    Docker 在虚拟的容器环境之上增加一个应用部署引擎。它是一个轻量级但十分强大的关于虚拟化技术的开源容器,在容器中还整合了构建并容器化应用的工作流程。

    好处:

    • Docker 可以使你迅速地根据组件组合出应用,并消除代码分发过程中遇到的障碍。例如你可以在同一个主机上运行两个应用相同但版本不同的 Docker 容器。
    • Docker 使你的代码尽可能快的通过测试并部署到生成环境。
    • Docker 难以置信的简单易用。无论是在简易版 Linux、OSX,还是 Windows 主机上都可以开始学习 Docker。(Windows 需要直接运行兼容 Linux 内核或者运行 Docker 镜像的虚拟机)。
    • 你可以在几分钟之内容器化你的应用。大多数 Docker 容器在一秒内即可启动。
    • Docker 容器几乎可以在任何地方运行。你可以在台式机、物理服务器、虚拟机上部署容器到数据中心,上传到公有云和私有云均可。这样,你就可以在任何地方运行完全一样的容器。

    在我们继续讨论 Docker 惊艳的容器化特征之前,我们先看一下虚拟机和容器的区别。

    虚拟机和容器的区别

    容器与虚拟机享有相似的资源隔离和分配,但是容器有一套不同的架构方式使得它本身更加便携和高效。我们看下面两个演示二者差别的两个表。

    虚拟机

    每一个虚拟机包括应用、必要的二进制文件和库、完整的客户操作系统,大小总计数十 GB。

    容器

    容器包括应用和应用的所有依赖,每个容器都使用容器自身选择的发行版本,但是与其他容器共享宿主操作系统的内核。

    在宿主操作系统的用户空间内,他们以隔离的进程方式运行。另外,他们并不像客户操作系统正常运行那样运行所有的进程。而且容器也不绑定任何特别的硬件基础设施!Docker 容器在任何计算机任何硬件基础设施任何云都可以运行。

    重要的是,虚拟机需要耗时几分钟来启动,而且对资源敏感,然而容器只需要几秒甚至更少时间启动,在资源较少负载过大时也能应付的了。所以,你可以在本地计算机运行很少的几个虚拟机用于开发目的,但是你可以运行很多很多的容器。这可以使你在开发环境中高效的运行应用环境的完整备份。而且,在生成环境中,这些资源节约很容易转化为成本节约。

    容器组件

    Docker 容器有一些顶层的组件需要我们先要了解,让我们看一下。

    Docker 客户端和服务端

    Docker 是 C/S 应用。

    Docker 客户端跟服务器(守护程序)通信,服务器来做所有的工作。Docker 通过包含命令行客户端(供 Linux、OS X 和 Windows 使用)和完整 RESTful 接口的二进制文件来分发。你可以在一台 Linux 主机上运行 Docker 守护进程和客户端,或者将你的本地 Docker 客户端连接到另一台 Linux 主机的远程 Docker 守护进程。

    Docker 镜像

    Docker 镜像是 Docker 的构建基石。这些镜像是 Docer 生命周期中的构建部分。他们是一种分层的形式,根据一系列说明一步一步构建产生的统一文件系统。Dockefile 是一个文本文档,它包含用户可以在命令行调用的所有命令从而组成一个镜像。使用一个基本的 Docker 镜像,可以添加、拷贝文件、执行命令、开放端口。

    你可以认为 Docker 文件是一种源码,而镜像是为产生容器而被编译的代码,而容器则是运行时代码。Docker 文件具有高度的便携性,可以随时共享、存储和更新。

    注册服务

    一旦你构建出一个镜像,你就可以在注册服务中存储它。注册服务有:公共的和私有的。像 Docker Hub、Quay.io、Container Registery by Google Cloud 的注册服务都有公共和私有的选项。你当然也可以在自己机器上运行一个自己的私有注册服务。

    容器

    容器是镜像的一个运行版本。

    你可以认为镜像是 Docker 的构建或者编译的一面,而容器是 Docker 的运行或者执行的一面。

    容器的生命周期跟你在容器里执行的命令的生命周期是一致的。一个容器可以只执行一个单个命令后立刻结束,或者可以让容器跟随耗时的命令一直运行。

    原文链接:http://mp.weixin.qq.com/s?__biz=MzA5OTAyNzQ2OA==&mid=2649689770&idx=1&sn=62641b1b28ff98b0c053f9da2d0b4015&scene=4#wechat_redirect

  • 相关阅读:
    366. Find Leaves of Binary Tree输出层数相同的叶子节点
    716. Max Stack实现一个最大stack
    515. Find Largest Value in Each Tree Row查找一行中的最大值
    364. Nested List Weight Sum II 大小反向的括号加权求和
    156. Binary Tree Upside Down反转二叉树
    698. Partition to K Equal Sum Subsets 数组分成和相同的k组
    244. Shortest Word Distance II 实现数组中的最短距离单词
    187. Repeated DNA Sequences重复的DNA子串序列
    java之hibernate之基于主键的双向一对一关联映射
    java之hibernate之基于主键的单向一对一关联映射
  • 原文地址:https://www.cnblogs.com/zhanghonghai/p/5736775.html
Copyright © 2011-2022 走看看