Docker介绍
Docker是基于Go语言实现的开源应用容器引擎,通过对应用组件的封装、分发、部署、运行等生命周期的管理,使的用户的应用及其运行环境能够做到“一次封装,到处运行”。
虚拟化技术
虚拟机:虚拟机是通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。使得应用程序,操作系统和硬件三者之间的逻辑保持不变。由于在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量,每个虚拟机都有独立的CMOS、硬盘和操作系统,虚拟机存在资源占用多、冗余步骤多、启动慢等缺点。
Linux容器:与虚拟机不同,Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离,形成一个“容器”。不需要捆绑一整套操作系统,只需要软件工作所需要的库资源和设置打包放在容器中,这意味着从开发到测试再到生产的整个过程中,Linux 容器都具有可移植性和一致性。容器内的应用进程直接运行与宿主的内核,容器自己没有内核,而且没有进行硬件虚拟,系统因此而变得高效轻量并保证部署在任何环境种的软件都始终如一运行。而我们所讲的Docker就是基于Linux容器技术发展而来的。
为什么需要容器技术
容器可以确保您的应用拥有必需的库、依赖项和文件,让您可以在生产中自如地迁移这些应用,无需担心会出现任何负面影响。实际上,您可以将容器镜像中的内容,视为 Linux 发行版的一个安装实例,因为其中完整包含 RPM 软件包、配置文件等内容。但是,安装容器镜像发行版,要比安装新的操作系统副本容易得多。这样可以避免危机,做到皆大欢喜。
生产中为什么使用Docker容器
可以实现一次构建、到处运行,更快速的应用交付和部署,更便捷的升级和扩缩容,更简单的系统运维,更高效的计算机资源利用。
在Docker中重要的概念
镜像:Docker 镜像(image)就是一个只读的模板,镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
容器:Docker 利用容器(Container)独立运行的一个或一组应用,容器是用镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
仓库:仓库(Repository)是集中存放镜像文件的场所。仓库(Repository)和仓库注册服务器(Registry)是有区别的,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。仓库分为公开仓库(Public)和私有仓库(Private)两种形式,最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云等。
Docker怎么工作的?
Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器,是一个运行时环境,就是我们前面说到的集装箱。容器,是一个运行时环境,就是我们前面说到的集装箱。
Docker镜像是什么?
首先我们要了解什么是UnionFS(联合文件系统),UnionFS是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。
Union 文件系统是 Docker 镜像的基础,镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
为什Docker镜像采用分层的结构?
最大的一个好处就是共享资源。比如:有多个镜像都从相同的 base 镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。
小结
Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎 image镜像文件。只有通过这个镜像文件才能生成 Docker 容器。image 文件可以看作是容器的模板,同一个 image 文件,可以生成多个同时运行的容器实例。