Docker基本介绍

一.什么是Docker

   在docker的官方之什么是docker中提到了一句话:“当今各大组织或者团体的创新都源于软件(例如OA、ERP等),其实很多公司都是软件公司"。用户量的激增导致了并发、指数级增加的数据、应用的可靠性等问题,单体应用已经应对不了这些问题,于是诞生了分布式、集群、微服务、边缘计算等各种名词、架构风格和满足这种架构风格的各种框架,那我们接下来跟大家谈谈这些技术名词。

分布式:将一个复杂的应用按照模块进行拆分,每个拆分的模块做成一个应用,分开部署,分开运行,各个模块之间通过webservice、http rest、rpc的方式进行调用。但是分布式系统中面临着很多棘手的问题:1. 如果某一个应用crash掉了,会导致调用该模块的其他模块也无法正常工作;2. 因为网络抖动或者硬件的问题导致数据的一致性问题(即分布式事务问题);3. 运维和硬件成本的急剧上升。

集群:集群是指将某一个应用或者某个模块部署在多台机器上(这些机器上跑的代码是相同的),然后通过负载均衡的方式让每个应用都能处理请求,即使某一个应用宕掉了,其他的应用一样可以处理请求,集群是为了解决我们上面提到的分布式应用中的第一个问题,但是集群也面临着诸多的问题:1. 运维和硬件成本的急剧增加;2. 实现集群势必会引入第三方的插件,那么第三方插件如何去保障其稳定运行;

微服务:微服务只是一种架构风格,最早是由Martin Fowler(博客点击这里)提出,他对微服务的解释是:In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies(简而言之,微服务是一种架构的风格,将每一个单独的应用来作为一个服务套件,每一个服务套件运行在其独立的进程当中,使用轻量级的方式相互调用,通常采用HTTP的方式。这些个服务是要建立在业务能力和自动化独立部署的基础上的。这些服务间应该以一种去中心化的方式运行,而且这些服务可以使用不同的语言、不同的存储机制来实现)。我用自己的话来表达一下,所谓的微服务就是将一个可以独立部署、业务能力独立的应用,应用之间耦合度尽量降低(只能尽量降低,不可能实现绝对的解耦),尽可能的去中心化。微服务也同样的面临着诸多的问题:1. 分布式事务问题;2. 运维和硬件成本急剧上升。

边缘计算:首先跟大家说一下,为什么要在这里提到边缘计算呢?因为本文讲的是docker, docker中提到了边缘计算。所谓的边缘计算是指在接近数据源的地方进行数据的处理,而不是将数据集中到一起进行处理,边缘计算可以实现数据的实时分析,将有价值的数据过滤后丢给云端。下面给一张图方便大家的理解:

                                                                                         

我们在回到本节标题“什么是docker”,我们在介绍完上面这些名词后,会发现无论当今所流行的不论是分布式、集群还是微服务都面临着一个问题:运维和硬件成本的急剧上升。那么docker的出现就是为了解决这个问题:解决运维和硬件成本的问题。

  提到这里笔者结合自己的工作经历跟大家讲解一下我以前在某家公司是如何解决这个问题的,我们公司购买一台服务器,然后在服务器上虚拟出多个计算机,然后在虚拟的机器上部署我们的应用,所谓虚拟机是借助于一些软件虚拟出一台和我们的物理机一样的机器,也有CPU、内存、硬盘、光驱等。虽然我们可以在一台真实的物理机上虚拟出多台机器,但是每个机器上其实都是有一套完整的操作系统,那么多台虚拟机上就有多套操作系统,这些操作系统也是要消耗物理机的资源的,那么如何解决这个问题呢?这同样回到我们该节的主题“什么是docker”。

二. docker能解决什么问题

  其实这个问题,我们在第一节“什么是docker”这个章节已经给出了答案。在本节我们会给出系统的总结:

2.1 资源的复用

上节笔者说到我们公司在解决运维和机器成本问题的时候说到,通过传统的虚拟机的方式每一台虚拟机都有一套完整的操作系统,那么我们能不能就使用一个操作系统,每个隔离的进程只运行我们的应用和所依赖的第三方软件,docker恰恰可以解决这个问题。

2.2 一致的环境

我相信做过开发的朋友都有这样的经历,我们在本地开发一个应用,尤其是分布式应用,我们需要在本地安装多台虚拟机,在本地测试各种功能完好。接着修改各种参数后辛辛苦苦部署到测试机上后,测试的同事经过紧张、严谨的测试,一切都那么的prefect。当我们高高兴兴的修改完各种参数后部署到生产环境,我嘞个擦,各种问题都出现。开发人员经常挂在嘴边的几句话“昨天我跑着还是好好的呀”,“测试的时候还是好好的呀”,导致开发人员说这些话的原因是因为开发、测试、生产环境的不一致所导致的。docker也可以解决这个问题,docker的镜像提供了除内核以外完整运行环境,确保的环境的一致性。

2.3 启动速度更快

以往的虚拟机的方式启动的时候需要的时间会很长,因为要启动操作系统,可能需要几分钟甚至更长。但是docker启动只需要几秒、几毫秒。

2.4 应用的迁移

给朋友举个例子,以前你的应用部署在阿里云上,那么那天你的领导需要将应用签署到腾讯云上,使用docker的话,会变得非常的简单。

  

Docker系列之入门的更多相关文章

  1. Docker系列之入门篇

    Dcoker是什么? 概述 Docker 是世界领先的软件容器平台.开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题.运维人员利用 Docker 可以在隔离容器中并行运行 ...

  2. 8天入门docker系列 —— 第一天 docker出现前的困惑和简单介绍

    docker出来也有很多年了,但用到的公司其实并不是很多,docker对传统开发是一个革命性的,几乎颠覆了之前我们传统的开发方法和部署模式,而大多 公司保守起见或不到万不得已基本上不会去变更现有模式. ...

  3. 【转】Docker简介与入门

    转自:https://segmentfault.com/a/1190000000448808 Docker是个新生的事物,概念类似虚拟化.网上关于Docker入门的东西已经很多了.不过本文探讨了Doc ...

  4. Docker 容器基本操作[Docker 系列-2]

    ​Docker 入门及安装[Docker 系列-1] 镜像就像是一个安装程序,而容器则是程序运行时的一个状态. 查看容器 查看容器 启动 docker 后,使用 docker ps 命令可以查看当前正 ...

  5. Docker 容器高级操作[Docker 系列-3]

    关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. 上篇文章向读者介绍了一个 Nginx 的例子,对于 Nginx 这样一个容器而言,当它启动成功后,我们 ...

  6. Docker系列开篇之Virtual Machine VS Container(一)

    前言 本节开始我们正式进入Docker系列,网上关于Docker相关文章如数家珍,写博客至今,我也一直在朝着如何写出通俗易懂且不枯燥的文章这个目标前进,喃喃自语的同时也希望看到文章的童鞋能明白我在讲什 ...

  7. Docker系列之MySQL安装教程

    Docker系列之MySQL安装教程 有了前面的基础教程Docker系列之常用命令操作手册之后,本博客记录一篇mysql的安装教程 mysql镜像查询命令 docker search mysql 几个 ...

  8. .Net Core in Docker极简入门(下篇)

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 Docker-Compose 代码修改 yml file up & down 镜像仓库 最后 前言 上一篇[. ...

  9. .NET 4 并行(多核)编程系列之一入门介绍

    .NET 4 并行(多核)编程系列之一入门介绍 本系列文章将会对.NET 4中的并行编程技术(也称之为多核编程技术)以及应用作全面的介绍. 本篇文章的议题如下:  1. 并行编程和多线程编程的区别.  ...

随机推荐

  1. 洛谷 P1521 求逆序对

    题目描述 我们说(i,j)是a1,a2,…,aN的一个逆序对当且仅当i<j且ai>a j.例如2,4,1,3,5的逆序对有3个,分别为(1,3),(2,3),(2,4).现在已知N和K,求 ...

  2. php表单常用正则表达式

    <?php /** * @description: 正则表达式匹配 */ class Regex { /** * @手机号 */ public static function Phone($su ...

  3. bootstrap-table设置height后表头与内容无法对齐的问题

    bootstrap-table项目官网:https://github.com/wenzhixin/bootstrap-table bootstrap-table各版本下载:https://github ...

  4. N天学习一个Linux命令之mkdir

    前言 暂无 用途 用于新建目录 常用参数 1.设置目录权限-m, --mode=MODE 2.递归创建目录(父目录不存在时,也创建)-p, --parents 3.其它-v, --verbose pr ...

  5. HDU 5387 Clock (MUT#8 模拟)

    [题目链接]:pid=5387">click here~~ [题目大意]给定一个时间点.求时针和分针夹角,时针和秒针夹角,分针和秒针夹角 模拟题,注意细节 代码: #include&l ...

  6. Golang Template source code analysis(Parse)

    This blog was written at go 1.3.1 version. We know that we use template thought by followed way: fun ...

  7. 设置用root用户telnet到linux系统

    默认情况下,ROOT用户不能以telnet方式连接Linux操作系统,而且也是不安全的.但从技术上来讲,是可以实现的. #mv /etc/securetty /etc/securetty.bak 保存 ...

  8. android SearchView 样式修改

    try { Class<?> argClass=mSearchView.getClass(); //指定某个私有属性 Field mSearchHintIconField = argCla ...

  9. android按钮被点击文字颜色变化效果

    有的时候做应用需要点击按钮时文字颜色也跟着变,松开后又还原,目前发现两种解决方案:第一用图片,如果出现的地方比较多,那么图片的量就相当可观:第二,也就是本文讲到的.废话少说,先贴图片,再上代码. 正常 ...

  10. hdu4738Caocao's Bridges

    什么?有人要炸我的桥?!D飞他(心疼周瑜大都督) 这个就是求割边/桥了. #include<cstdio> #include<iostream> #include<cst ...