Docker是一个开源的容器引擎,它轻巧,且易移植,“build once, configure once and run anywhere”。使用go语言开发,并遵从apache2.0协议。

一、 传统软件行业中存在的问题

  • 开发、生产、测试环境不一致,开发环境下可用的服务挪到生产上不可用。
  • 不同环境之间迁移成本太高,没有统一的软件部署封装标准及封装环境。
  • 对于分布式软件持续集成(测试、打包、发布、部署、管理)周期很长,难以自动化、工程化。
  • 面临瞬时用户流量增大的场景,很难实现分布式应用服务实例的快速部署。

二、集装箱与docker之间的关系

通常称docker为软件行业的集装箱技术,那么docker和集装箱有什么相似之处呢?

传统行业集装箱 软件行业Docker
装载实体货物 装载并运行应用服务
具有统一的规格,便于搬运 封装环境的统一性(JDK、环境变量都可以封装在一个docker镜像里面),可以遵从一定规则反复的、快速的自动化安装部署
环境隔离,每个公司的集装箱货物与其他的公司的货物不混在一起。 在linux中采用namespace技术进行资源隔离,cgroups技术进行资源限制。容器之间互不影响。
资源共享,一个运送集装箱的船舶,搭载多个集装箱 一台服务器可以启动多个docker容器,达到共享服务器资源的目的
具备完整的物流仓储系统 docker镜像仓库中的镜像,可以导出导入,上传下载

可以参考我的另一篇文章《【大话云原生】煮饺子与docker之间的关系》,我觉得这篇文章对于您理解docker将有非常大的帮助。

三、docker与虚拟机的区别

docker和虚拟机在某些应用场景下比较像,但是docker不是虚拟机。

docker是一种虚拟化容器技术,他和虚拟机最根本的区别是:docker容器和宿主机共用linux操作系统内核,不会在宿主机上再次安装操作系统docker容器运行状态下的本质是宿主机上的进程,通过namespace资源隔离,cgroups资源限制,使它看上去像是一个独立的虚拟机.

对比项 虚拟机 docker容器
启动速度 龟速(本质是启动操作系统) 秒速(本质是启动一个进程)
镜像大小 以Ubuntu为例,1G以上 Ubuntu:195M
应用部署集成 通常是手动安装 下载镜像+启动镜像(自动)
内存访问效率 慢,先访问虚拟地址 基本等同于宿主机
CPU损耗 虚拟操作系统造成的损耗较大 接近于0

四、docker的应用场景

  • docker镜像一旦构建,就已经一次性完成了应用自动打包、集成。docker镜像可以进行版本管理、复制、分享、修改,就像管理代码一样。
  • 通过统一的docker环境封装(比如镜像中封装了同一版本的JDK、同样的环境变量等等),保证应用服务运行环境的一致性。避免出现在测试环境上好用,挪到生产环境下运行失败的问题。
  • docker可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
  • 因为镜像可下载、可复用,docker容器可快速启动等特性,结合容器编排服务(k8s)可以实现大型分布式部署的弹性伸缩,快速扩展。

五、总结

如果初学者对于本节内容理解起来有困难,也不要气馁。其实docker的学习难度很低,随着学习的深入,上面的这些概念很容易理解的。

觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力!。更多精彩内容公众号:字母哥杂谈。字母哥博客:zimug.com

【docker专栏1】docker解决的实际问题及应用场景的更多相关文章

  1. FW docker使用问题总结,解决国内不能访问gcr.io的问题

    docker使用问题总结 解决国内不能访问gcr.io的问题 国内可以通过https://dashboard.daocloud.io来下载. 比如?gcr.io/google_containers/p ...

  2. 修改 docker image 安装目录 (解决加载大image时报错:"no space left on device")

    修改 docker image 安装目录 (解决加载大image时报错:"no space left on device" ) 基于Ubuntu16.04 docker版本: 17 ...

  3. service docker start后docker stop/waiting的解决方法

    在某次强行对机子断电后,再开机后发现docker没启动 运行service docker start显示docker start/running, process xxxx,之后不一会儿就停止了, 再 ...

  4. docker实战系列之docker 端口映射错误解决方法

    错误: Error response from daemon: Cannot start container web: iptables failed: iptables -t nat -A DOCK ...

  5. 【Docker】Windows下docker环境搭建及解决使用非官方终端时的连接问题

    背景 时常有容器方面的需求,经常构建调试导致测试环境有些混乱,所以想在本地构建一套环境,镜像调试稳定后再放到测试环境中. Windows Docker 安装 安装docker toolbox 博主的电 ...

  6. 启动docker报Failed to start Docker Application Container Engine.解决

    [root@docker ~]# systemctl status docker.service● docker.service - Docker Application Container Engi ...

  7. Docker安装、命令详情、层级架构、docker服务启动失败解决方法

    容器背景: 层级架构:  容器对比传统化虚拟机: 可以把docker理解成是一款自带软件(比如:nignx.tomcat.....)的镜像操作系统(首先是要下载镜像) 以下是Windows环境安装Do ...

  8. docker磁盘空间不足解决办法

    docker磁盘空间不足解决办法 导入docker镜像时,错误提示:磁盘空间不足. 1.查看docker镜像存放目录空间大小 du -hs /var/lib/docker/ 2.停止docker服务. ...

  9. 【docker专栏2】CentOS操作系统安装DockerCE

    目录 一.前置要求 二.更新软件源信息 三.安装 Docker-CE 四.卸载Docker CE 为大家介绍在CentOS操作系统中安装docker的过程,linux其他发行版本安装docker方法可 ...

随机推荐

  1. Java并发编程扩展(线程通信、线程池)

    之前我说过,实现多线程的方式有4种,但是之前的文章中,我只介绍了两种,那么下面这两种,可以了解了解,不懂没关系. 之前的文章-->Java并发编程之多线程 使用ExecutorService.C ...

  2. Java 8的18个常用日期处理

    Java 8的18个常用日期处理 一.简介 伴随 lambda表达式.streams 以及一系列小优化,Java 8 推出了全新的日期时间API. Java处理日期.日历和时间的不足之处:将 java ...

  3. zookeeper篇-watch命令

    点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. 每个路径节点都有一个watcher监控,当该节点数据改变时(CRUD), ...

  4. FreeRTOS --(15)信号量之概述

    转载自 https://blog.csdn.net/zhoutaopower/article/details/107359095 在裸机编程中这样使用过一个变量:用于标记某个事件是否发生,或者标志一下 ...

  5. 【ConcurrentHashMap】浅析ConcurrentHashMap的构造方法及put方法(JDK1.7)

    目录 引言 代码讲解 构造方法 put方法 ensureSegment Segment.put 引言 ConcurrentHashMap的数据结构如下. 和HashMap的最大区别在于多了一层Segm ...

  6. JVM探究

    1.JVM探究 请你谈谈你对JVM的理解?java8虚拟机和之前的变化更新? 什么是OOM,什么是栈溢出StackOverFlowError?怎么分析? JVM的常用调优参数有哪些? 内存快照如何抓取 ...

  7. sqlx操作MySQL实战及其ORM原理

    sqlx是Golang中的一个知名三方库,其为Go标准库database/sql提供了一组扩展支持.使用它可以方便的在数据行与Golang的结构体.映射和切片之间进行转换,从这个角度可以说它是一个OR ...

  8. MyCat 使用中问题记录

    MyCat问题记录: Unknown charsetIndex:255 异常消息: jvm 1 | 2022-04-27 14:09:13,337 [WARN ][$_NIOREACTOR-13-RW ...

  9. Python学习4(字典的内存分布)

    1.字典:是python数据类型之一,字典通过花括号来包含数据项,字典的每个元素由2个部分组成,键:值,字典是根据键来找对应的值. data = {"name": "Et ...

  10. Web安全学习笔记 SQL注入中

    Web安全学习笔记 SQL注入中 繁枝插云欣 --ICML8 权限提升 数据库检测 绕过技巧 一.权限提升 1. UDF提权 UDF User Defined Function,用户自定义函数 是My ...