docker是谁?他是干什么的,且听我慢慢道来

什么是docker?

把他想象成一个用了一种新颖方式实现的超轻量虚拟机,在大概效果上也是正确的。当然在实现的原理和应用上还是和VM有巨大差别的,并且专业的叫法是应用容器(Application Container)。

为啥要用docker

那么应用容器长什么样子呢,一个做好的应用容器长得就好像一个装好了一组特定应用的虚拟机一样。比如我现在想用MySQL那我就找个装好MySQL的容器,运行起来,那么我就可以使用 MySQL了。

那么我直接装个 MySQL不就好了,何必还需要这个容器这么诡异的概念?话是这么说,可是你要真装MySQL的话可能要再装一堆依赖库,根据你的操作系统平台和版本进行设置,有时候还要从源代码编译报出一堆莫名其妙的错误,可不是这么好装。而且万一你机器挂了,所有的东西都要重新来,可能还要把配置在重新弄一遍。但是有了容器,你就相当于有了一个可以运行起来的虚拟机,只要你能运行容器,MySQL的配置就全省了。而且一旦你想换台机器,直接把这个容器端起来,再放到另一个机器就好了。硬件,操作系统,运行环境什么的都不需要考虑了。

在公司中的一个很大的用途就是可以保证线下的开发环境、测试环境和线上的生产环境一致。很多朋友应带都经常碰到这样的事情,开发把东西做好了给测试去测,一般会给一坨代码和一个介绍上线步骤去上线。结果代码在测试机跑不起来,开发就跑来跑去看问题,一会儿啊这个配置文件忘了提交了,一会儿啊这个上线命令写错了。找到了一个 bug 提上去,开发一看,啊我怎么又忘了把这个命令写在上线单上了。类似的事情在上线的时候还会发生,变成啊你这个软件的版本和我机器上的不一样……

若果利用容器的话,那么开发直接在容器里开发,提测的时候把整个容器给测试,测好了把改动改在容器里再上线就好了。通过容器,整个开发、测试和生产环境可以保持高度的一致。

此外容器也和VM一样具有着一定的隔离性,各个容器之间的数据和内存空间相互隔离,可以保证一定的安全性。

docker在很大程度上可以解决的问题

  • 软件更新发布低效

  • 业务无法敏捷

  • 环境一致性,难于保证

  • 不同环境之间迁移成本太高

  • 软件开发商,交付实施周期长—-成本高

那为啥不用VM?

那么既然容器和 VM 这么类似为啥不直接用 VM 还要整出个容器这么个概念来呢?Docker 容器相对于 VM 有以下几个优点:

  • 启动速度快,容器通常在一秒内可以启动,而 VM 通常要更久

  • 资源利用率高,一台普通 PC 可以跑上千个容器,你跑上千个 VM 试试

  • 性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这一部分占据了额外的资源

为啥相似的功能在性能上会有如此巨大的差距呢,其实这和他们的设计的理念是相关的。 VM 的设计图如下:

VM 的 Hypervisor 需要实现对硬件的虚拟化,并且还要搭载自己的操作系统,自然在启动速度和资源利用率以及性能上有比较大的开销。而 Docker 的设计图是这样的:

Docker 几乎就没有什么虚拟化的东西,并且直接复用了 Host 主机的 OS,在 Docker Engine 层面实现了调度和隔离重量一下子就降低了好几个档次。 Docker 的容器利用了 lxc,管理利用了 namespaces 来做权限的控制和隔离,  cgroups 来进行资源的配置,并且还通过  aufs 来进一步提高文件系统的资源利用率。

其中的 aufs 是个很有意思的东西,是  UnionFS 的一种。他的思想和 git 有些类似,可以把对文件系统的改动当成一次 commit 一层层的叠加。这样的话多个容器之间就可以共享他们的文件系统层次,每个容器下面都是共享的文件系统层次,上面再是各自对文件系统改动的层次,这样的话极大的节省了对存储的需求,并且也能加速容器的启动。

对开发和运维人员来说,可能是梦寐以求的就是一次性创建和配置,可以在任意环境、任意时间让应用正常运行。而docker恰恰可以实现这一终极目标。具体来说,docker在开发和运维中的优势:

  1. 更快捷的交付和部署

  2. 更高效的利用资源

  3. 更轻松的迁移和扩展

  4. 更简单的管理

转载于:https://blog.51cto.com/xiaotaozi/1866630

docker-1 初识docker相关推荐

  1. Docker 学习应用篇之一: 初识Docker

    Docker 自从2013年以来就非常的火热,无论是从github上的代码活跃度,还是Redhat在RHE6.5中集成对Docker的支持,等等.第一次接触Docker,还是老师给我们介绍的. 1.初 ...

  2. 初识Docker:(5)Docker自定义镜像

    初识Docker:(5)Docker自定义镜像 镜像结构 Dockerfile语法 什么是Dockerfile 构建Java项目 案例1:基于ubuntu镜像构建一个新镜像,运行一个java项目 案例 ...

  3. 前端学习案例-初识docker

    我是歌谣 放弃很难 但是坚持一定很酷 微信关注小歌谣一起学习 最近因为工作需要就要进行docker的一些相关学习 这边就整理了一小部分的笔记 方便一起学习 本文源自个人学习笔记 docker笔记 do ...

  4. 第一章 初识Docker

    第一章 初识Docker 1.1 什么是Docker Docker开源项目 Docker是基于Go语言实现的云开源项目,诞生于2013年初,最初发起者是dotCloud公司.Docker自开源后受到广 ...

  5. 小白入门,初识Docker

    小白入门,初识Docker Docker是什么 Docker与虚拟化 Docker虚拟化的好处 核心概念 案例 镜像的操作 配置加速器 2.修改docker相关配置 3.重新加载配置 4.重启dock ...

  6. Docker初学1:初识Docker

    前言:本博客内容是对[狂神说Java]中的Docker教程学习过程中的记录与总结 Docker的历史 Docker公司 Docker 公司位于旧金山,由法裔美籍开发者和企业家 Solumon Hyke ...

  7. docker镜像启动后端口号是多少_初识Docker

    点击上方"TestOps" 订阅 本周TestOps免费试听课课程表 时间 主题 7.23(周二)14:00 Selenium环境搭建与原理 7.24(周三)20:00 Docke ...

  8. 第133天学习打卡(Docker 初识Docker Docker的基本组成 安装docker 阿里云镜像加速 Docker常用命令)

    Docker学习 Docker概述 官方地址:Empowering App Development for Developers | Docker Docker的思想来自于集装箱! 隔离:Docker ...

  9. 初识docker《部署docker容器虚拟化平台》

    目录 1.Docker 概述 1.1 Docker 介绍 1.2 Docker 容器技术和虚拟机对比 1.3 Docker 架构 1.4 Docker 特性 1.5 Docker 版本简单介绍 2.部 ...

  10. 3.10 docker---概念介绍,安装和初识docker,docker的一些基本命令,使用docker部署一个nginx,

    一.docker介绍 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...

最新文章

  1. CG游戏道具全流程制作视频教程 Artstation – Stylized Game Asset
  2. 【实习】京东搜索相关性算法部门
  3. Mysql5.7使用注意事项随笔
  4. Glib实例学习(5)平衡二叉树
  5. 双循环格局对话国际农民丰收节交易会 谋定农业贸易高质量
  6. OpenCASCADE:读STEP
  7. HDU1864(01背包)
  8. 数据分析初学者必备!10分钟搭建RFM客户价值模型,一学就会
  9. 关于Scrapy爬虫项目运行和调试的小技巧(上篇)
  10. cs6导入库闪退 flash_flash cs6源文件怎么修复,导入老跳出意外格式,我是用flash cs6做的。我还有一半没有导出 swf 呢?...
  11. 使用itextpdf将多个PDF文件合并为一个PDF文件
  12. 对偶式与反函数_对偶式和反函数什么关系,是不是都是一样,还是怎么回事啊,...
  13. 渗透测试-第一步 信息收集 【详细介绍】
  14. matlab取第一列元素的值,MATLAB中怎么从excel中读取第一列的数据?(2010版office)【】...
  15. 【Unity3D-Mirror多人坦克大战】子弹及其开火位置的生成、子弹开火逻辑(四)
  16. Storm学习笔记——安装配置
  17. mosquitto1.6.2 Error: A TLS error occurred.(解决)
  18. Acrel-3000电能管理系统保证企业生产人员的生命安全,提高生产人员的工作效率
  19. 《我是黑社会》--郭德纲相声
  20. Java(web)项目安全漏洞及解决方式【面试+工作】

热门文章

  1. centos安装最新版的docker-ce(二进制安装)
  2. 如何查看本机安装的python支持哪种.whl文件
  3. Java调用Lua脚本(热载实现)
  4. Lync2013 升级错误总结2 Lync2013 PC和手机客户端登录无法验证
  5. 测试JavaScript函数的性能
  6. strutr2运行流程
  7. (原)使用vectot的.end()报错:iterators incompatible
  8. SharePoint 2013 中代码创建列表查阅项字段
  9. 输出10000以内的第M到第N个素数(Eclipse gcc下)
  10. linux “命令行自动补全”功能用命令