1.什么是Docker?
Docker是一个基于Go语言开发的开源的应用容器引擎,开发人员可以将自己的应用以及相关依赖进行打包到一个可移植的镜像文件中,然后发布到服务器上。
2.Docker解决了什么问题?
2.1 运行环境不一致
Docker技术主要解决了开发环境不一致导致的一系列程序无法正常运行的问题。比如开发人在在自己的环境下测试打包部署都OK,但是交付运维部署上线的时候就出现了一系列的问题。开发人员说自己这里一切正常,运维人员说是开发人员代码有问题等等。
使用Docker可以将开发人员的应用代码以及开发环境配置一整套打包到一个容器中然后移植到Linux系统,这样一来就解决了“在我的机器上可以运行”的问题。
2.2 公用服务器中用户之间相互影响
Docker具有隔离性,在一个公用Linux系统中,假如某个程序非常消耗系统资源,那么这个程序就很容易影响到其他程序的正常运行。所以后来出现了虚拟机技术,每个虚拟机之间互相隔离,不同用户之间不相往来。但是相对于虚拟机
这种重量级的虚拟化方案,Docker拥有虚拟化轻量级、性能消耗低等优势。
2.3 服务器上重复安装环境
现在很多的java应用会使用分布式集群部署,集群意味着多台服务器,为了应用的正常运行,我们可能需要每个服务器上的运行环境都一样,这样一来,每多一个服务器我们就需要安装一次运行环境,如果机器少无所谓,那如果是几十台呢?
Docker可以很轻松地解决这样地重复操作问题,软件带着环境一起安装,省时省力。
3.Docker理念
Build,Ship and Run Any App,Anywhere
是Docker的目标理念,也就是随时随地构建、安装、运行在任何地点
。
4. Docker的三大要素?
Docker的三大要素:
要素 | 描述 |
---|---|
镜像 | Docker镜像(Image)就是一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建很多容器。 |
容器 | 可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。一个容器运行一种服务。 |
仓库 | Docker Hub,类似于GitHub一样,Docker Hub是镜像文件的中央仓库,开发人员将本地的运行环境打包为镜像文件上传到Docker Hub上,然后运维从这上面下载镜像文件运行,无缝对接。 |
例如Linux系统中,我们在一台机器上安装了Redis、Mysql
,如果项目是集群部署,则另外的机器上也需要安装这些软件。如果是传统的安装方式那就比较麻烦了,还需要修改一些配置文件。使用Docker技术之后,我们将Redis
的运行环境打包为一个镜像文件,在另外一台机器上运行镜像文件之后,就可以实现安装一台一摸一样的Redis
的运行环境。从而达到一次封装,到处运行
的效果。
5. 虚拟机与容器
虚拟机(virtual machine)是一种带环境安装的解决方案。它可以在一种操作系统中运行另一种操作系统,比如我们可以在windows系统中运行linux系统。应用程序对此毫无感知,对于windows系统来说,linux系统就是他的一个软件。不需要就删了,不会有什么影响。虚拟机完全模拟了另外一套整机系统:内存、硬盘、声卡……,占用了很多的资源,而且启动起来真的很慢~~
鉴于虚拟机技术的缺点,Linux发展出了另外一种虚拟化技术:Linux容器(Linux Containers,缩写为LXC)。
Linux容器是将操作系统虚拟化,这与VM虚拟化一个完整的计算机有所不同。有了容器,就可以将软件所需要的所有资源打包到一个隔离的容器中。容器只需要软件工作所需的库资源和配置,什么打印机、什么声卡这些与软甲运行不搭边的东东通通不要……所以系统相对于虚拟机更加的轻量化并且保证了部署在任何环境中都可以运行。
Docker容器 | 虚拟机 | |
---|---|---|
操作系统 | 与宿主机共享OS | 宿主机OS上运行虚拟机OS |
存储大小 | 镜像小,便于存储与传输 | 镜像庞大(vmdk、vid等) |
运行性能 | 几乎无额外性能损失 | 操作系统额外的CPU、内存消耗 |
移植性 | 轻便、灵活,适应于Linux | 笨重,与虚拟技术耦合度高 |
硬件亲和性 | 面向软件开发者 | 面向硬件维护者 |
部署速度 | 快速、秒级 | 较慢,10s以上 |
6.容器技术优势?
使用容器来部署应用程序被称为容器化,容器因为具有以下特点而广受开发界的好评:
特性 | 描述 |
---|---|
灵活 | 即使最复杂的应用也可以容器化 |
可移植性 | 开发人员可以在本地构建,然后部署到云服务上并运行 |
轻量级 | 容器利用并共享主机内核,在系统资源方面比虚拟机更有效 |
松散耦合 | 容器高度自给自足,可以在不破坏其他容器的情况下更换或者升级 |
可扩展 | 可以在数据中心内增加并自动分发容器副本 |
安全 | 容器将积极地约束和隔离应用于流程,而无需用户方面的任何配置 |