一、什么是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. 【PYTHON】用户登录三次错误锁定

    黑名单:blacklist.txt 用户名单:username_password.py # Author:Stephen Yuan # 用户名和密码 username_password = { ', ...

  2. Django REST framework+Vue 打造生鲜超市(十一)

    十二.支付宝沙箱环境配置 12.1.创建应用 进入蚂蚁金服开放平台(https://open.alipay.com/platform/home.htm),登录后进入管理中心-->>应用列表 ...

  3. LeetCode169:Majority Element(Hash表\位操作未懂)

    题目来源: Given an array of size n, find the majority element. The majority element is the element that ...

  4. [Awson原创]网络(network)

    Description Awson是某国际学校信竞组的一只菜鸡.学校为了使教育信息化,打算在学校内新建机房,并且为机房联网.但吝啬的学校又不想花费过多的开销,于是将规划 网络路线的任务交给了信竞组的A ...

  5. 计蒜客NOIP模拟赛(3) D1T2 信息传递

    一个数据包在一个无向网络中传递.在时刻0,该数据包将依照特定的概率随机抵达网络中的某个节点.网络可以看做一张完全带权无向图,包含N个节点,若t时刻数据包在节点i,则在t+1时刻,数据包被传递到节点j的 ...

  6. [HNOI2011]卡农

    题目描述 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则.他将声音分成 n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 到 n 个音阶构成的 ...

  7. 【BZOJ2705】【Sdoi2012】Longge的问题

    Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出\(\Sigma gcd(i, N) (1 \leq i \leq N ...

  8. bzoj 3191: [JLOI2013]卡牌游戏

    Description N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X ...

  9. 勤拂拭软件 java web 开发教程(1) - 开发环境搭建

    勤拂拭软件系列教程 之 Java Web开发之旅(1) Java Web开发环境搭建 1 前言 工作过程中,遇到不少朋友想要学习jsp开发,然而第一步都迈不出,连一个基本的环境都没有,试问,如何能够继 ...

  10. CCA更新流程分析

    1 CCA CCA(空间信道评估)在CSMA/CA中比较非常重要,事关整机吞吐量,所以对其实现进行简单分析.CCA好像应该有2种:CCA-CS,是属于PLCP层的,捕获到能量且能量值高于-82dB后, ...