1.Docker是什么?

我们在理解 Docker 之前,首先得先区分清楚两个概念,容器和虚拟机。
可能很多朋友都用过虚拟机,而对容器这个概念比较的陌生。我们用的传统虚拟机如 VMware , VisualBox 之类的需要模拟整台机器包括硬件。每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。

容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系。通过使用容器,我们可以轻松打包应用程序的代码、配置和依赖关系,将其变成容易使用的构建块,从而实现环境一致性、运营效率、开发人员生产力和版本控制等诸多目标。容器可以帮助保证应用程序快速、可靠、一致地部署,其间不受部署环境的影响。容器还赋予我们对资源更多的精细化控制能力,让我们的基础设施效率更高。

通过下面这幅图,我们可以很直观的看出这两者的区别所在:

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。而 Linux 容器是 Linux 发展出的另一种虚拟化技术,简单来讲, Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker ,就不用担心环境问题。
总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

2.Docker 的优势:

3.Docker 中三个基本的概念:

  • Image(镜像)
  • Container(容器)
  • Repository(仓库)

3.1Image(镜像)

那么镜像到底是什么呢?Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变,镜像(Image)就是一堆只读层(read-only layer)的统一视角。

从左边我们看到了多个只读层,它们重叠在一起。除了最下面一层,其他层都会有一个指针指向下一层。这些层是 Docker 内部的实现细节,并且能够在主机的文件系统上访问到。统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角。这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。我们可以在图片的右边看到这个视角的形式。

3.2Container(容器)

容器(Container)的定义和镜像(Image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

由于容器的定义并没有提及是否要运行容器,所以实际上,容器 = 镜像 + 读写层。

3.3Repository(仓库)

Docker 仓库是集中存放镜像文件的场所。镜像构建完成后,可以很容易的在当前宿主上运行。但是, 如果需要在其他服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry(仓库注册服务器)就是这样的服务。有时候会把仓库(Repository)和仓库注册服务器(Registry)混为一谈,并不严格区分。

Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。实际上,一个 Docker Registry 中可以包含多个仓库(Repository),每个仓库可以包含多个标签(Tag),每个标签对应着一个镜像。所以说,镜像仓库是 Docker 用来集中存放镜像文件的地方,类似于我们之前常用的代码仓库。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 Latest 作为默认标签。

仓库又可以分为两种形式:

  • Public(公有仓库)
  • Private(私有仓库)

Docker Registry 公有仓库是开放给用户使用、允许用户管理镜像的 Registry 服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。当用户创建了自己的镜像之后就可以使用 Push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 Pull 下来就可以了。

4.Docker 的架构:

我们从下图可以直观地看到 Docker 的架构:

Docker 使用 C/S 结构,即客户端/服务器体系结构。Docker 客户端与 Docker 服务器进行交互,Docker服务端负责构建、运行和分发 Docker 镜像。

5.Docker 常用命令:

不能不知道的Docker知识相关推荐

  1. 你可能不知道的 docker 命令的奇淫怪巧

    你可能不知道的 docker 命令的奇淫怪巧 Intro 分享一些可能会用到的一些简单实用却可能是你不知道的 docker 命令 dangling images build 自己的 docker 镜像 ...

  2. C语言你不得不知道的小知识

    C语言你不得不知道的小知识: 1: 常见的变量修饰关键字:static.const.extern.volatile.register static:(该变量保存在全局静态区)  a.修饰局部变量--& ...

  3. 一些你我所不知道的小知识

    一.老师没教的事 a.人类全身上下,最强韧有力的肌肉,竟是舌头. b.张开眼睛打喷嚏是不可能的. c.憋气自杀也是不可能成功的. d.每一次你舔一张邮票的背胶,你就吸收了十分之一卡路里. e.右撇子平 ...

  4. 你可能不知道的Docker资源限制

    本篇内容涉及Docker的内存与CPU限制,可以用于在实际开发中为指定容器设置限制最大使用的资源量,预计阅读时间为5分钟. 01 - What is 资源限制? 默认情况下,容器是没有资源限制的,它会 ...

  5. 5不触发系统键盘_关于光轴,你所不知道的冷知识

    LK光轴,可以说是双飞燕的名片之一.时至今日,光轴已经从一开始的被观望.被怀疑到了被认可,甚至有仿光轴的产品的出现.那么,关于光轴的有趣冷知识,你知道吗? 1. 光轴是不是机械键盘? 不少人觉得,机械 ...

  6. mysqld:表mysql.plugin不存在_99%测试工程师不知道的数据库知识|干货

    点击上方"蓝字"关注我们 数据库,简而言之可视为电子化的文件柜--存储电子文件的处所,用户可以对文件中的数据进行新增.查询.更新.删除等操作. 所谓"数据库"是 ...

  7. 程序员常用编程工具: VS Code,那些你不得不知道的小知识!

    工欲善其事,必先利其器.这句话真好,一句话可以写两篇文章.上一篇我们介绍了键盘,对于程序员来说,光有键盘可不行,你还需要一个趁手的编程工具.就像很多工程师对 HHKB 键盘情有独钟一样,好的编程工具可 ...

  8. android动画能超过父容器吗,Android中你不得不知道的动画知识 (一)

    动画基础 在日常开发中,我们往往不是仅仅局限于实现产品相应的功能就可以了,为了达到更好的用户体验我们还会加入一些比较好看的动画效果.今天我就来总结一下动画相关的一些知识. Android系统提供了很多 ...

  9. Spring Boot 你所不知道的超级知识学习路线清单

    因而 Spring Boot 应用本质上就是一个基于 Spring 框架的应用,它是 Spring 对"约定优先于配置"理念的最佳实践产物,它能够帮助开发者更快速高效地构建基于 S ...

最新文章

  1. H5页面获取原生APP的登录状态
  2. charCodeAt()和charAt()的用法
  3. 竟然如此简单!C++实现完全随机加密、解析库,并附上完整代码分析
  4. 实战 Comet 应用程序开发
  5. xp系统更新的服务器失败是怎么回事啊,xp系统显示“服务器错误500”的两种解决方法...
  6. 阿里研究院安筱鹏:数字化,转型与原生并行
  7. winrar64位怎么破解
  8. Q116:PBRT-V3场景描述文件.pbrt格式解析
  9. 软件开发职业发展路径
  10. 测试模板:Showcase规范和流程
  11. darts.h注释 - 滴水穿石 - 歪酷博客 Ycool Blog
  12. 从放弃本专业到直播编程,这女孩都经历了些什么?
  13. 学生成绩等级用c语言,C语言实现学生成绩等级划分的方法实例
  14. killall 命令的用法
  15. html5播放器播放尺寸出界了,尺寸规范
  16. CSS水平居中与垂直居中
  17. 在开课吧的Python学习
  18. 官网下载Sublime如何汉化成中文
  19. 如何搭建一个http-server本地服务
  20. 迈赫机器人怎么样_迈赫机器人自动化股份有限公司怎么样

热门文章

  1. Mahout学习路线图
  2. MIT自然语言处理第五讲:最大熵和对数线性模型
  3. 编程面试的10大算法概念汇总
  4. 《分布式操作系统》部分知识点整理
  5. GraphQL 学习
  6. 在react-router中进行代码拆分
  7. 企业关系网络分析,大数据时代淘金利器
  8. 微软部分服务已迁移至中国本地服务器
  9. Glib实例学习(6)双端队列
  10. zabbix企业应用之监控mysql 5.6版本