微信云托管趣味讲解:Docker、镜像、容器的那些事
微信云托管上线后,有很多同学虽然表现出了极大的好奇心,但碍于对Docker、镜像和容器等概念的不了解望而却步。
本文就从简单趣味的角度,带领大家快速理解入门微信云托管必备知识点,再把云托管到底能帮业务做什么事、有什么用安排一下!
什么是Docker?
无论你是没印象,还是仅仅听过没用过,都需要来补补课啦!这是一个基础点,要考的。
Docker 是用 GO 语言开发的应用容器引擎,基于容器化、沙箱机制的应用部署技术,说白了,Docker 是一个强大的工具。
既然是个工具,一定是听令行事,指令是我们能操作它正确工作的基础,可以通过3种方式来实现:
- Docker 命令
- Dockerfile 脚本(微信云托管推荐)
- shell 脚本
那么,Docker 具体能做什么事?
首先,它会将你的项目和基础镜像按照指令打成一个项目镜像,紧接着,在微信云托管/服务器中创建一个容器,让镜像转到容器内运行,从而实现项目的部署。也就是:
指令 -> 镜像
( 项目+基础镜像 ) + Docker = 项目镜像
微信云托管 / 服务器 -> 容器
项目镜像 + 容器 = 项目部署
正确使用 Docker,理想的效果是:开发者只需要提供项目的代码,经过 Docker 就可以为你的项目搭建配置好运行环境所需要的一切东西。总之,如果能熟练掌握 Docker 工具,就能够把镜像和容器玩的非常溜。
上面引出来两个概念,第一个是镜像,第二个是容器,我们将在下文慢慢展开。
什么是镜像?
这是一个自计算机诞生就始终伴随的概念,例如 Windows 系统的 ISO 装机盘,其实就是镜像的一种形态,镜像是固化的、未运行的,但又始终保持运行逻辑的一堆存储。
当镜像进入到运行环境中,比如操作系统 ISO 装进一台笔记本,就具备运行的实例了,笔记本的计算性能越强,发挥的作用也越大。
前文讲到,Docker 根据指令生成镜像,然后再根据镜像生成运行的容器实例。
Docker 是构造镜像的一把好手,而且非常懂得众人拾柴火焰高的原理:Docker 在构建镜像时,可以依赖一个父镜像作为底层镜像一起打包,从而构建成一个全新的镜像。而这个被用作依赖的父镜像,就是基础镜像。
因此,在配置项目 Dockerfile 创建镜像脚本之前,需要先确立一个基础镜像。
比如,上图中引入了 Node 的基础镜像,这个镜像拥有我们运行 Node.js 程序所需的资源。
基础镜像存在的地方被称为仓库,类似于我们代码托管的仓库或者 npm 仓库。
仓库里有各种运行环境系统和框架语言的镜像,满足各种项目的运行条件,例如你要运行 Python 项目,就需要在仓库中引入 Python 有关的镜像。当然你也可以制作自己的镜像只用于自己使用,Docker 作为工具同样可以轻松做到。
什么是容器?
还是从 Docker 讲起:Docker 根据镜像生成运行的容器实例后,容器就变成了一个可运行的实体,能够通过一系列的手段感知它的存在和生命力。
而从镜像到容器的过程,类似于 class 类 new 了一个对象,Windows 等操作系统被安装到一台电脑上。
想必很多开发者都有维护服务器的经验:给一个已经调试好软件和网络的服务器系统打一个镜像,存个盘,随后在其他服务器上直接安装和加载存盘,就可以无需再走一遍“开局打怪”的老路了。
Docker 镜像和在服务器中自行打的镜像类似,不同的点在于自行打的镜像是运行在服务器中,或者分拆的小虚拟机中;而 Docker 的镜像需要运行在一个“沙盒”环境中,这个“沙盒”环境所依赖的就是容器化技术。
总结一下,容器就是一个镜像运行在一个特制的环境中而对外的整体。
再深度解释一波,容器是由3个技术,构建出来的进程的隔离环境:
- Linux Namespace 和 Linux Cgroups,容器化技术的核心,提供了运行时的隔离和资源的授予。
- rootfs,也就是镜像,提供了容器的运行内容。
容器和服务器有什么区别?
在互联网飞速发展的过程中,服务器在形态上的发展从未停止过,我们来通过一个「全家住房需求」的例子,生动讲解一下服务器形态乃至云计算的发展史:
- 自有物理建设(自有服务器实体): 一开始大家都是自己搞几台服务器自己维护,通常一停电就全完的那种。
举例:你自己盖了一个别墅,兼顾物业管理
- 物理托管(托管服务器实体): 去保养和巡检这实体的东西,成本很高,所以就有了服务商来帮忙托管,找个优质的地方。
举例:你自己盖了一个别墅,雇人来负责物业管理
- IaaS 基础设施即服务: 有需求就会有租赁,买不起服务器的话,可以向服务商购买服务器资源,云计算初具成型。
举例:没钱自己盖别墅,有钱买一层小高楼,自己装修
- PaaS 平台即服务: 我服务器都不想管了,还要自己处理服务器操作系统和软件,直接给我一个可以运行项目的资源就行了。
举例:买一层小高楼或者一间房,精装修拎包入住
- FaaS 功能即服务: 一个核心功能不想做,引入别人提供的服务,然后自己写点东西把这个给做了。
举例:家里有人比较挑,要个风水好的,先安排住酒店
- SaaS 软件即服务: 我代码都不想写了,引入一个软件就把这个事给办了,你就说能不能吧?
举例:全家直接住酒店
直到现在,如何提供更受欢迎的资源依然是云厂商一直在探索的议题。以上几种状态始终没有消失,每一种都有自己情有独钟的用户,用户关心的诉求点不同,决定了用户在那个状态层面。
容器化技术, 以及 Docker 的出现,其实都是在改善 IaaS 中的服务器维护处理所带来的弊端,比如运行环境不一致、网络配置繁琐,虽然有针对的运维工具可以减小这类压力,但多多少少要付出一些成本。
容器技术,本质上就是在服务器系统上铺设一个平台,直接控制和管理底层计算和存储资源,上层隔离出运行环境供开发者的项目镜像运行。
好比一个公司买下了一个大的厂房后,分隔出很多小的房间,给每个房间接入水电,然后统一一些标准,再租赁出去。
所以,在开发者的角度,如果无需关心服务器的运行,那么只需要关注两件事:
- 项目镜像的打包;
- 定义如何管理分隔容器和处理资源。
云托管和容器服务有什么区别和联系?
容器编排技术和工具的出现,直接将服务器变成了可操作的模块,开发者只需要操作控制面板就可以指挥服务器进行容器化的步骤了,真正做到了统一管理。
因为有统一的容器化,所以也不用担心服务器运行环境差异和网络配置等问题。相当于给你一个遥控装置,可以用来创建出很多容器,然后按照实际使用资源付费。
但并不是所有开发者都对容器编排、配置等游刃有余,好比开车学驾照,失误压线导致考试未通过的事时有发生。
那么,如果不会开车,但我想要坐车出去玩,怎么办?
“代驾”应运而生。
类比到技术层面,微信云托管不仅提供租车服务(容器服务),还提供“代驾”服务:开发者只需要简单的配置,提出目的和诉求,微信云托管就会自动创建并维持你的容器实例计划,同时还配备很多行业先进的技术体系,保证你能使用到的是最新、最主流的方案和技术。结论就是:
容器服务 + 常用数据库 + 自动扩缩容 + 运维附属服务(监控、日志、告警) + 云生态 + 微信生态 + X(更多能力开发中)= 微信云托管 https://cloud.weixin.qq.com/
微信云托管优惠支持
7折优惠
针对微信云托管全用户,直至2021年12月31日,按量付费模式下享7折优惠。
万元企业激励计划
微信云托管推出企业激励计划,万元补贴、专家级迁移服务、腾讯云官方流量曝光等,助力企业更低成本享受云原生带来的极致体验。
长按识别二维码报名
低价资源包(即将上线)
针对个人开发者和企业新用户,微信云托管将推出不同梯度的资源包,进一步降低产品费用。
关于微信云托管,使用过程中若有问题或建议,欢迎来到微信开放社区 微信云托管 专区一起交流讨论。