Docker学习笔记(一)—— 概述

1. Docker是个什么玩意

说Docker是什么以前,先来看一看Docker为何会出现。咱们知道,在学习过程当中咱们须要频繁地安装配置一些软件,不论是在Windows下仍是在Linux,这些东西的配置过程都是很是费时费力的,稍有不慎就得删了重来,换一台机器,还得重来一次,更讨厌的是常常出现一些环境的兼容性问题(好比一些软件只兼容win7)。那么有没有这样一种解决方式:软件带环境安装,省去麻烦的安装配置过程,而且彻底不用考虑环境兼容问题,由于自带环境嘛。也就是说,安装的时候,把原始环境如出一辙地复制过来(上面说了,有一些软件不兼容win10,那我就在win7上装好,将软件和系统揉成一坨,拿到win10上使用)。java

<u>粗暴的总结成一句话:Docker就是这么个玩意儿——应用程序+运行环境所构成的容器</u>数据库

2. Docker的践行理念

经过上文,咱们大体知道了这是个什么东西,接下来咱们看看Docker的设计理念。服务器

Docker是基于Go语言实现的云开源项目。架构

Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是经过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(能够是一个WEB应用或数据库应用等等)及其运行环境可以作到“一次封装,处处运行”。运维

Linux 容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。开发人员利用 Docker 能够消除协做编码时“在个人机器上可正常工做”的问题。依托Docker技术, 咱们能够把应用程序和它所须要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运做。 只须要一次配置好环境,换到别的平台、环境上就能够一键部署好,极大地方便了应用部署运维 。微服务

<u>总的说来:你们知道java是一门跨平台语言,一次编译,处处“调试”;而Docker真的作到了,一次构建,处处运行!!</u>性能

3. 浅谈虚拟化技术

大佬说了一句话:学习

Docker是解决了运行环境和配置问题的软件容器,方便作持续集成并有助于总体发布的容器化虚拟技术。测试

这句话提到了虚拟化和容器化两个技术名词,接下来咱们来简单了解一下这两个玩意儿。ui

3.1 以前的虚拟化技术:

你们确定都接触过的虚拟化技术——虚拟机(例如:vmware)。虚拟机就是一种带环境安装的解决方案,它能够在一种操做系统里面运行另外一种操做系统,好比说在Windows里面运行Linux系统(Vmware虚拟出一套硬件平台,Linux就是运行在这套平台上的)。应用程序对此毫无感知,由于虚拟机看上去跟真实系统如出一辙,而对于底层系统来讲,虚拟机就是一个普通文件,不须要了就删掉,对其余部分毫无影响。这类虚拟机完美的运行了另外一套系统,可以使应用程序,操做系统和硬件三者之间的逻辑不变。 简单画个图感觉一下:

<center> ![](https://img2018.cnblogs.com/blog/1610225/201910/1610225-20191028195558286-1542996493.png) </center>

注意:APP是运行一层虚拟化出来的硬件平台上,这样的虚拟机具备如下缺点:

  • 资源占用多
  • 冗余步骤多
  • 启动慢

3.2 容器化虚拟化技术:

因为前面虚拟机存在这些缺点,Linux 发展出了另外一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。Linux 容器不是模拟一个完整的操做系统,而是对进程进行隔离。有了容器,就能够将软件运行所需的全部资源打包到一个隔离的容器中。容器与虚拟机不一样,不须要捆绑一整套操做系统,只须要软件工做所需的库资源和设置。系统所以而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

<center> ![](https://img2018.cnblogs.com/blog/1610225/201910/1610225-20191028195609416-1695463793.png) </center> 比较了 Docker 和传统虚拟化方式的不一样之处:

  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操做系统,在该系统上再运行所需应用进程;

  • 而容器内的应用进程直接运行于宿主的内核,容器内没有本身的内核,并且也没有进行硬件虚拟。所以容器要比传统虚拟机更为轻便。

  • 每一个容器之间互相隔离,每一个容器有本身的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

3.3 对比传统虚拟机总结

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 通常为 MB 通常为 GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 通常几十个

4.从DevOps的角度看Docker(选看)

4.1 更快的应用交付和部署:

传统的应用开发完成后,须要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化以后只须要交付少许容器镜像文件,在正式生产环境加载镜像并运行便可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。

4.2 更便捷的应用升级和扩缩容

随着微服务架构和Docker的发展,大量的应用会经过微服务方式架构,应用的开发构建将变成搭乐高积木同样,每一个Docker容器将变成一块“积木”,应用的升级将变得很是容易。当现有的容器不足以支撑业务处理时,可经过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。

4.3 更简单的系统运维

应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态彻底封装起来,不会由于底层基础架构和操做系统的不一致性给应用带来影响,产生新的BUG。当出现程序异常时,也能够经过测试环境的相同容器进行快速定位和修复。

4.4 更高效的利用系统资源

Docker是内核级虚拟化,直接运行在硬件平台上,它不像传统的虚拟化技术同样须要额外Hypervisor支持,因此在一台物理机上能够运行不少个容器实例,可大大提高物理服务器的CPU和内存的利率。

除此以外,还有更快速的启动、保证一致的运行环境、持续交付和部署、更轻松的迁移。。。。

总而言之:Docker天下第一 ~

既然Docker这么完美,那么咱们是否是对着它该来一发?下篇笔记记录了怎么撸它~

参考文章:

[1] 周阳.Docker基础篇之快速上手

[2] 李卫民.Docker文档

相关文章
相关标签/搜索