开新坑了,开始挖坑Docker了,兄弟们。为什么需要Docker呢?Docker是什么?这里开始揭开Docker的面纱。

一、为什么需要Docker

可能每个开发人员都有一种困扰,软件开发完之后部署项目,明明测试环境部署了一点问题没有,怎么一到正式环境就出错呢?

这种情况有时候问题可能就出在环境配置上,操作系统版本是否一致,软件运行依赖库版本是否一致,操作系统设置是否一致......等等都有可能造成部署失败。

那么有没有一种办法可以保持所有机器的环境配置都一致呢,这样同时也方便我们迁移系统,不然每次扩容部署就要重新配置一台机器的环境,这种繁琐的工作能不能配置好一次,之后就复用呢?

答案是有,这时候就提出了一种方案,虚拟机(大家应该都知道是啥吧,就不啰嗦了)。

虚拟机对于操作系统来说只是一个文件,如果需要多个只需要把虚拟机导出为ova文件,安装后即和导出的系统环境一摸一样,这样就解决了环境配置繁琐的问题,这样可以说 99.9999% 项目跑不起来不可能是环境的问题了。

那么你可能会问,既然虚拟机都解决了环境配置繁琐的问题,那为啥 Docker 还过来凑热闹呢?

这就涉及到虚拟机的不足了,虚拟机占用资源问题。

  • 虚拟机是一个完整的操作系统,会占用磁盘的资源,一个系统需要多少磁盘那么就会占用多少磁盘资源。也就意味着假如有 10 台虚拟机,那么就占用了 10 个操作系统的磁盘空间。
  • 哪怕虚拟机真实使用的内存 1MB,虚拟机仍然需要几百 MB 的内存。同理,几个虚拟机则造成了几个操作系统内存的资源浪费。
  • 启动慢,启动时间基本和操作系统启动时间一致。

说到这里,你肯定明白了,Docker就可以解决上述的不足。

Docker 是怎么解决虚拟机带来的不足呢?

其实也不能说是 Docker 解决的,应该说 Linux 发展了另一种虚拟化技术:Linux容器。有兴趣的小伙伴可以去查查资料看看 Linux容器技术发展简史

Linux 容器不虚拟化出整个操作系统,简单来说就是共享操作系统内核 + 必要运行环境,而主角 Docker 只是 Linux容器 思想的实践产品之一。

  • 容器虚拟化的不是一个完整的操作系统,所以当然磁盘资源占用少很多。
  • 容器复用了 Linux 内核,作为一个进程运行,所以占用的内存自然也少很多。
  • 容器作为系统中的一个进程,所以启动速度当然快很多,基本上是秒级。

对比 虚拟机 和 容器

特性 虚拟机 容器
硬盘使用 一般为GB 一般为MB
启动 秒级 分钟级
系统支持量 单机支持上千个容器 一般几十个

二、Docker是什么

1. Docker简介

Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余 项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。

Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。Docker 的基础是 Linux 容器(LXC)等技术。

2. Docker的三大基础概念

Docker镜像(Image)

Docker 镜像就是一个只读的模板,镜像可以用来创建 Docker 容器。

例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或 用户需要的其它应用程序。

Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接 从其他人那里下载一个已经做好的镜像来直接使用。

Docker容器(Container)

Docker 利用容器来运行应用。 容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

可以把容器看做是一个简易版的 Linux 环境(包括root 用户权限、进程空间、用户空 间和网络空间等)和运行在其中的应用程序。

Docker仓库(Registrty)

仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为 一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

最大的公开仓库是 DockerHub,存放了数量庞大的镜像供用户下载。 当然,用户也可以在本地网络内创建一个私有仓库。

当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这 样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

3. 镜像、容器、仓库关系

4. 镜像、容器、仓库的运行关系

都读到这里了,来个 点赞、评论、关注、收藏 吧!

文章作者:IT王小二

首发地址:https://www.itwxe.com/posts/53aa5457/

版权声明:文章内容遵循 署名-非商业性使用-禁止演绎 4.0 国际 进行许可,除特殊声明外皆为原创,转载请在文章页面明显位置给出作者与原文链接。

揭开Docker的面纱的更多相关文章

  1. Android开源框架Afinal第一篇——揭开圣女的面纱

    Android开源框架Afinal第一篇——揭开圣女的面纱 分类: Android开源框架哪点事2013-09-02 14:25 260人阅读 评论(0) 收藏 举报 Afinal 这是Afinal在 ...

  2. 【工作感悟】——揭开“PM”的面纱

    [前言] 上次跟大家分享了面试的故事,小编觉得效果还不错,因此小编决定把工作感悟系列写下去,不过时间就不好说了.希望小伙伴们在评论列表中发表自己的看法和观点,积极参与啦~~ [背景] 初来Y公司,作为 ...

  3. 10w+QPS 的 Redis 真的只是因为单线程和内存?360° 深入底层设计为你揭开 Redis 神秘面纱!

    原文链接:10w+QPS 的 Redis 真的只是因为单线程和内存?360° 深入底层设计为你揭开 Redis 神秘面纱! 你以为 Redis 这么快仅仅因为单线程和基于内存? 那么你想得太少了,我个 ...

  4. 揭开Docker的神秘面纱

    Docker 相信在飞速发展的今天已经越来越火,它已成为如今各大企业都争相使用的技术.那么Docker 是什么呢?为什么这么多人开始使用Docker? 本节课我们将一起解开Docker的神秘面纱. 本 ...

  5. springmvc+hibernate入门-揭开神秘的面纱

            Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这 ...

  6. 揭开redis神秘面纱

    一直听别人说NoSQL,以前一直不明白,这到底是什么东西,今天听过我们涛哥的讲解,略有小感,特此小记. NoSQL(NoSQL = Not Only SQL),意为反SQL运动,是一项全新的数据库革命 ...

  7. 揭开Faiss的面纱 探究Facebook相似性搜索工具的原理

    https://www.leiphone.com/news/201703/84gDbSOgJcxiC3DW.html 本月初雷锋网报道,Facebook 开源了 AI 相似性搜索工具 Faiss.而在 ...

  8. 揭开jQuery的面纱-jQuery选择器简介(二)

    选择器并没有一个固定的定义,在某种程度上说,jQuery的选择器和样式表中的选择器十分相似.选择器具有如下特点: 1.简化代码的编写 2.隐式迭代 3.无须判断对象是否存在 “$”是选择器不可缺少的部 ...

  9. 揭开jQuery的面纱

    简单地说,jQuery是一个优秀的JavaScript类库,也就是使用JavaScript面向对象的性质编写的一个JavaScript类的集合.jQuery究竟能为我们提供哪些功能呢?简单地说可以从七 ...

随机推荐

  1. sed -i '14s/yes/no/' tftp

    修改tftp 内容 # cd /etc/xinetd.d/[root@localhost xinetd.d]# cp tftp tftp.bak[root@localhost xinetd.d]# c ...

  2. 043.Python线程基本介绍

    一 线程的基本概念 1.1 进程和线程 进程是资源分配的最小单位 线程是计算机中调度的最小单位 进程池: 开启过多的进程并不一走提高你的效率, 如果cp负载任务过多,平均单个任务执行的效率就会低,反而 ...

  3. fprintf函数

    描述 C 库函数 int fprintf(FILE *stream, const char *format, ...) 发送格式化输出到流 stream 中. 声明 下面是 fprintf() 函数的 ...

  4. 程序"三高"解决方案

    0. 程序三高 1. 缓存 2. 预处理和延后处理 3. 池化 3.1 内存池 3.2 线程池 3.3 连接池 4. 异步(回调) 5. 消息队列 5.1 服务解耦 5.2 异步处理 5.3 流量削峰 ...

  5. 排查利器:Tcpdump抓包 & Wireshark解析

    在工作这一块,免不了和其他开发人员打交道.比如,和其他部门 or 公司联调,甚至是和自己部门的人联调的时候.这时候,对接问题就很容易暴露出来,特别是Tcp/Udp会话的时候,很容易就会呈现出公说公有理 ...

  6. ubuntu设置允许root用户登录

    一.允许ssh登录root用户(命令行) 1.修改root 密码,sudo passwd root 2.修改ssh配置, sudo vim /etc/ssh/shd_config,修改文件中的Perm ...

  7. Python+Selenium - 定位策略

    一个元素定位可能会在多个地方用到,用loc变量接收元素的定位方式和相对路径.使用时再拆包(*loc) loc = (定位方式,'定位方式对应的元素路径')    =>元素定位方式及路径 driv ...

  8. 视频教学动作修饰语:CVPR2020论文解析

    视频教学动作修饰语:CVPR2020论文解析 Action Modifiers: Learning from Adverbs in Instructional Videos 论文链接:https://a ...

  9. PyTorch神经网络集成技术

    PyTorch神经网络集成技术 create_python_neuropod 将任意python代码打包为一个neurood包. create_python_neuropod( neuropod_pa ...

  10. AI芯片加速图像识别

    AI芯片加速图像识别 AI chip accelerates image recognition 法国研究机构CEA-Leti和LIST在2020年VLSI研讨会上展示了一种概念验证芯片,该芯片集成了 ...