Docker基本概念(LXC?镜像、容器、仓库是什么?容器和虚拟机又是什么?)(一)
学习Docker前,我们有必要了解下Docker的前生LXC(Linux Container)。
一、LXC介绍
LXC 可以提供轻量级的虚拟化,用来隔离进程和资源,和我们传统观念中的全虚拟化完全不一样,非常轻量级。LXC 可以将单个操作系统管理的资源划分到独立的组中,和传统的虚拟化技术相比,LXC 有如下一些优势:
和宿主机使用同一个内核,所以性能损耗小
不需要指令级模拟
不需要即时编译
容器可以在 CPU 核心的本地运行指令,不需要任何专门的解释机制
避免了虚拟化和系统调用中的复杂性
轻量级隔离,隔离的同时还可以和宿主机共享资源
LXC 有点像 chroot,提供了一个拥有自己进程和网络空间的虚拟环境,但是和虚拟机又不一样,因为 LXC 是一种操作系统层面上的资源的虚拟化。
chroot 简介
chroot(change root),在 Linux 系统中,系统默认的目录就都是以 / 也就是根目录开头的,chroot 的使用能够改变当前的系统根目录结构,通过改变当前系统的根目录,我们能够限制用户的权利,在新的根目录下并不能够访问旧系统根目录的结构个文件,也就建立了一个与原系统完全隔离的目录结构。
二、什么是 Docker
Docker 并不是 LXC 替代品,Docker 底层就是使用的 LXC 来实现,LXC 将 Linux 进程沙盒化,使得进程之间相互隔离,还可以共享宿主机的资源。在 LXC 的基础上,Docker 提供了一系列更加强大方便的功能,使得 Docker 成为了现在最火的虚拟化技术。
由于之前我们的后台在开发和运维阶段的环境是不一致的,这就导致了 Docker 的出现,因为我们通过 Docker 可以将程序运行的环境也一起打包到版本控制去了,这样就排除了因为环境不同造成的各种麻烦事情了,也不会出现在本地可以在线上却不行这样的窘境了。
Docker 是一个开源的应用容器引擎,基于 go 语言开发,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 服务器。容器是一个沙箱机制,相互之间不会有影响(类似于我们手机上运行的 app),并且容器开销是很低的。
用官方的话来说,Docker 受欢迎,是因为以下几个特点:
- 灵活性:即使是最复杂的应用也可以集装箱化
- 轻量级:容器利用并共享主机内核
- 可互换:您可以即时部署更新和升级
- 便携式:您可以在本地构建,部署到云,并在任何地方运行
- 可扩展:您可以增加并自动分发容器副本
- 可堆叠:您可以垂直和即时堆叠服务
三、Docker 几个重要概念
在了解了 Docker 是什么之后,我们需要先了解下 Docker 中最重要的3个概念:镜像、容器和仓库。
3.1 镜像
是一个只读模板,带有创建 Docker 容器的说明,一般来说的,镜像会基于另外的一些基础镜像并加上一些额外的自定义功能来组成。比如,你可以构建一个基于 Centos 的镜像,然后在这个基础镜像上面安装一个 Nginx 服务器,这样就可以构成一个属于我们自己的镜像了。
3.2 容器
是一个镜像的可运行的实例,可以使用 Docker REST API 或者 CLI 命令行工具来操作容器,容器的本质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
3.3 仓库
registry 是用来存储 Docker 镜像的仓库,Docker Hub 是 Docker 官方提供的一个公共仓库,而且 Docker 默认也是从 Docker Hub 上查找镜像的,当然你也可以很方便的运行一个私有仓库,当我们使用 docker pull 或者 docker run 命令时,就会从我们配置的 Docker 镜像仓库中去拉取镜像,使用 docker push 命令时,会将我们构建的镜像推送到对应的镜像仓库中,registry 可以理解为用于镜像的 github 这样的托管服务。
四、容器和虚拟机
上面我们说到了容器是在 Linux 上本机运行,并与其他容器共享主机的内核,它运行一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。
而虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源需要更多,但是非常安全,因为是独立的操作系统,独立的内核。
下一篇将介绍支持Docker的底层技术
(转发请注明出处:http://www.cnblogs.com/zhangyongli2011/ 如发现有错,请留言,谢谢)