zoukankan      html  css  js  c++  java
  • 【Docker】Docker概述

    docker是一个应用容器引擎项目,基于go语言开发,开源。官方文档也是非常详细,只不过是英文的,但是只要想看,肯定能克服。
    docker火爆至今,镜像仓库里的内容也非常丰富了,日常用的环境很多在里面可以直接找到。

    1. Docker为什么会出现

    先提几个场景:

    1. 运维帮你开发的项目部署到服务器上,告诉你有问题启动不起来。你在本地跑了一下发现没问题...
    2. 要上线的项目因为一些软件的版本的更新,导致不可用了...
    3. 有项目涉及到的环境内容非常多,各种中间件,各种配置,还要部署好多台服务器...

    这些问题其实总结起来就是跟环境有关。
    要避开各种因环境不同导致的问题,那么最好是在部署项目的时候,连同项目所需要的各种环境一起部署了最好。
    比如,项目中涉及到redis、mysql、jdk、es等环境,在部署jar包的时候把整个环境都带上。那么问题来了,怎么样能让项目带上环境一起呢?

    Docker就是来解决这个问题的!

    还是有些不清楚?再来打个比方。
    我们在手机按装个安卓应用,那么从这个应用诞生到被安装的过程大致是这样的:

    java开发 ——> apk ——> 发布到各大应用商店 ——> 用户A 下载apk安装即可使用
    

    站在用户的角度,我根本不关心这个app需要依赖哪些环境的问题,下载下来安装就完事儿。按照这个思路,在来看docker:

    java开发 ——> jar包 ——> 打包项目带上各种环境(成为一个镜像) ——> 镜像放到docker仓库里 ——> 运维童鞋下载镜像,直接运行。
    

    2. Docker的核心思想

    这个就是docker的logo,一条装满集装箱的鲸鱼,在鲸鱼背上,集装箱相互之间是隔离的,这也就是docker的核心思想了。
    比如之前有多个应用在同一台服务器上运行,可能会有软件的端口占用冲突,现在隔离后就可以独自运行了。另外,docker可以最大化的利用服务器的能力。

    3. Docker和传统虚拟化的区别

    在docker容器技术兴起之前,基本上是用虚拟机,比如VM。如果你想在window上装个linux系统进行一些练习,那么就可以在VM里安装linux系统。

    如图所示,我在win系统里运行linux系统,那我的win系统就是个宿主机(灰色区域)。蓝色部分就相当于是我在vm上安装的linux系统,从下到上,分别是内核、库、各种应用,在一台电脑上可以运行很多应用。

    但是虚拟机非常的笨重,要虚拟整个系统,软件硬件都有,一个虚拟机就相当于一台电脑,所以启动虚拟机占用的资源很大,启动速度也很慢。

    容器技术虽然也属于虚拟化技术,但是容器非常轻量化。比如linux容器,不再对模拟一个完整的操作系统,如果我只用到linux内核,那其他的东西就可以不要。
    将软件运行所需要的资源打包到一个容器中,并且是隔离的,相当于集装箱。

    如图所示:
    在容器内的应用进程是直接运行于宿主机的内核,容器内没有自己的内核,更没有进行硬件的虚拟。容器就不再使用一个公共的lib库了,每个容器都有一个自己的lib,
    只包含运行自己的APP所需要的。容器之间相互隔离,各自有着属于自己的文件系统,谁也不影响谁,启动速度也快到了秒级。

    4. Docker可以干嘛

    1. 让应用能够更快的交付和部署。
      之前部署环境要安装一堆东西,现在用docker,打包成镜像发布测试,一键运行。
    2. 更便捷的升级和扩容。
      使用docker之后,部署应用简单得像搭积木。比如项目打包镜像发布运行后,发现需要增加服务器提高服务性能,那么可以直接在新的服务器上直接下载运行镜像。
    3. 更简单的系统运维。
      容器化之后,可以让开发、测试环境高度一致。
    4. 更高效的计算机资源利用。
      docker是内核级别的虚拟化,可以在一个物理机上运行很多的容器实例。比如一个机子上我同时运行tomcat、es、kibana等等,更充分的利用系统资源。
    --不要用肉体的勤奋,去掩盖思考的懒惰--
  • 相关阅读:
    java学习--基础知识进阶第十四天--xml文件的概述与应用场景、xml文件的组成部分&如何编写xml、xml的两种解析方式的原理、Dom4J开源工具的使用
    java学习--基础知识进阶第十三天--笔记
    java学习--基础知识进阶第十三天--反射机制的概述和字节码对象的获取方式、反射操作构造方法、成员方法、成员属性、JavaBean的概述&BeanUtils的使用、自定义BeanUtils工具类
    java学习--基础知识进阶第十二天--笔记
    java学习--基础知识进阶第十二天--网络编程概述、UDP协议、TCP协议
    java学习--基础知识进阶第十一天--多线程概述、线程实现、多线程安全问题产生 & 解决方案
    杭电oj 1000
    建立消息映射和消息处理
    c程序设计语言 导言
    句柄数不停增加
  • 原文地址:https://www.cnblogs.com/pingguo-softwaretesting/p/14749369.html
Copyright © 2011-2022 走看看