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出现前的困惑和简单介绍的更多相关文章

  1. docker系列四之docker镜像与容器的常用命令

    docker镜像与容器的常用命令 一.概述   docker的镜像于容器是docker中两个至关重要的概念,首先给各位读者解释一下笔者对于这两个概念的理解.镜像,我们从字面意思上看,镜子里成像,我们人 ...

  2. Docker学习第一天(Docker入门&&Docker镜像管理)

    简介 今天小区的超市买零食老板给我说再过几天可能就卖完了我有点诧异,老板又说厂家不生产了emmm 今天总算开始docker了! 1.Docker? 1.什么是Docker Docker 是一个开源的应 ...

  3. Docker系列(七):Docker图形化管理和监控

    Docker管理工具之官方三剑客 Docker Machine是什么鬼 从前 现在 你需要登录主机,按照主机及操作系统特有的安装以及配置步骤安装Docker,使其 能运行Docker容器. Docke ...

  4. Docker系列二:Docker的基本结构

    Docker的基本结构 Docker 的三大基础组件 Docker有三个重要的概念:仓库 , 镜像 和 容器 ,它们是Docker的三大基出组件 Docker的组织结构 Docker处于操作系统和虚拟 ...

  5. Docker系列一:Docker基本概念及指令介绍

    1. Docker是什么? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用 ...

  6. 【Docker】第一篇 Docker的初始化安装部署

    一.Docker基础 Dacker倡导的理念:一个容器一个进程 Docker的版本了解: Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人 ...

  7. Docker系列一:Docker的介绍和安装

    Docker介绍 Docker是指容器化技术,用于支持创建和实验Linux Container.借助Docker,你可以将容器当做重量轻.模块化的虚拟机来使用,同时,你还将获得高度的灵活性,从而实现对 ...

  8. Docker系列(五):Docker网络机制(上)

    Linux路由机制打通网络 路由机制是效率最好的 docker128上修改Docker0的网络地址,与docker130不冲突 vi /usr/lib/systemd/system/docker.se ...

  9. Docker系列(三):Docker自定义容器镜像

    将容器编程镜像: docker commit [repo:tag] 网上有这句话:当我们在制作自己的镜像的时候,会在container中安装一些工具.修改配置,如果不做commit保存 起来,那么co ...

随机推荐

  1. 解决150%DPI下Photoshop不能显示成合适大小的问题

    Adobe官方这里一直不给力,只能靠自己动手了. 和解决CHM高分屏显示的步骤差不多: Ctril+R,输入regedit编辑注册表. 进入到 HKEY_LOCAL_MACHINE > SOFT ...

  2. HiJson(Json格式化工具)64位中文版下载 v2.1.2

    链接:https://pan.baidu.com/s/15gMvig15iUjpqSX7nUZ-5Q 密码:8086

  3. 第二次作业 单例模式的SessionFactory

    一.基础Hibernate环境搭建(参见http://www.cnblogs.com/sangewuxie/p/9004968.html) 二.实体类User及User.hbm.xml配置 1.Use ...

  4. Diffie-Hellman密钥协商算法

    一.概述 Diffie-Hellman密钥协商算法主要解决秘钥配送问题,本身并非用来加密用的:该算法其背后有对应数学理论做支撑,简单来讲就是构造一个复杂的计算难题,使得对该问题的求解在现实的时间内无法 ...

  5. 微信二维码支付-模式一(PC端,解决中文乱码问题)

    近期公司调完银联,调支付宝,调完支付宝调微信.说实话微信的帮助文档确实是烂,而且有没有技术支持,害的我头发都掉了一桌.不说废话了,看代码. 首先登陆微信的公众平台(微信的服务号不是订阅号),然后选择微 ...

  6. 3GPP 测试 /etc/udev/ruse.d/50文件 /lib/udev/ruse.d/55* 网络配置

    3GPP是个标准化协议组织,其工作目标是制定协议实现由2G网络到3G网络的平滑过渡,保证未来技术的后向兼容性,支持轻松建网及系统间的漫游和兼容性. 3GPP协议的制订主要是以GSM核心网为基础. 测试 ...

  7. 【转】浏览器输入URL后发生了什么

    转自:http://www.cnblogs.com/webdeve/p/7865520.html本文摘要: 输入网址 当我们在浏览器输入网址并回车后,一切从这里开始. 一.DNS域名解析 我们在浏览器 ...

  8. JavaScript prototype详解

    用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属性,可以为其添加函数供实例访问,其它的就不清楚了, ...

  9. 单点登录 Ucenter 分析

    原文:http://blog.csdn.net/ebw123/article/details/9417231 首先我们先来了解下 Ucenter登录步骤 1.用户登录discuz,通过logging. ...

  10. 解决jQuery的$符号的冲突问题

    强大的jQuery框架在设计的时候不仅考虑到自己的符号定义问题,还想到了与其他框架的和平共处问题,(给别人留条路也是写在给自己留路),设计者以博大的胸怀和包罗万象的设计理念赋予了jq顽强的生命力. 废 ...