Docker介绍

一、虚拟化和容器

1.1 传统虚拟化

  • Linux平台:KVM、Xen、VMWare、VirtualBox等;
  • Windows平台:Hyper-V、VMWare、VirtualBox等;

虚拟化系统会虚拟出一套完整的硬件基础设施,包括CPU、内存、显卡、磁盘以及主板等,虚拟机之间相互隔离,如果多台物理主机。

每个虚拟机实例都需要运行客户端操作系统的完整副本以及其中包含的大量应用程序,产生的沉重负载将会影响其工作效率以及性能。

1.2 什么是容器

是一种轻量级的操作系统级虚拟化,让用户在一个资源隔离的进程中运行应用及其依赖。应用程序所必须的所有组件打包成一个镜像并可以复用。执行镜像时,它运行在一个隔离环境中,不会共享主机的内存、CPU以及磁盘,保证容器内的进程不能监控容器外的任何进程。

1.3 虚拟机和容器的区别

虚拟机包含了完整的操作系统,占用磁盘容量大,一般为几个GB,当安装软件多时,会占用几十、几百GB磁盘,启动比较慢,需要数分钟时间。(每个虚拟机都有操作系统,程序运行在操作系统中)

容器一般占用几MB磁盘空间,启动速度快,几秒即可。(容器不包含操作系统,程序运行在容器中)

1.4 容易的优缺点

1.4.1 容器的优点

迁移方便:将应用程序及其依赖的组件打包成镜像,发布到不同平台上运行。部署人员不在面对具体的应用系统,不用再关心如何为应用系统准备运行环境以及依赖主键,他们面对的就是镜像,把镜像部署好就可以。

敏捷度高:创建容器实例速度比创建虚拟机快很多,分钟级甚至秒级。

提高生产力:容器之间不存在依赖关系,可以独立升级,不用担心和其他服务同步问题。

版本控制:每个容器镜像都有版本控制,可以跟踪不同版本的容器,监控差异等。

运行环境可移植:容器封装了应用程序运行所必须的所有相关细节,移植更加灵活。如在Windows中开发、Linux中测试、运行等。

标准化:大多数容器基于开放标准。

安全:容器之间进程相互隔离,一个容器的升级不会影响其他容易。

1.4.2 容器的缺点

复杂性:大量容器的管理是一个具有挑战性任务。借助Kubernates、Mesos等工具。

原生Linux支持:大多数容器技术基于Linux的LXC技术,对原生Linux、Windows中运行容易略显笨拙。

不成熟:容器技术是新技术,需要适应。

1.5 容器的分类

1.5.1 操作系统容器

同一物理机中,容器共享宿主机内核,并提供相互隔离的用户空间。用户可以像在宿主机操作系统上一样,在容器中安装、配置以及运行应用程序。从程序角度看,这些容器犹如真正的计算机。

1.5.2 应用容器,如Docker、Rocket

应用程序的虚拟机化,应用容器旨在为单位进程进行打包和运行服务,而操作系统容易可以运行多个服务和进程。如Docker、Rocket

二、Docker介绍

2.1 什么是Docker

Docker就是一个开源的应用容器引擎,基于Go语言开发,遵从Apache2.0开源协议。

Docker提供了对容器镜像的打包封装功能,可以将程序及其依赖包放到一个轻量级、可移植的容器中,并发布到Linux、Windows系统中。

Docker提供沙箱机制,容器之间不会有任何接口。

Docker想一个集装箱,把程序及其组件包装起来,迁移是,只需要把这个集装箱搬过去即可,不必处理集装箱内部细节。

2.2 Docker架构

Docker采用C/S架构,客户端和服务端通过接口进行通信,服务端负责构建、运行和分发Docker镜像。

2.2.1 镜像

镜像就是容器的模板,只读。主要作用就是创建容器,一个镜像可以创建多个容器。

镜像的内容可以多种多样,可以包含一个完整的操作系统,系统里面还安装中间件等程序,也可以只包含应用程序及其依赖组件。

Docker对镜像提供了完善的管理,可以非常方便的创建或更新镜像,也可以从其他地方下载已经做好的镜像直接使用。

2.2.2 容器

镜像是Docker的静态,容器是Docker的动态部分。

容器是独立运行的一个或一组应用,是从镜像创建的运行实例。

容器可以被启动、创建及删除,容器之间相互隔离,可以把一个容器看成一个简易版的Linux环境,包括root权限、进程空间、用户空间和网络空间等以及运行在启动的应用程序。

2.2.3 仓库

仓库是集中存放镜像的地方,提供镜像文件的版本控制功能。

仓库分为公有仓库和私有仓库,当用户创建了自己的镜像后,就可以把镜像传到公有或者私有仓库中,供下次使用时下载直接用。

2.3 为什么用Docker

2.3.1 Docker应用场景

Docker提供了轻量级的虚拟化服务,每个Docker都可以运行一个独立的应用。

简化配置:Docker将程序代码、运行环境以及配置进行打包镜像,部署时,已该镜像为模块创建容器即可。从而将应用环境和底层环境解耦

实现开发环境和生产环境统一:让每个服务运行在单独的容器中,模拟生产环境的分布式部署。

应用隔离:当前服务器性能强大,可以同时运行多个应用系统,Docker可以轻松的解决应用系统间的隔离,互不影响。

云计算环境:通过创建Docker容器,快速灵活地为租户提供服务,解决云计算环境中的多租户需求。

快速部署:几分钟就可以快速部署各种应用系统。

2.3.2 Docker解决问题

简化部署过程:可以将应用及其依赖快速打包并发布。

节省开支:Docker与云计算结合,解决了硬件管理问题,也改变了虚拟方式,不必为了最求高性能而配置高硬件。

2.3.3 Docker应用成本

更加轻量化,减少部署的时间成本和人力成本;

标准化,可以跨平台使用;

秒级启动,节省启动时间;

相对于传统虚拟机动不动几个GB磁盘空间来说,Docker只需要MB级别。

发表回复