










当前,容器化技术非常流行,各大小公司都在使用。那么容器化技术在实际项目中如何运用?有哪些优缺点?
在容器化技术出现之前,部署系统非常麻烦,以一个简单的博客系统为例,博客系统设计如下:
这个系统该如何部署?
部署图如下:

这样部署有以下几个问题:
有没有一种方案能解决上述重复安装、重复配置、升级麻烦的苦恼?
有!
那就是容器化技术,代表技术是虚拟机和Docker
容器化技术最显著的特点是:自带环境。就是说容器自己带有应用运行需要的环境和全部依赖。
虚拟机大家都用过。在电脑上安装虚拟机软件,再安装操作系统,再安装其他需要的环境。再部署应用,其他地方需要部署的话,则将虚拟机文件拷贝到其他机器上。
Docker是个划时代的技术,它极大提高了应用的维护效率,降低了应用开发的成本!使用Docker,可以让应用的部署、测试和分发都变得前所未有的轻松!
什么是Docker,这里只做一个简单的介绍,详细的内容请查看Docker官网
Docker基于Linux内核的cgroup、namespace,以及OverlayFS类的Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术,使得Docker技术比虚拟机技术更为轻便、快捷。
下面的图片比较了Docker和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
传统虚拟化

Docker

Docker同传统的虚拟化技术相比,有以下优点:
对比总结如下:
| 特性 | 容器 | 虚拟机 |
|---|---|---|
| 启动 | 秒级 | 分钟级 |
| 硬盘使用 | 一般为MB | 一般为GB |
| 性能 | 接近原生 | 弱于 |
| 系统支持量 | 单机支持上千个容器 | 一般几十个 |
主要有以下几个步骤:
docker安装
首先需要安装docker环境,Docker官网有安装教程,Linux、Mac、Windows都支持。
镜像构建
镜像是docker运行的基础,应用系统交付物即是镜像。镜像是一个特殊的文件,包含了运行时所需的程序、库、资源、配置、环境变量等参数。
镜像的构建,都是依赖基本的镜像,再将应用集成进去。例如后端镜像,以包含了Linux及jdk环境的镜像为基础,再将应用的jar包放入镜像中,jar包在这个自闭的环境中运行,不受外界影响。
实际应用中,会按照镜像类别分为:
以博客系统为例,需要构建哪些镜像呢?
| 类别 | 名称 | 作用 |
|---|---|---|
| 基础镜像 | mariadb镜像 | 提供mariadb服务 |
| 基础镜像 | ngxin镜像 | 提供ngxin服务 |
| 初始化镜像 | sql镜像 | 建库建表,一般只执行一次 |
| 初始化镜像 | ngxin配置镜像 | 前端静态文件处理,后端接口代理 |
| 后端镜像 | java镜像 | 博客后端服务 |
| 前端镜像 | 静态文件镜像 | 前端界面 |
上述不同类别的镜像有不同的生成方式,后面的文章再进行讲解。
镜像的运行
镜像依赖docker环境运行,即是启动了一个容器。容器可理解为一个进程,除了可以提供服务外,也可以通过目录映射,读写宿主机上的文件。
这么多镜像需要一个一个的启动吗?那工作量很大。需要进行统一的管理维护。
可以为博客系统生成一个shell文件,文件中主要使用 docker run 命令写明了运行容器需要的镜像名称、环境变量等,也指明了镜像启动的先后顺序,例如基础镜像最先启动,再启动初始化镜像,再启动后端镜像,最后启动前端镜像。
也可以使用 docker compose 来维护容器,会生成一个yaml文件,写明了镜像名称、环境变量等,需要在安装了docker compose的环境中运行。
容器管理可以使用Portainer,或者使用 K8S
以上的shell文件、docker compose yaml文件,只需要做少许的配置,例如换IP等,就可以在任何一个装有docker的环境中使用一条命令将博客系统运行起来,省去了安装软件、做各种配置等操作,而且无论哪个环境运行,博客系统的表现都是一致的。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。