Docker学习之路(一)
容器简介
管理程序虚拟化(hypervisor virtualization, HV)是通过中间虚拟运行于物理硬件之上。而容器是直接运行在操作系统内核之上用户空间。因此,容器虚拟化运行也成为“操作系统级虚拟化”,容器技术可以让多个独立的用户空间运行在同一台宿主机上。
容器只能运行与底层宿主机相同或类似的操作系统。例如,可以在 Ubuntu 服务器中运行 RedHat Enterprise Linux,但是不能运行 Windows。
在超大规模的多租户服务不熟、轻量级沙盒以及对安全要求不太高的隔离环境中,容器技术非常流行。比如“权限隔离监牢”(chroot jail),它建立一个隔离的目录环境来运行进程,如果权限隔离监牢正在运行的进程被入侵者攻破,入侵者便会发现自己身陷“身陷囹圄”,因为权限不足被困在容器创建的目录中,无非对宿主机进行进一步的破坏。
最新的容器引入了 Open、Solaris Zones、Linux 容器(如 lxc),容器不再仅仅是一个单纯的运行环境。在自己的权限范围内,容器更像是一个完整的宿主机。
Docker 得益于现代 Linux 内核特性,如控件组(control group)、命名空间(namespace)技术,容器和宿主机直接的隔离更加彻底,容器有独立的网络和存储栈,还拥有自己的资源管理能力,是的同一台宿主机中的多个容器可以友好地共存。
容器开销低,和传统的虚拟化以及半虚拟化(paravirtualization)相比,容器运行不需要模拟层(emulation layer)和管理层(hypervisor layer),二手使用操作系统的系统调用接口,着降低了运行单个容器所吸引的开销,也是的宿主机中可以运行更多的容器。
但容器本身比较复杂,不易安装,管理和自动化也很困难,而Docker就是为改变着一切而生的。
Docker简介
Docker是一个能把开发应用程序自动不熟到容器的开源引擎。由Docker 团队编写,基于Apache 2.0 开源协议发行。
在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
Docker在虚拟化的容器执行环境中增加了一个应用部署引擎,该引擎的目标是提供一个轻量、快速的环境,能够运行开发者的程序,并方便高效地将程序从开发者的笔记本部署到测试环境,然后再部署到生产环境。Docker机器简洁,它所需要的全部环境只是一台仅仅安装了兼容版本的Linux内核和二进制文件最小限的宿主机。而Docker的目标是提供一些这些东西:
提供简单、轻量的建模方式
Docker上手非常快,只要几分钟就能把自己的程序“Docker化”(Dockerize)。Docker依赖于“写时付至”(copy-on-write)
模型,是修改应用程序也非常迅速,可以说是“随心所至,代码即改”。
随后就可以创建容器来运行程序了。大多数Docker容器只需不到1秒钟即可启动。去除了管理程序的开销,性能较高,可以同时运行多个容器。
职责的逻辑分离
使用Docker,开发人员只需关系容器运行的程序,运维人员只需关系如何管理容器。加强了开发人员写代码的环境与程序部署的生产环境的一致性。
快速、高效的开发生命周期
缩短代码从开发、测试、部署、上下的周期,让应用可移植、易构建、易协作。
鼓励使用面向服务的架构
Docker推荐单个容器运行一个应用程序或进程,形成分布式的应用程序模型,这样,程序或服务都可以表示为一系列内部互联的容器,使分布式部署应用程序,扩展或调试程序标的简单。当然也可以在一个容器里运行多个进程的应用程序。
Docker 组件
镜像
Docker 镜像就是一个只读的模板。例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。
镜像是Docker生命周期中的“构建”部分,可以用来创建 Docker 容器。
Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,可以当做容器的“源代码”,它体积很小,便于分享、存储、更新。用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
镜像是基于联合(union)文件系统的一种层式的结构,由一系列指令一步步构建处理。例如:
- 添加一个文件
- 执行一个命令
- 打开一个端口
容器
Docker利用容器来运行应用。Docker可以帮你构建和部署容器,你只需要把自己的程序或服务打包到容器里即可。容器是基于镜像启动的,容器可以运行多个进程,所以可以认为,镜像是Docker生命周期的构建/打包阶段,容器是启动/执行阶段。
打个比方,容器是集装箱,镜像是货物。
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
总结起来,Docker容器就是:
- 一个镜像格式
- 一系列标准的操作
- 一个执行环境
注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
仓库(registry)
仓库用于保存用户构建的镜像,分为公有、私有。Docker公司运营的公共仓库叫Docker Hub,用户可以在Docker Hub注册账号,保存并分享自己的镜像。 国内的公开仓库有 Docker Pool等。用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用
push
命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上pull
下来就可以了。注:Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。