明确概念
- Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。
- Docker包括:镜像(Image)、容器(Container)、仓库(Repository),后面会重点介绍。
- K8S,全称kubernetes,是基于容器的集群管理平台,可以先简单理解为是管理容器的:可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
为什么要学容器
不管是Docker还是K8s,都是目前的主流技术,而且各大云厂商都基于容器技术进行封装,提供了相关服务,我们能很方便的上手操作。
掌握了docker和k8s,我们就能告别臃肿的虚拟机,能够一次构建,四处部署、能够动态扩缩容、能够无人值守等等
容器是什么?
首先我们想一下现实生活中的容器是什么呢?
装东西用的都可以称为容器,比如“瓶子”、“箱子”、“水杯”、“集装箱”等等。
我们再想一下容器的作用是什么?说白了就是“装东西”,为了方便我们搬用。
比如把水装到瓶子里,我们只要拿好瓶子,就能轻轻松松的把水带到任何地方。
计算机世界里的容器概念也一样,它的作用也是“装东西”,只不过不是装水了,而是装:代码、环境、运行时、配置文件、系统文件、设置等等。
我们可以简单理解为:保证程序运行的对象都可以装到容器中。
容器的作用
让我们能够只关注应用程序本身,不需要关注应用程序运行的环境和系统等,让环境和系统可以复用。
容器技术的特点
- 轻量化:只打包必要的Bin/Lib
- 方便移植:一次构建,随时部署
- 秒级部署:部署速度非常快,我们可以通过配置yaml文件设置配置参数
- 弹性伸缩:动态扩容,新的技术思路解决高并发问题
容器的强大之处
分享一下我的真实案例:
我做过的项目比较多,但是开发环境和框架基本是一样的,都是LNMP环境,PHP开发语言,Laravel框架开发。
当我接到开发第二个项目的需求时,我就有意识的去研究怎么减轻部署环境的工作量,我当时找到的办法是:不管阿里云还是腾讯云都有自定义镜像的功能。
我就使用云厂商的自定义镜像功能,需要2步:
- 把LNMP开发环境、代码、框架。Nginx配置等等制作成自定义镜像
- 在开发新项目申请新的服务器时,选择我制作的自定义镜像,这样当我服务器启动的时候就直接可以开发新项目了。
注意,我上面一直在提镜像这两个字。镜像是什么呢? 我的理解就是,类似我们按照电脑时的系统盘,镜像盘,是一个文件包,把我们的配置文件,系统环境等等进行打包,支持我们换一个机器进行安装。
我抛出一个问题,来证明容器的强大之处。
比如我的项目A使用的CentOS系统,我的项目B因为种种原因需要使用Ubuntu,我前面提到的自定义镜像能怎么解决这个问题呢?
答案是: 自定义镜像不支持(在云厂商不能修改系统,即源镜像依赖的是什么系统,基于自定义镜像部署的服务器就是什么系统。)但是容器技术可以。