前言
Docker 代表的容器技术是近两年的大热技术,和人工智能、区块链等热点不同,容器技术的门槛并不高,每一个开发、测试、运维人员都能在日常工作中掌握和使用,是当今 IT 从业人员的必备技能之一。
本文主要讲解 Docker 技术栈及其应用实践,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用,希望本文对大家学习 Docker 技术有所帮助。
什么是容器
为什么需要容器?虚拟化不是已经够了么?
对于还没有接触到容器技术的小伙伴们而言,可能觉得我们并没有必要花费大量的时间和经历去学习容器技术。也可能有很多小伙伴会觉得容器技术就是“新瓶装旧酒”,没啥学习的必要。
在 IT 技术中,KVM、VMware 等虚拟化技术已经做得很好了。为什么还要学习容器技术呢?这就要聊一下虚拟化技术在实际业务中存在的问题了:
虚拟化技术的确可以让我们更好的利用服务器资源,也可以在宿主机上安装多个不同的操作系统如 CentOS、Ubuntu 以及 Windows 等等,运行多套不同的应用。但可能我们就是为了运行一个简单的应用如 Nginx,却还要在虚拟机里运行一个完整的操作系统,内核和其它无关程序,这种做法资源利用不高。
所以我们希望更多的关注应用程序本身,而不再分精力去关注操作系统与无关程序,操作系统内核直接与宿主机共享。
为了实现上面的方案,我们就需要一种更加轻量级的虚拟化技术——容器技术。
什么是容器?
在生活中,瓶子、罐子、盆、试管、箱子等用来装东西的都是容器。
而在 IT 行业中,容器技术是一种轻量级的虚拟化技术。主要特点有:
- 轻量:只打包了需要的 bins/libs(也就是命令和库文件)。与宿主机共享操作系统,直接使用宿主机的内核。
- 部署快:容器的镜像相对虚拟机的镜像小。部署速度非常快,秒级部署,
- 移植性好:Build once,Run anywhere(一次构建,随处部署运行)。
- 资源利用率更高:相对于虚拟机,不需要安装操作系统,所以几乎没有额外的 CPU、内存消耗。
Docker 容器技术介绍
Docker 技术是目前最火热的能实现容器技术的软件,使用 Go(Golang)语言开发。其官方地址:
Docker 版本
2017 之前版本:
1.7、 1.8、1.9、1.10、1.11、1.12、1.13
2017 年的 3 月 1 号之后,Docker 的版本命名开始发生变化,同时将 CE 版本和 EE 版本进行分开。
Docker 社区版(CE):为了开发人员或小团队创建基于容器的应用,与团队成员分享和自动化的开发管道。docker-ce 提供了简单的安装和快速的安装,以便可以立即开始开发。docker-ce 集成和优化,基础设施。
- 17-03-ce
- 17-06-ce
- 18-03-ce
- 18-06-ce
- 18-09-ce
Docker 企业版(EE):专为企业的发展和 IT 团队建立。docker-ee 为企业提供最安全的容器平台,以应用为中心的平台。
PS:所以我们安装的时候,要安装 docker-ce,千万不要搞错了哦!
Docker 底层内核相关技术
Docker 容器本质上是宿主机的进程。可以把 Docker 容器内部跑的进程看作是宿主机的线程。
Docker 通过 NameSpace 实现了资源隔离,通过 CGroups 实现了资源限制。
NameSpace
Linux 内核实现 NameSpace 的一个主要目的就是实现轻量级虚拟化(容器)服务。在同一个 NameSpace 下的进程可以感知彼此的变化,而对外界的进程一无所知。
Control Group
控制组(CGroups)是 Linux 内核的一个特性,主要用来对共享资源进行隔离、限制、审计等。
只有能控制分配到容器的资源,才能避免多个容器同时运行时对宿主机系统的资源竞争。
控制组可以提供对容器的内存、CPU、磁盘 IO 等资源进行限制和计费管理。
LXC 与 Docker 区别
LXC 为 Linux Container 的简写,可以提供轻量级的虚拟化。
Docker 的底层就是使用了 LXC 来实现的。Docker 以 LXC 为基础,实现了更多更强的功能。
Docker 内容小结
容器属于操作系统虚拟化,属于 Paas,容器可看作是一种轻量级,进程级的虚拟机。
相比于 KVM 虚拟机的优势:
- 不需要安装 OS,和宿主机共享
- 镜像存储空间小
- 启动速度快(容器为秒级,虚拟机一般需要 10 秒左右)
- 移植性更好,更轻便
- 性能更好
Docker 是一个实现容器的软件,底层使用 LXC。Docker 主要使用 NameSpace 命名空间技术实现资源隔离,使用 CGroup 实现资源限制。
有疑问加站长微信联系(非本文作者)