写点什么

如何选取 Linux 容器镜像

  • 2017-10-29
  • 本文字数:1104 字

    阅读完需:约 4 分钟

一份如何选取 Linux 容器镜像的对比报告阐述了镜像选取中的一些最佳实践。报告中涉及了架构、安全和性能等因素,此外,商业用户还需要考虑厂商的支持情况。

Linux 容器提供了对内核空间和用户空间组件的独立管理,这是是通过使用 cgroups 命名空间(Namespace)等资源及进程隔离机制实现的。虽然Solaris 和BSD 也提供了与Linux 容器技术类似的抽象机制,但此份对比报告只聚焦于Linux 容器技术。运行容器的主机提供了运行容器所需的操作系统内核和一系列工具。另一方面,容器镜像提供了运行分布在容器间的应用所需的软件库、解释器和应用代码。所有这些都依赖于底层系统库。对于解释性语言也同样适用,因为解释器本身也是使用底层语言编写的。

第一个原则是容器镜像的大小。各容器镜像在磁盘上的大小不等,从Fedora 这样的230MB 大小,到Alpine Linux 这样的4MB 大小。但是在选取一个镜像发布版时,镜像的大小并非唯一应该考虑的问题。镜像的主要分组包括Debian/Ubuntu、RHEL、Centos、Fedora 和Alpine。

第二个原则是容器中的安全漏洞问题。该问题已成为很多报告的主题。根据一份最新的研究,Docker Hub 上的公开Debian 容器镜像所具有的漏洞最少,而Ubuntu 镜像的漏洞最多。该研究仅涉及了哪些公开的Docker 镜像。一些工具也提供了不同程度的防护和功能,例如 Clair vuls 这样的开源工具,以及 Twistlock 等这类商业工具。很多软件厂商已实现对发布版及 Web 服务器和数据库这样的通用软件中的未知漏洞的自动测试。一些开源工作也致力于减缓或最小化容器漏洞,两者都会对主机和容器间的相互通信产生影响(参见该幻灯片的第7-9 页)。

第三个原则是镜像中的软件包情况。glibc 等核心库和软件包格式会对容器的安全和性能产生影响。一些成熟的软件库,例如glibc 和gcc,具有很大规模的用户社区,并已经被稳健地使用多年。这也是容器镜像使用这些软件库的首要原因。但是Alpine 等一些发布版坚持另辟蹊径,这已经导致了一些问题

除了上述三个原则,企业用户还需要考虑镜像的生命周期和产品支持因素。RHEL 和Ubuntu 给出了一些商业支持选项,它们通过论坛对各种用户提供社区支持。Ubuntu 和RHEL 引领了生命周期范围的管理,即一个发布版本得到支持的时间范围,在此期间将提供软件缺陷修复、补丁与特性的向后移植(Backporting)及支持。

报告给出的结论是,容器镜像的选择类似于选择Linux 发布版。为此,Google 的“ Distroless ”镜像给出了一种非常有意思的拆分方式。Distroless 仅是一个提供各种应用及其运行时依赖的镜像,并不包含哪些在任一 Linux 发布版中通常都会包含的程序,例如 Shell 和软件包管理等。

查看英文原文: How to Choose a Linux Container Image

2017-10-29 19:002031
用户头像

发布了 391 篇内容, 共 129.5 次阅读, 收获喜欢 256 次。

关注

评论

发布
暂无评论
发现更多内容

MyBatis详解(一),实战java高并发程序设计

Java 程序员 后端

Linux内核结构组成之进程调度,java开发直播系统相关教程

Java 程序员 后端

linux安装oracle XE,详解Java架构进阶面试题

Java 程序员 后端

mybatis常用注解(绝对经典),java程序设计教程张延军课后答案

Java 程序员 后端

MyBatis(四):参数处理器,linux运维架构师

Java 程序员 后端

mybatis-plus使用教程,java面试题基础篇

Java 程序员 后端

Kubernetes官方java客户端之七:patch操作,深入浅出Java

Java 程序员 后端

MongoDB :第六章:Java程序操作MongoDB,mysql复合索引面试题

Java 程序员 后端

KubeVela + KEDA:为应用带来,kafka入门

Java 程序员 后端

Linux云服务器搭建SFTP服务器图片服务器,java线程原理

Java 程序员 后端

Mybatis 传参的各种姿势,看这一篇就足够,java使用教程下载

Java 程序员 后端

Myabtis源码分析六-代理对象Mapper的创建流程分析,死锁全详解,一文带你搞定

Java 程序员 后端

MyBatis详解(二),java开发岗高频面试题全解析祖国的花朵

Java 程序员 后端

Kubernetes 稳定性保障手册 -- 可观测性专题,今晚我们通宵学习SpringCloud

Java 程序员 后端

Linux上安装Mycat和配置连接MySQL 8,三年经验月薪50k我是怎么做到的

Java 程序员 后端

Maven的核心概念,java面试高频知识点

Java 程序员 后端

MyBatis的jdbcType和javaType详解,spring框架入门教程

Java 程序员 后端

Kubernetes教程之新手安装必看(快速浏览少走弯路),java集合详解和集合面试题目

Java 程序员 后端

Maven相关知识点整理,java基础语法的格式

Java 程序员 后端

mybatis开发要点-insert主键ID获取和多参数传递,mybatis原理详解

Java 程序员 后端

mybatis-plus代码生成器,一键生成代码,springcloud教程百度云

Java 程序员 后端

Mybatis一二级缓存实现原理与使用指南,java后端技术梳理

Java 程序员 后端

Mybatis学习笔记--Mybatis实现CRUD,springboot注解面试题

Java 程序员 后端

Kubernetes官方java客户端之八:fluent style,mysql入门视频教程

Java 程序员 后端

Linux系统:第十一章:常用命令,华为java面试面经

Java 程序员 后端

Linux系统:第十章:服务器环境搭建,附Java面经

Java 程序员 后端

Mybatis Generator最完整配置详解,Java面试

Java 程序员 后端

MyBatis详解(二)(1),轻松拿到了阿里Java高级开发工程师的offer

Java 程序员 后端

kubernetes下的jenkins如何设置maven,java异步请求原理

Java 程序员 后端

Log4j使用指南,java入门视频教程

Java 程序员 后端

markdown编辑器的使用教程,Java成长路线图

Java 程序员 后端

如何选取Linux容器镜像_Linux_Hrishikesh Barua_InfoQ精选文章