一、什么是Docker

Docker是基于Go语言实现的云开源项目. Docker 的主要目标是:"Bulid,Ship and  Run Any App ,AnyWhere" ,即通过对应用组件的封装、分发、部署、运行等生命周期的管理,达到应用组件级别的"一次封装,到处运行"。这里的应用组件,即可以是一个Web应用,也可以使一套数据库服务,甚至是一个操作系统或编译器.

Docker 基于Linux 的多项开源技术提供了高效、敏捷和轻量级的容器方案,并且支持在多种主流云平台(PaaS) 和本地系统上部署。可以说Docker为应用的开发和部署提供了"一站式"的解决方案。

Docker引擎的基础是Linux容器(Linux Containers , LXC)技术. 在LXC的基础上,Docker进一步优化了容器的使用体验。Docker提供了各种容器管理工具(如分发、版本、移植等)让用户无需关注底层的操作,可以简单明了的管理和使用容器。用户操作Docker容器就像操作一个轻量级的虚拟机那样简单.

二、Docker与虚拟机的比较

    作为一种轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机方式相比具有显著优势:
  • Docker容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式要快很多。
  • Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。
  • Docker通过类似Git的操作来方便用户获取、分发和更新应用镜像,指令简明 ,学习成本很低。
  • Docker通过Dockerfile配置文件来支持灵活的自动化创建和部署机制,提高工作效率.
      Docker容器除了运行其中的应用之外,基本不消耗额外的系统资源,保证应有性能的同时,尽量减少系统开销。传统虚拟机方式运行N个不同的应用就要启动N个虚拟机(每个虚拟机需要单独分配独占的内存、磁盘等资源),而Docker只需要启动N个隔离的容器,并将应用放到容器内即可。
      下表总结了使用Docker容器技术与传统虚拟机技术的特性比较。
       
下图比较了Docker和常见虚拟机方式的不同之处。
传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。

Docker容器是在操作系统层面实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级.

三、什么是Docker引擎(Engine)

Docker引擎是一个客户端--服务器应用,由如下主要组件组成:
  • 一个后台守护进程(daemon process.)
  • 一个REST API 指定特定的接口,程序可以使用这些接口告诉和指导守护进程做什么.
  • 一个命令行端口(CLI),client.

CLI使用Docker的REST API 来和Docker的守护进程交互,通过脚本或直接的CLI命令。
守护进程(dameon)创建和管理Docker对象(objects).Docker对象包括镜像(images)、容器(containers)、网络(networks)、数据卷(data volumes)等等.
注:docker通过开源的Apache 2.0 许可认证.

四、Docker的架构

Docker使用客户端-服务器(client-server)架构. Docker client 告诉Docker daemon 建立、运行、和分发你你的Docker容器. Docker client和daemon可以运行在同一个系统中,或者可以使用Docker client 和远程的Docker  daemon 取得联系。docker客服端和docker守护进程之间通过sockets 或者REST API 交互.

1、Docker守护进程

如上图所示,Docker守护进程运行在一台主机上,用户不直接和守护进程交互,而是通过Docker客户端交互.

2、Docker客户端

Docker客户端,实际是Docker的二进制程序,是主要的用户与Docker的交互方式。它接收用户指令,并与背后的Docker守护进程交互,如此来回往复.

3、Docker 内部(Inside)

要理解Docker内部情况,你需要知道如下三种资源:
  • Docker   images---Docker 镜像
  • Docker   registries----Docker 注册服务器
  • Docker   containers-----Docker容器
3.1、Docker镜像
       Docker镜像类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统。
       例如:一个镜像可以只包含一个完整的Ubuntu操作系统环境,可以把它称为一个Ubuntu镜像。镜像也可以安装了Apache应用程序(或用户需要的其他软件),可以把它称为一个Apache镜像。
       镜像是创建Docker容器的基础。通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并通过简单的命令可以直接使用.
3.2、Docker容器
Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。
容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是互相隔离、互不可见的。
读者可以把容器看做一个简易版的Linux系统环境(这包括root用户权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序打包而成的应有盒子。
镜像自身是只读的。容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变.
3.3、注册服务器(Registry)
Docker注册服务器是存放仓库的地方,其上往往存放过个仓库。每个仓库集中存放某一个类镜像,往往包括多个镜像文件,可以通过不同的标签(tag)来进行区分。根据所存储的镜像公开与否,Docker仓库可以分为公开(Public)仓库和私有(Private)仓库两种形式.
                                                                               
                                                                                                                               图--仓库和注册服务器

目前,最大的公开仓库是Docker Hub,存放数量庞大的镜像供用户下载.  用户如果不希望公开分享自己的镜像文件,Docker也支持在本地网络内创建一个只能自己访问的私有仓库。
当用户创建了自己的镜像之后就可以使用push命令将它上传到指定的公有或者私有仓库。这样用户下次用户下次在另一台机器上使用该竟像时,只需将其从仓库上pull下来就可以了。




     

Docker学习笔记2: Docker 概述的更多相关文章

  1. Docker学习笔记之docker volume 容器卷的那些事(一)

    预览目录 volume 方式 相关用例 使用方式 使用 volume driver bind mount 方式 相关用例 使用方式 配置selinux标签 配置macOS的安装一致性 tmpfs 方式 ...

  2. Docker学习笔记之Docker的Build 原理

    0x00 概述 使用 Docker 时,最常用的命令无非是 docker container 和 docker image 相关的子命令,当然最初没有管理类命令(或者说分组)的时候,最常使用的命令也无 ...

  3. Docker学习笔记之Docker应用于服务化开发

    0x00 概述 上一节里我们谈到了小型的独立项目如何使用 Docker Compose 来搭建程序的运行环境,对于由多人或多部门参与的中大型服务化架构的项目,仅由一个 Docker Compose 项 ...

  4. Docker学习笔记之Docker的数据管理和存储

    0x00 概述 数据是应用程序重要的产出,所以很好的管理和存储数据,是对应用程序劳动结果的尊重.特别是在大数据时代,所有的数据都是重要的资产,保护好数据是每个开发者必须掌握的技能.我们知道,在 Doc ...

  5. Docker学习笔记之Docker 的简历

    0x00 概述 在了解虚拟化和容器技术后,我们就更容易理解 Docker 的相关知识了.在这一小节中,我将介绍关于 Docker 的出现和发展,Docker 背后的技术.同时,我们将阐述 Docker ...

  6. DOCKER 学习笔记7 Docker Machine 在阿里云实例化ECS 以及本地Windows 实例化虚拟机实战

    前言 通过以上6小节的学习,已经可以使用DOCKER 熟练的部署应用程序了.大家都可以发现使用 DOCKER 带来的方便之处,因为现在的话,只是在一台服务器上部署,这样部署,我们只需要一条命令,需要的 ...

  7. DOCKER 学习笔记7 Docker Machine 建立虚拟机实战,以及错误总结

    前言 通过以上6小节的学习,已经可以使用DOCKER 熟练的部署应用程序了.大家都可以发现使用 DOCKER 带来的方便之处,因为现在的话,只是在一台服务器上部署,这样部署,我们只需要一条命令,需要的 ...

  8. DOCKER 学习笔记8 Docker Swarm 集群搭建

    前言 在前面的文章中,已经介绍如何在本地通过Docker Machine 创建虚拟Docker 主机,以及也可以在本地Windows 创建虚拟主机,也是可以使用的.这一节,我们将继续学习 Docker ...

  9. Docker学习笔记(1) — docker 常用命令

    1. docker version显示 Docker 版本信息.2. docker info显示 Docker 系统信息,包括镜像和容器数.3. docker searchdocker search ...

随机推荐

  1. fedora27安装DB2 Express-C 11

    首先在官网下载对应的安装包和语言包两个文件. 然后通过tar -zxvf命令将下载的两个文件解压. 其中一个文件解压后是名为expc的文件,进入这个文件.里面有一个名为db2setup的文件. 在命令 ...

  2. 【DataMagic】如何在万亿级别规模的数据量上使用Spark

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文首发在云+社区,未经许可,不得转载. 作者:张国鹏 | 腾讯 运营开发工程师 一.前言 Spark作为大数据计算引擎,凭借其快速.稳定. ...

  3. 关于自定义view--实现自定义水波纹效果

    开发中的东西太多,怕自己忘记了,简单记录一下. 声明:此控件借鉴了大佬的想法,在此感谢大佬提供的支持,我只是把大佬的想法拿出来而已. ok,废话到此结束,看效果: 分析一下,我们可以看到,图中有两个圆 ...

  4. servlet之重写

    package app02a;import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;impo ...

  5. 机器学习技法:05 Kernel Logistic Regression

    Roadmap Soft-Margin SVM as Regularized Model SVM versus Logistic Regression SVM for Soft Binary Clas ...

  6. wget命令行本地克隆一个网站

    命令: wget -k -p -nH -N http://www.baidu.com -k 把已下载文件中的所有链接都转换为本地引用,不在依赖原始或在线内容 -p  下载所有必要文件,确保离线可用,包 ...

  7. [Luogu 3674]小清新人渣的本愿

    Description 题库链接 给你一个序列 \(A\) ,长度为 \(n\) ,有 \(m\) 次操作,每次询问一个区间是否可以 选出两个数它们的差为 \(x\) : 选出两个数它们的和为 \(x ...

  8. [POI 2006]OKR-Periods of Words

    Description 题库链接 定义 \(A\) 串为 \(B\) 串的循环串,当且仅当 \(A\) 是 \(B\) 的前缀(不包括 \(B\) 本身),且 \(B\) 为连续的 \(A\) 串拼接 ...

  9. [HNOI2012]射箭

    Description 沫沫最近在玩一个二维的射箭游戏,如下图 1 所示,这个游戏中的 x 轴在地面,第一象限中有一些竖直线段作为靶子,任意两个靶子都没有公共部分,也不会接触坐标轴.沫沫控制一个位于( ...

  10. [Codeforces]762F - Tree nesting

    题目大意:给出一棵n个点的树和一棵m个点的树,问第一棵树有多少个连通子树与第二棵树同构.(n<=1000,m<=12) 做法:先找出第二棵树的重心(可能为边),以这个重心为根,可以避免重复 ...