Docker概述:什么Docker如此特别,它是如何构建的

本文讲的是Docker概述:什么Docker如此特别,它是如何构建的,【编者的话】在上一系列介绍中,我们大体地介绍了CoreOS。在这个系列中我想介绍一下Docker。本文我们看一下为什么Docker如此特别,它是如何构建的。我们会从基本开始介绍,所以读者不必担心自己是刚接触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的运行或者执行的一面。

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

总结

在本文我们讲述了:

  • 什么使得Docker如此特别
  • 虚拟机和容器的主要区别
  • 组成Docker的主要组件

在我的下一篇博文中,我们将介绍启动容器、构建镜像,并在数据分区中工作的内容

原文链接:Docker Overview, Part One(翻译:姜俊厚)

原文发布时间为:2016-03-25

本文作者:whole 

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:Docker概述:什么Docker如此特别,它是如何构建的

时间: 2024-10-28 07:18:36

Docker概述:什么Docker如此特别,它是如何构建的的相关文章

Docker概述 第二章

本文讲的是Docker概述 第二章,[编者的话]在本次介绍Docker的迷你系列第一章中,我们了解了什么使Docker如此特别.虚拟机与容器之间的区别和组成Docker的主要组件.在本博文中,我们将直接与一些容器接触.尤其是,我们将展示如何启动一个容器,如何使用Dockerfile构建镜像,如何与注册服务(registries)打交道,并介绍数据卷(data volumes)的基本概念. 启动容器 在启动一个容器之前,你需要先从注册服务中拉取 $ docker pull alpine 启动容器执

Docker基础之一: Docker架构

Docker的架构 Docker使用的是 C-S架构.Docker的客户端同Docker Daemon进行交互,其中主要的工作是通过 daemon来完成,包括拉取镜像,编译镜像,运行容器,发布容器等.Docker client和daemon可以运行在同一个系统上,也可以通过远程方式进行访问.Docker client和daemon之间是在 socket 上通过RESTful API来进行交互的.  Docker Daemon 如上图所示,Docker daemon运行在一个主机之上,用户并不是直

你真的了解Docker吗?——Docker插件机制详解

云栖TechDay活动第十八期中,阿里云容器服务团队的核心成员陈萌辉带来了题为<Docker插件机制详解>的分享,分享中,他结合阿里云容器服务实践介绍了Docker插件的基本原理.实现方法以及插件机制未来的演进. 幻灯片下载地址:https://yq.aliyun.com/attachment/download/?filename=bdefe06ba7a14d7604af5a63a4bcc4f3.pdf 以下为现场分享观点整理. 为什么需要Docker插件?   Docker之所以这么火并且有

《循序渐进学Docker》——第3章 Ubuntu下使用Docker 3.1 Docker的运行平台

第3章 Ubuntu下使用Docker 第2章我们介绍了在Windows下如何搭建一个Docker运行环境.这一章我们要切换环境,在Ubuntu系统下使用Docker.为什么要切换到Ubuntu下呢,还要从Docker的运行平台说起. 3.1 Docker的运行平台 首先,我们需要知道Docker可以在哪些操作系统下运行.截止到2016年3月底,几乎所有的Linux系统(如Red Hat Enterprise Linux(RHEL)/Centos.Debian/Ubuntu.gentoo.arc

《循序渐进学Docker》——第一部分 Part 1 基础篇 第1章 全面认识Docker 1.1 Docker是什么

第一部分 Part 1 基 础 篇 第1章 全面认识Docker 第2章 初步体验Docker 第3章 Ubuntu下使用Docker 第4章 Docker的基础知识 第1章 全面认识Docker 欢迎来到Docker的世界. Docker,Golang社区杀手级的应用,是Github上最活跃的项目之一,也是开源社区最受欢迎的项目. Docker,号称要成为所有云应用的基石,并把互联网升级到下一代. 开发.测试.运维人员看到Docker,都激动地说:"太好了,这正是我所需要的!" Do

前端也应该了解点 docker 知识:docker 架构(上)

上一篇文章 前端也应该了解点 docker 知识:docker 的理念与场景 介绍了 docker 的一些理念,以及在前端方面可能的应用场景,本篇我们梳理一下 docker 的架构. 话说,我们团队的小明同学看了上篇文章之后,很是激动,迫不及待的想尝试下 docker ,然后按照网上一些教程跑出来了一个 "Hello world" ,激动的差点把鼠标给扔了.如果小明的故事到这里,那就不是我们团队的小明了,他是位爱动脑筋,对细节刨根问底的同学,他没有沉浸在跑出来 "Hello

Docker -- 2 -- 利用docker部署网站和数据库

在Docker – 系统整洁之道 – 1中已经对Docker的一些命令和Docker镜像的使用及操作做了记录. 这次就利用docker进行一次真正的实例使用,使用docker搭建一个简单的答题系统,这个系统是当时做来给网络安全周做手机答题的系统,很简单,代码风格很差. 这篇主要记录了三种docker使用的方式. 用supervisor方式运行一个多进程的docker实例 创建一个ngnix和php运行的环境 创建一个ngnix,php,mysql集合运行的环境,使用docker-compose构

openstack 启动docker实例,docker实例中运行手写的发包程序,docker实例无法启动

问题描述 各位好,小弟最近遇到了一个问题,已经搞了好多天了.背景:就是我想用openstack启动docker实例(docker镜像里面有个http请求客户端),让docker实例启动之后,请求默认的HTTP服务器.我在openstackKilo版本,(controller+network+compute1(kvm)+compute2(docker)),装了novadockerdriver.可以用openstack启动docker实例,但是只能启动两个指定的镜像(类似于ubuntu-sshd这种

Docker 周报:Docker 已扎根新一代 PaaS

新闻 1.<CoreOS收购Quay.io,提供企业级的Docker Registry>:CoreOS近来势头正劲,继上个月宣布完成800万美元的A轮融资后,近日又宣布收购私有Docker仓库服务商Quay.io.此次收购的具体细节目前尚未披露,不过基于Quay.io的CoreOS企业版Registry已经上线.和GitHub企业版一样,CoreOS企业版搭建在企业本地网络中,并且包含了Quay.io的所有东西,比如UI.访问控制.团队协作. 2.<CenturyLink发布Docker