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 ...
随机推荐
- 为什么在JDBC要使用Class.forName();这句话
为什么在调用JDBC的时候,我们总要写这句话:Class.forName("驱动类");解释:在JDBC编程中一般有以下几个步骤:1>加载驱动,也就是Class.forNam ...
- 看完这篇Linux基本的操作就会了
前言 只有光头才能变强 这个学期开了Linux的课程了,授课的老师也是比较负责任的一位.总的来说也算是比较系统地学习了一下Linux了~~~ 本文章主要是总结Linux的基础操作以及一些简单的概念~如 ...
- Manjaro 安装后的配置
1. 将本地数据包与远程数据包同步 sudo pacman -Syy 默认manjaro是没有同步数据包的,也就是说,这个时候你执行pacman -S pack_name 会报数据包找不到的错误(wa ...
- python_pycharm下拉前置标示
在pycharm中是自动补全的变量的类别p:parameter 参数m:method方法c:class 类v:variable 变量f:function 函数 从定义的角度上看,我们知道函数(func ...
- 基于 HTML5 WebGL 的低碳工业园区监控系统
前言 低碳工业园区的建设与推广是我国推进工业低碳转型的重要举措,低碳工业园区能源与碳排放管控平台是低碳工业园区建设的关键环节.如何对园区内的企业的能源量进行采集.计量.碳排放核算,如何对能源消耗和碳排 ...
- 浅谈通信网络(三)——TCP/IP协议
简介 Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议.In ...
- 检测磁盘驱动的健康程度SMART
在linux中,工具包的名字为smartmontools 在CentOS中可以使用 yum install smartmontools来安装工具 首先通过smartctl -i /dev/sda 来检 ...
- 常用的TCP选项
MSS选项:通知最大可接收量.发送SYN的TCP一端使用本选项通告对端它的最大分节大小(maximum segment size)即MSS,也就是它在本连接的每个TCP分节中愿意接受的最大数据量.发送 ...
- 并发库应用之十一 & 阻塞队列的应用
队列包含固定长度的队列和不固定长度的队列,队列的规则就是:先进先出.固定长度的队列往里放数据,如果放满了还要放,阻塞式队列就会等待,直到有数据取出,空出位置后才继续放:非阻塞式队列不能等待就只能报错了 ...
- SOA专题---Dropwizard与Spring Boot比较
在这篇文章中我们将讨论的Java轻量级框架Dropwizard和Spring Boot的相似性和差异. 首先,这是一个选择自由和速度需要,无论你在Dropwizard和Spring Boot选择哪个, ...