searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

云原生镜像开发技术(1)-何为“好”镜像

2023-10-20 01:44:11
23
0

概述

云原生的核心理念之一就是容器化,指的是使用容器化技术将应用程序和服务打包城容器,以实现 应用程序的可移植性和可扩展性。

云原生(Cloud Native)是一种基于云计算的软件开发和部署方法论,它强调将应用程序和服务 设计为云环境下的原生应用,以实现高可用性、可扩展性和灵活性。

容器是一个运行时概念,它是一个独立运行的应用程序及其所有运行时依赖项的轻量级、可执行单元。 容器在运行时与主机操作系统共享内核,因此具有较低的资源开销和启动时间,这使得容器相比传统 虚拟机更为高效。

镜像则是容器技术的基础,可以将镜像看作是一个只读模板,包含了运行应用程序所需的所有代码、 运行时库、环境变量和配置文件等。镜像由多个层次构成,每个层次代表一个文件系统的快照。这种 分层存储机制使得镜像可以重用和共享,大大减少了镜像的体积。容器以镜像为基础,在镜像上添加 一个可写层,任何对容器的更改都将存储在该可写层中。

相对于容器,镜像是一个静态的概念,它和软件代码,可执行代码一样,是开发活动的产物,因此镜像 制作可依看作一个开发活动。

本文从如何镜像开发的角度,来探讨如何制作优质的好镜像。

“好”的标准

那么,如何才是“好”镜像呢?

如果说镜像是开发活动的产物,其质量当然有好有坏。一个镜像除了能够实现其相应的业务和应用功能 之外,还需要从性能和可维护性来进行评价。

首先,镜像要考虑容器加载的性能,具体来说,就是镜像的大小,镜像的大小直接决定了从镜像仓库拉 镜像的网络流量,也直接影响了容器的启动性能。当然镜像的分层设计和Docker(或其他CRI)的缓存机制 大大的降低的这个影响。一个极小的轻量级镜像可以大大加快容器的启动性能,这也是许多go生态的镜像 以scratch作为基础镜像的原因。

其次,镜像需要考虑可维护性,运维人员日常对容器的运维操作包括查看日志,进容器内部进行调试等。 镜像中日志的输出业务性太强,暂且不说。个人认为进入容器进行shell调试非常重要,比如检查容器网络 时,需要进行一些必要的ping或者curl操作等。一个好维护的镜像需要内置一个强大的shell。

目前许多开源镜像出于种种原因,故意忽略这一点,比如直接从scratch上构建镜像,镜像内部没有shell, 运维人员根本无法进入容器,根本无法维护。 在后续章节中,我们将介绍相应的技巧,为此类镜像增加shell

最后,镜像需要考虑可定制性。这里的可定制性,包括了二次开发的定制和运行时定制。二次开发的定制指的 是他人是否能够继承你的镜像实现它的个性化需求,比如说定制配置文件或环境变量,增加其他应用功能等。 运行时定制指的是在容器启动或运行过程中,定制环境变量,配置文件等等。

因此,我们初步可以认为:一个好的镜像,需要包括下列特性:

  • 轻量,镜像体积必须小,尽量减少网络传输,和拉起容器所需的时间;
  • 易调试,具备必要的shell和调试工具
  • 易定制,可轻易通过环境变量注入,或者文件注入来定制镜像业务功能。
0条评论
0 / 1000
段歪歪
3文章数
2粉丝数
段歪歪
3 文章 | 2 粉丝
段歪歪
3文章数
2粉丝数
段歪歪
3 文章 | 2 粉丝
原创

云原生镜像开发技术(1)-何为“好”镜像

2023-10-20 01:44:11
23
0

概述

云原生的核心理念之一就是容器化,指的是使用容器化技术将应用程序和服务打包城容器,以实现 应用程序的可移植性和可扩展性。

云原生(Cloud Native)是一种基于云计算的软件开发和部署方法论,它强调将应用程序和服务 设计为云环境下的原生应用,以实现高可用性、可扩展性和灵活性。

容器是一个运行时概念,它是一个独立运行的应用程序及其所有运行时依赖项的轻量级、可执行单元。 容器在运行时与主机操作系统共享内核,因此具有较低的资源开销和启动时间,这使得容器相比传统 虚拟机更为高效。

镜像则是容器技术的基础,可以将镜像看作是一个只读模板,包含了运行应用程序所需的所有代码、 运行时库、环境变量和配置文件等。镜像由多个层次构成,每个层次代表一个文件系统的快照。这种 分层存储机制使得镜像可以重用和共享,大大减少了镜像的体积。容器以镜像为基础,在镜像上添加 一个可写层,任何对容器的更改都将存储在该可写层中。

相对于容器,镜像是一个静态的概念,它和软件代码,可执行代码一样,是开发活动的产物,因此镜像 制作可依看作一个开发活动。

本文从如何镜像开发的角度,来探讨如何制作优质的好镜像。

“好”的标准

那么,如何才是“好”镜像呢?

如果说镜像是开发活动的产物,其质量当然有好有坏。一个镜像除了能够实现其相应的业务和应用功能 之外,还需要从性能和可维护性来进行评价。

首先,镜像要考虑容器加载的性能,具体来说,就是镜像的大小,镜像的大小直接决定了从镜像仓库拉 镜像的网络流量,也直接影响了容器的启动性能。当然镜像的分层设计和Docker(或其他CRI)的缓存机制 大大的降低的这个影响。一个极小的轻量级镜像可以大大加快容器的启动性能,这也是许多go生态的镜像 以scratch作为基础镜像的原因。

其次,镜像需要考虑可维护性,运维人员日常对容器的运维操作包括查看日志,进容器内部进行调试等。 镜像中日志的输出业务性太强,暂且不说。个人认为进入容器进行shell调试非常重要,比如检查容器网络 时,需要进行一些必要的ping或者curl操作等。一个好维护的镜像需要内置一个强大的shell。

目前许多开源镜像出于种种原因,故意忽略这一点,比如直接从scratch上构建镜像,镜像内部没有shell, 运维人员根本无法进入容器,根本无法维护。 在后续章节中,我们将介绍相应的技巧,为此类镜像增加shell

最后,镜像需要考虑可定制性。这里的可定制性,包括了二次开发的定制和运行时定制。二次开发的定制指的 是他人是否能够继承你的镜像实现它的个性化需求,比如说定制配置文件或环境变量,增加其他应用功能等。 运行时定制指的是在容器启动或运行过程中,定制环境变量,配置文件等等。

因此,我们初步可以认为:一个好的镜像,需要包括下列特性:

  • 轻量,镜像体积必须小,尽量减少网络传输,和拉起容器所需的时间;
  • 易调试,具备必要的shell和调试工具
  • 易定制,可轻易通过环境变量注入,或者文件注入来定制镜像业务功能。
文章来自个人专栏
段歪歪的个人专栏
3 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0