容器化 | 一文搞定镜像构建方式选型

作者:安树博 青云科技 PaaS 中间件开发工程师
从事 PaaS 中间件服务(Redis/Memcached 等)开发工作,热衷对 NoSQL 数据库领域内技术的学习与研究

  • 官方镜像版本无法满足功能要求
    [En]

    the official image version cannot meet the functional requirements*

  • 形象漏洞在所难免
    [En]

    loopholes in the image cannot be avoided*

  • 传统施工法的图像量越来越大
    [En]

    the image volume of the traditional construction method is getting larger and larger.*

你在使用镜子时有没有遇到过上述问题?

[En]

Have you ever encountered the above problems when using mirrors?

随着云原生技术的普及,业务负载上的容器变得越来越常见。许多企业已经遇到或正在解决集装箱镜像的上述问题。随着云原生业务覆盖面的不断扩大,越来越接近业务核心,对镜像安全和可维护性的要求也越来越高。

[En]

With the popularity of cloud native technology, containers on business loads become more and more common. Many enterprises have encountered or are solving the above problems of container mirroring. With the increasing coverage of cloud native business and getting closer to the business core, the requirements for image security and maintainability are getting higher and higher.

然后,如何选择构建形象的方式,需要根据应用的具体情况来判断。本文将分析几种常见的形象构建方法,以帮助您判断。

[En]

Then how to choose the way to build the image needs to be judged according to the specific circumstances of the application. This article will analyze several common image construction methods to help you judge.

主流镜像构建方式

传统镜像

不特指某一镜像,本文中代指 Debian/Centos/Ubuntu 等系统下构建的镜像,对于 C/C++ 编写的复杂程序,这是最常用的一种构建方式。

Alpine[1]

Alpine 操作系统是一个面向安全的轻型 Linux 发行版。通过 Alpine 构建的镜像容量非常小,通常 5 MB 左右,包管理机制友好。具有下载速度快,安全性提高等优点。

Distroless[2]

源自于 Google 的镜像,比 Alpine 更精简。除了基础文件其它都不包含,甚至没有 Shell。大多数 Operator 都是基于此系列基础镜像编译。

选型对比

以 Redis 基础镜像构建为例,将三种构建方式在漏洞修复、Shell 支持、C 库、镜像体积等方面进行对比。

Alpine Distroless 传统镜像 备注 漏洞修复 快 极快 一般 Debian 11 更新到最新 cve 漏洞还有 80 多个,Alpine 和 Distroless 最新版全部修复。 Shell sh 无 bash Distroless 没有 Shell 也就没办法进入镜像去管理和后期维护。 C 库 musl 可选 glibc Alpine 的 C 库是 musl,虽然理论上和 glibc 差异不大, 但 C/C++ 程序在此编译可能会有不同,要进行充分测试。 镜像体积 约 5MB 约 2MB 30MB – 500MB 包管理器 apk 无 apt/yum Alpine 的 apk 包管理器包含软件较少, 只有 1000 多个,且都是精简版,但覆盖了常用软件。

Distroless 没有管理器,需要自己找依赖文件拷贝到镜像里。

传统镜像 apt/yum 软件丰富,但比较臃肿。

选型决策树

根据上述三种方式的异同,再根据用户的需求抽象为一棵选择决策树,根据判断制定相应的构建方法。

[En]

According to the similarities and differences of the three ways summarized above, and then abstracted into a selection decision tree according to the needs of users, the corresponding construction method can be made according to the judgment.

容器化 | 一文搞定镜像构建方式选型

选型总结

  1. 如果需要进入镜像管理维护(Shell 工具),不推荐 Distroless 构建;
  2. 如果需要考虑跨平台并减少非必要依赖库,推荐 Alpine 或 Distroless 构建;
  3. 如果原应用是基于 C/C++ 编写且很复杂,建议使用传统镜像;
  4. 如果基于 Go 编写,传统镜像可以排除。

下一期,我们将演示如何使用 Alpine 构建一个 Redis 镜像,尽情期待!

参考引用

  1. Alpine www.alpinelinux.org
  2. Distroless https://github.com/GoogleContainerTools/distroless

Original: https://www.cnblogs.com/radondb/p/16595055.html
Author: RadonDB
Title: 容器化 | 一文搞定镜像构建方式选型

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505002/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 文件传输工具:FileZilla的使用

    FileZilla FileZilla 是一款高效的 FTP 客户端工具。FileZilla 可以帮助您将本地计算机上的文件上传到虚拟主机实例中。 FileZilla 界面介绍 如…

    数据库 2023年6月11日
    0141
  • MySQL 8 新特性之Clone Plugin

    Clone Plugin是MySQL 8.0.17引入的一个重大特性,为什么要实现这个特性呢?个人感觉,主要还是为Group Replication服务。在Group Replic…

    数据库 2023年6月11日
    0175
  • C语言学习笔记

    C语言学习笔记 预处理 #include include指令可以将另一个源文件的全部内容包含进来 include “stdio.h” #include 用尖…

    数据库 2023年6月14日
    0168
  • jdbc-实现用户登录业务(解决sql注入问题)

    package com.cqust; import java.sql.*;import java.util.HashMap;import java.util.Map;import …

    数据库 2023年5月24日
    0128
  • Mysql数据库存取原理及性能优化

    一、Mysql的系统架构图 二、Mysql存储引擎 Mysql中的数据是通过一定的方式存储在文件或者内存中的,任何方式都有不同的存储、查找和更新机制,这意味着选择不同的方式对于数据…

    数据库 2023年5月24日
    0114
  • 手把手教你定位线上MySQL慢查询问题,包教包会

    1. 慢查询日志的作用 默认情况下不启用慢速日志。建议手动启用,以便我们更轻松地定位在线问题。 [En] Slow log is not enabled by default. I…

    数据库 2023年5月24日
    0152
  • 高可用 | Xenon 实现 MySQL 高可用架构 常用操作篇

    原创:知数堂 上一篇文章,我们详细介绍了 Xenon 实现 MySQL 高可用架构的部署过程。接下来本篇将介绍 Xenon 的常用操作,帮助大家在完成环境搭建之后,能把 Xenon…

    数据库 2023年5月24日
    0147
  • 图文实例解析,InnoDB 存储引擎中行锁的三种算法

    前文提到,对于 InnoDB 来说,随时都可以加锁(关于加锁的 SQL 语句这里就不说了,忘记的小伙伴可以翻一下上篇文章),但是并非随时都可以解锁。具体来说,InnoDB 采用的是…

    数据库 2023年6月6日
    0135
  • MySql 删除数据表

    定义: 删除数据表就是将数据库中已经存在的表从数据库中删除。注意,在删除表的同时,表的定义和表中所有的数据均会被删除。因此,在进行删除操作前,最好对表中的数据做一个备份,以免造成无…

    数据库 2023年6月14日
    0138
  • 斗地主游戏的案例开发

    关于java后端的斗地主游戏开发案例(只实现后端部分) 斗地主游戏的案例开发 业务需求分析: 斗地主的做牌, 洗牌, 发牌, 排序(拓展知识), 看牌。业务: 总共有54张牌。点数…

    数据库 2023年6月16日
    0135
  • JVM-类加载

    JVM JAVA技术交流群:737698533 类加载 推荐视频 https://www.bilibili.com/video/BV1PJ411n7xZ JVM系列笔记结合此视频和…

    数据库 2023年6月16日
    0160
  • MYSQL8.0版本安装失败!

    第一次安装失败 Windows Server 2012首先是使用mysql的最新安装包去安装,但是安装包在执行到 starting mysql server 时,就卡住不动了。手动…

    数据库 2023年5月24日
    0136
  • 建议收藏备查!MySQL 常见错误代码说明

    先给大家看几个实例的错误分析与解决方案。 1.ERROR 2002 (HY000): Can’t connect to local MySQL server throu…

    数据库 2023年6月9日
    0185
  • MySQL InnoDB 锁的二三事

    近日, 在一个小型项目中, 遇到了一个触及我知识盲区的bug. 项目用的是MySQL 5.7.25, 其中有一张表 config_data, 包含四个字段, id, name, v…

    数据库 2023年6月11日
    0159
  • 23种设计模式之解释器模式(Interpreter)

    文章目录 概述 解释器模式的优缺点 解释器模式的结构和实现 * 模式结构 模式实现 JDK源码中的使用场景 总结 概述 解释器模式(Interpreter Pattern)提供了评…

    数据库 2023年6月6日
    0162
  • MySQL源码分析之SQL函数执行

    1.MySQL中执行一条SQL的总体流程 2.SQL函数执行过程 1.MySQL中执行一条SQL的总体流程 一条包含函数的SQL语句,在mysql中会经过: &#x5BA2…

    数据库 2023年5月24日
    0173
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球