Docker 容器化应用部署实践

日常君 · · 852 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

前言

Docker 代表的容器技术是近两年的大热技术,和人工智能、区块链等热点不同,容器技术的门槛并不高,每一个开发、测试、运维人员都能在日常工作中掌握和使用,是当今 IT 从业人员的必备技能之一。

本文主要讲解 Docker 技术栈及其应用实践,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用,希望本文对大家学习 Docker 技术有所帮助。

什么是容器

为什么需要容器?虚拟化不是已经够了么?

对于还没有接触到容器技术的小伙伴们而言,可能觉得我们并没有必要花费大量的时间和经历去学习容器技术。也可能有很多小伙伴会觉得容器技术就是“新瓶装旧酒”,没啥学习的必要。

在 IT 技术中,KVM、VMware 等虚拟化技术已经做得很好了。为什么还要学习容器技术呢?这就要聊一下虚拟化技术在实际业务中存在的问题了:

虚拟化技术的确可以让我们更好的利用服务器资源,也可以在宿主机上安装多个不同的操作系统如 CentOS、Ubuntu 以及 Windows 等等,运行多套不同的应用。但可能我们就是为了运行一个简单的应用如 Nginx,却还要在虚拟机里运行一个完整的操作系统,内核和其它无关程序,这种做法资源利用不高。

所以我们希望更多的关注应用程序本身,而不再分精力去关注操作系统与无关程序,操作系统内核直接与宿主机共享。

为了实现上面的方案,我们就需要一种更加轻量级的虚拟化技术——容器技术。

什么是容器?

在生活中,瓶子、罐子、盆、试管、箱子等用来装东西的都是容器。

而在 IT 行业中,容器技术是一种轻量级的虚拟化技术。主要特点有:

  • 轻量:只打包了需要的 bins/libs(也就是命令和库文件)。与宿主机共享操作系统,直接使用宿主机的内核。
  • 部署快:容器的镜像相对虚拟机的镜像小。部署速度非常快,秒级部署,
  • 移植性好:Build once,Run anywhere(一次构建,随处部署运行)。
  • 资源利用率更高:相对于虚拟机,不需要安装操作系统,所以几乎没有额外的 CPU、内存消耗。
在这里插入图片描述

Docker 容器技术介绍

Docker 技术是目前最火热的能实现容器技术的软件,使用 Go(Golang)语言开发。其官方地址:

https://www.docker.com/

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 实现资源限制。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:日常君

查看原文:Docker 容器化应用部署实践

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

852 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传