8天入门docker系列 —— 第一天 docker出现前的困惑和简单介绍
docker出来也有很多年了,但用到的公司其实并不是很多,docker对传统开发是一个革命性的,几乎颠覆了之前我们传统的开发方法和部署模式,而大多
公司保守起见或不到万不得已基本上不会去变更现有模式。
一:Docker出现之前我们都有哪些困惑
1. 应用依赖多,系统参数配置杂,部署起来麻烦
这句话怎么理解? 拿真实案例说,比如你可以看一下我之前写的一篇安装elasticsearch的博文:https://www.cnblogs.com/huangxincheng/p/9120028.html
《1》 因elasticsearch是java写的,所以你需要安装java运行环境,然后屁颠屁颠的去官网下载,接下来还要配置 java_home 变量等等。
《2》 es5.0之后的启动不能使用root账号,你不得不新建用户和用户组,烦。
《3》 然后你启动可能会遇到:os::commit_memory(0x00000000a9990000, 1449590784, 0) failed; error='Cannot allocate memory' 内存不足的情况。
《4》 然后就是文件句柄不足:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536] 的异常。
《5》 然后就是虚拟内存不足:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 的异常。
其实我的初衷就是想安装下es,结果来了这么多的坑,烦不胜烦,要解决上面这些问题,我只需要9行代码搞定,你信不?可以说秒级部署。
version: '3.0'
services:
elasticsearch:
image: elasticsearch:5.6.14
ports:
- 9200:9200
volumes:
- "/data/elastic/store:/usr/share/elasticsearch/data"
- "/data/elastic/logs:/usr/share/elasticsearch/logs"
2. 分布式部署麻烦
搭建es的时候,通常为了高可用需要部署到几台机器上,麻烦来了,你又需要在其他机器上做一遍同样的事情,烦不烦呢? 如果用了docker,你就可以
把上面9行代码稍微改一改就可以搞定。
3. 系统垃圾多
收集日志有了es,产生日志的程序用netcore,要跑core程序你还要安装core的runtime,久而久之服务器里面什么语言环境以及各种环境的各种版本都有,
往往给你带来了意想不到和防不胜防的bug,而docker的解决办法就是将每个应用程序和它所属的相关依赖都锁在一个叫做容器的盒子里面,这样就可以起到
相互隔离,从而不污染宿主机的系统环境。
4. 应用之间启动顺序搞蒙
如果你开发的网站有很多技术栈,在生产部署的时候肯定有一个启动的先后顺序,比如基础服务(redis,mongodb,mysql) 要先启动,然后才能启动
webapplication和kibana,如果你换了顺序带来了就是一堆报错,那有没有一种办法可以预先配置好各个应用的启动顺序的呢?在docker中你只需要用
depends_on命令就可以搞定启动顺序。

上面提到的四大问题,或许多多少少你都遇到过,而这些问题对docker来说都不是问题,所以学好docker还是有一定必要的。
二:Docker介绍
docker的官方网址是:https://www.docker.com/

上面这张图给你的感觉认知是不是下面这样:
1. docker 就是一条大鲸鱼,和货船有的一拼。
2. 大鲸鱼上有很多的集装箱,集装箱里装的自然就是货物了,感觉集装箱就是规整,隔离货物用的,上海有很多码头都有这种集装箱,不知道有多少人
亲眼见过哈,类比到docker上就是容器里面装了你的应用程序和相关依赖啦。
总体上来说,docker就是用类似集装箱的概念解决我之前提到的四个问题。
三:Docker架构图和核心概念

Docker 是一个典型的CS模式架构,和Docker deamon通信有Docker client命令行模式,也可以自己调用deamon提供的api方法和其进行通讯。
1. 镜像
这个里面保存了你的应用和需要的依赖环境,比如netcore的runtime和webapplication。
2. 容器
如果说镜像是class,那容器就是new class(),真正的将你的镜像跑起来了,前面也说到了它是一个隔离的盒子,它其实并不关心盒子里面是什么,
以及盒子当前在哪个平台上。
3. hub
它是一个远程的存放镜像的平台,hub上有很多已制作好的镜像,比如redis,mongodb,我们只需要pull下来直接使用,或者自己制作镜像。

四:docker 和 虚拟机的区别
严格来说他们之间没有可比性,因为他们的初衷本身就是不一样的,虽然都用到了虚拟化技术,这就好比,开兰博基尼的人和开五菱宏光的人,
虽然都是烧汽油的,但开兰博基尼的帅哥是为了泡妹子,耍酷,凸显身份地位的,而开五菱宏光的小哥是为了竟可能多的拖货养家糊口,顺带也
能多拖点人,所以两者初衷不一样,没有可比性。 docker就是为了在云计算时代解决优化和快速部署的问题,而虚拟机是为了虚拟出一个物理机
来尽可能的合理使用CPU,内存,磁盘等其他用途。
这篇就和大家简单的胡侃一下,后面我准备用一个core的小案例贯穿于docker系列的整个流程。
8天入门docker系列 —— 第一天 docker出现前的困惑和简单介绍的更多相关文章
- docker系列四之docker镜像与容器的常用命令
docker镜像与容器的常用命令 一.概述 docker的镜像于容器是docker中两个至关重要的概念,首先给各位读者解释一下笔者对于这两个概念的理解.镜像,我们从字面意思上看,镜子里成像,我们人 ...
- Docker学习第一天(Docker入门&&Docker镜像管理)
简介 今天小区的超市买零食老板给我说再过几天可能就卖完了我有点诧异,老板又说厂家不生产了emmm 今天总算开始docker了! 1.Docker? 1.什么是Docker Docker 是一个开源的应 ...
- Docker系列(七):Docker图形化管理和监控
Docker管理工具之官方三剑客 Docker Machine是什么鬼 从前 现在 你需要登录主机,按照主机及操作系统特有的安装以及配置步骤安装Docker,使其 能运行Docker容器. Docke ...
- Docker系列二:Docker的基本结构
Docker的基本结构 Docker 的三大基础组件 Docker有三个重要的概念:仓库 , 镜像 和 容器 ,它们是Docker的三大基出组件 Docker的组织结构 Docker处于操作系统和虚拟 ...
- Docker系列一:Docker基本概念及指令介绍
1. Docker是什么? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用 ...
- 【Docker】第一篇 Docker的初始化安装部署
一.Docker基础 Dacker倡导的理念:一个容器一个进程 Docker的版本了解: Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人 ...
- Docker系列一:Docker的介绍和安装
Docker介绍 Docker是指容器化技术,用于支持创建和实验Linux Container.借助Docker,你可以将容器当做重量轻.模块化的虚拟机来使用,同时,你还将获得高度的灵活性,从而实现对 ...
- Docker系列(五):Docker网络机制(上)
Linux路由机制打通网络 路由机制是效率最好的 docker128上修改Docker0的网络地址,与docker130不冲突 vi /usr/lib/systemd/system/docker.se ...
- Docker系列(三):Docker自定义容器镜像
将容器编程镜像: docker commit [repo:tag] 网上有这句话:当我们在制作自己的镜像的时候,会在container中安装一些工具.修改配置,如果不做commit保存 起来,那么co ...
随机推荐
- SpringCloud实战-Hystrix请求熔断与服务降级
我们知道大量请求会阻塞在Tomcat服务器上,影响其它整个服务.在复杂的分布式架构的应用程序有很多的依赖,都会不可避免地在某些时候失败.高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险 ...
- 适合Python 新手的5大练手项目,你练了么?
接下来就给大家介绍几种适合新手的练手项目. 0.算法系列-排序与查找 Python写swap很方便,就一句话(a, b = b, a),于是写基于比较的排序能短小精悍.刚上手一门新语言练算法最合适不过 ...
- vector的内存分配问题
vector的内存增长问题,其实无非是vector中size()和capacity()问题.vector的一个缺点就是它的内存分配是按照2的倍数分配内存的.当当前容量对插入元素不够时,分配一块新的内存 ...
- PHP 的 uniqid 函数产生的 id 真的是唯一的么?
PHP 的 uniqid 函数产生的 id 真的是唯一的么? 最近使用到了 uniqid,就产生了疑问?uniqid 生成的 id 由什么组成?真的是唯一的么?什么情况下会产生冲突? 从文档中看到 u ...
- 利用pytesser识别图形验证码
简单识别 1.一般思路 验证码识别的一般思路为: 图片降噪 图片切割 图像文本输出 1.1 图片降噪 所谓降噪就是把不需要的信息通通去除,比如背景,干扰线,干扰像素等等,只剩下需要识别的文字,让图片变 ...
- 测试APPEND INSERT是否产生UNDO信息的过程
D:\>sqlplus test/testSQL*Plus: Release 11.1.0.6.0 - Production on 星期三 06月 29 19:46:41 2016Copyrig ...
- CString 转化成 const char* 类型
写程序的时候经常会遇到无法将“CString”转换为“const char *”的错误,这里我找到了一个解决办法,与大家分享下: CString cs = _T("); ) * ; char ...
- BZOJ_2502_清理雪道_有源汇上下界最小流
BZOJ_2502_清理雪道_有源汇上下界最小流 Description 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道), ...
- BZOJ_4378_[POI2015]Logistyka_树状数组
BZOJ_4378_[POI2015]Logistyka_树状数组 Description 维护一个长度为n的序列,一开始都是0,支持以下两种操作: 1.U k a 将序列中第k个数修改为a. 2.Z ...
- BZOJ_4818_[Sdoi2017]序列计数_矩阵乘法
BZOJ_4818_[Sdoi2017]序列计数_矩阵乘法 Description Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数.Alice还希望 ...