Docker 理念
Docker是基于Go语言实现的云开源项目。
基本概念
容器:实例对象,是一个集装箱,可以把容器看作简易版的Linux环境;
镜像:只读的模板,用来创建容器。可以创建多个容器,例如mysql redis centOS 等;
仓库:集中存放镜像的。(阿里云与网易云有仓库镜像,可以加速)。
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。
Linux 容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在 Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作
一句话,解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布容器虚拟化技术。内核级虚拟化。
容器虚拟化技术
由于前面虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。
Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。
比较了 Docker 和传统虚拟化方式的不同之处:
*传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
*而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
* 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。
镜像(images)、容器(containers)、仓库
Docker镜像(image)就是一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建很多容器。
镜像 相当于 java中的类,容器相当于对象。
Docker利用容器(Container)独立运行一个或者一组应用。容器是用镜像创建的运行实例。
他可以被启动、开始、停止、删除、每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的linux 环境(包括root用户权限、京城空间、用户空间和网络空间等)和运行在其中的应用程序。
容器定义和镜像几乎一模一样,也是一堆层的统一视角。唯一区别在于容器的最上面那一层是可读可写的。
仓库是集中存放镜像文件的场所。仓库(repository)和仓库注册服务器(registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又存放着多个镜像。每个镜像有不同的标签(Tag)。
Docker本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好行程一个可交付的运行环境,这个打包好的运行环境就类似image镜像文件。 只有通过镜像文件才能生成Docker容器。 Image 文件可以看做是容器的模板。Docker根据image文件生成容器实例。同一个image文件,可以生成多个同时运行的容器实例。