docker 基础镜像里 scratch 和alpine,ubuntu centos详细对比(镜像优化)

ops/2024/10/20 16:39:58/

 1. scratch

特点

极简:scratch 是一个空的镜像,没有任何操作系统或文件系统。

体积:scratch 镜像的大小几乎为零,是最小的镜像。

灵活性:完全由用户自定义,没有任何预装的工具或库。

依赖管理:需要手动管理所有依赖,没有包管理工具。

优势

极致轻量:适用于构建非常轻量级的镜像,如静态编译的二进制文件或微服务。

安全:没有额外的软件包或工具,减少了攻击面。

劣势

缺乏工具:没有预装的工具或库,需要手动管理所有依赖。

复杂性:适合有经验的用户,新手可能难以上手。

适用场景

静态编译的二进制文件:如 Go 语言编译的可执行文件。

微服务:需要极致轻量级的镜像,减少启动时间和资源消耗。

示例

dockerfile

使用 scratch 基础镜像

FROM scratch

复制静态编译的二进制文件

COPY myapp /myapp

设置容器启动时运行的命令

CMD ["/myapp"]

 2. Alpine Linux

特点

轻量级:Alpine Linux 的基础镜像非常小,通常只有几 MB。

基于 BusyBox:使用 BusyBox 提供了许多标准 Unix 工具的精简版本。

使用 musl libc:使用 musl libc 而不是 glibc,musl libc 更小、更高效。

安全性:默认启用了许多安全特性,如地址空间布局随机化(ASLR)、堆栈保护等。

包管理系统:使用 apk 作为包管理工具,支持包的安装、升级和卸载。

优势

轻量级:适用于需要轻量级、高效、安全的基础镜像的场景。

安全性:默认启用的安全特性增强了安全性。

社区支持:有活跃的社区支持,文档和资源丰富。

劣势

兼容性:由于使用 musl libc,某些依赖 glibc 的软件可能无法直接运行。

工具限制:提供的工具相对较少,需要手动安装更多工具。

适用场景

Web 服务器:如 Nginx、Apache。

API 服务:如 Node.js、Python 应用。

数据库:如 MySQL、PostgreSQL。

开发和测试:轻量级的开发和测试环境。

示例

dockerfile

使用 Alpine Linux 基础镜像

FROM alpine:latest

更新包列表并安装 curl

RUN apk add --no-cache curl

设置容器启动时运行的命令

CMD ["sh", "-c", "while true; do sleep 3600; done"]

 3. Ubuntu

特点

成熟稳定:Ubuntu 是一个广泛使用的 Linux 发行版,拥有丰富的软件生态和社区支持。

基于 glibc:使用 glibc,兼容性好,支持广泛的软件包。

包管理系统:使用 apt 作为包管理工具,支持包的安装、升级和卸载。

体积:基础镜像相对较大,通常在几十 MB 到几百 MB 之间。

优势

广泛支持:丰富的软件生态和社区支持,易于找到解决方案。

兼容性:支持广泛的软件包,大多数开源软件都可以在 Ubuntu 上运行。

稳定性:长期支持(LTS)版本提供稳定的环境。

劣势

体积较大:基础镜像相对较大,增加了镜像的下载和启动时间。

资源消耗:占用更多的内存和 CPU 资源。

适用场景

开发环境:如 IDE、编译工具等。

复杂的应用:需要大量依赖和工具的复杂应用。

企业级应用:需要长期支持和稳定性的企业级应用。

示例

dockerfile

使用 Ubuntu 基础镜像

FROM ubuntu:latest

更新包列表并安装 curl

RUN apt-get update && apt-get install -y curl

设置容器启动时运行的命令

CMD ["bash"]

 4. CentOS

特点

企业级:CentOS 是一个企业级的 Linux 发行版,长期支持(LTS)版本提供稳定的环境。

基于 glibc:使用 glibc,兼容性好,支持广泛的软件包。

包管理系统:使用 yum 作为包管理工具,支持包的安装、升级和卸载。

体积:基础镜像相对较大,通常在几十 MB 到几百 MB 之间。

优势

企业级支持:长期支持(LTS)版本提供稳定的环境,适合企业级应用。

兼容性:支持广泛的软件包,大多数开源软件都可以在 CentOS 上运行。

社区支持:有活跃的社区支持,文档和资源丰富。

劣势

体积较大:基础镜像相对较大,增加了镜像的下载和启动时间。

资源消耗:占用更多的内存和 CPU 资源。

适用场景

生产环境:需要企业级支持和稳定性的生产环境。

企业级应用:需要长期支持和稳定性的企业级应用。

复杂的应用:需要大量依赖和工具的复杂应用。

示例

dockerfile

使用 CentOS 基础镜像

FROM centos:latest

更新包列表并安装 curl

RUN yum update -y && yum install -y curl

设置容器启动时运行的命令

CMD ["bash"]

 对比总结

 选择合适的镜像

1. scratch:

   适用场景:适用于构建非常轻量级的镜像,如静态编译的二进制文件或微服务。

   示例:FROM scratch

2. Alpine Linux:

   适用场景:适用于需要轻量级、高效、安全的基础镜像的场景,如 Web 服务器、API 服务、数据库等。

   示例:FROM alpine:latest

3. Ubuntu:

   适用场景:适用于需要广泛软件支持和成熟生态的场景,如开发环境、复杂的应用和服务。

   示例:FROM ubuntu:latest

4. CentOS:

   适用场景:适用于需要企业级支持和稳定性的场景,如生产环境中的应用和服务。

   示例:FROM centos:latest


http://www.ppmy.cn/ops/127029.html

相关文章

Linux下内核空间和用户空间内存映射图详解

目录 一、简介二、内存空间定义三、内存权限四、内存空间映射图4.1 32位系统4.2 64位系统4.3 映射空间解析 五、其他相关链接1、关于linux下内存管理内容总结2、Linux内核中kzalloc分配内存时用的参数GFP_KERNEL详解3、Linux下stream内存带宽测试参数和示例详解附源码总结 一、…

数据仓库-数仓分层建设

数仓分层设计的作用 支持数据的重用 通过在数据仓库中创建可重用的数据模型,可以减少数据的重复处理,提高数据的处理效率。 优化性能 通过在数据仓库的不同层次上进行数据聚合和汇总,可以提高查询性能,尤其是在面对大量数据时…

TiDB替换Starrocks:业务综合宽表迁移的性能评估与降本增效决策

作者: 我是人间不清醒 原文来源: https://tidb.net/blog/6638f594 1、 场景 业务综合宽表是报表生成、大屏幕展示和数据计算处理的核心数据结构。目前,这些宽表存储在Starrocks系统中,但该系统存在显著的性能瓶颈。例如&#…

儿童饰品上架亚马逊美国站CPC认证的重要性

儿童饰品上架亚马逊美国站时,CPC(Childrens Product Certificate,儿童产品证书)认证的重要性不容忽视。以下是CPC认证在此过程中的几个关键重要性: 1. 法律合规性 在美国,所有面向12岁及以下儿童销售的产…

系统架构设计师教程 第9章 19.6 大数据架构设计案例分析 笔记

19.6 大数据架构设计案例分析 19.6.1 Lambda架构在某网奥运中的大数据应用 系统架构 基于Lambda架构,由数据集成层、数据存储层、数据计算层和数据应用层构成 数据集成层分为离线数据集成和实时数据集成。 实时数据集成集群采用Nginx和 Flume服务器对实时流数据…

【verilog】3_8-4_16数选器

文章目录 前言一、实验原理二、实验过程三、实验结果参考文献 前言 进行 实验 一、实验原理 二、实验过程 三、实验结果 代码 timescale 1ns/1ns module decoder_38_tb ; reg a; reg b; reg c; wire [7:0]data;decoder_38 u0 (.a(a),.b(b),.c(c),.data(data) ); init…

效果不错的论文介绍:Im2Flow2Act:-跨领域机器人操控技术

Im2Flow2Act: 跨领域机器人操控技术 简介 今天介绍一个比较惊艳的论文,Im2Flow2Act,可以预测应该怎么移动图象中的物体预测移动方法完成需要执行的动作任务。 Im2Flow2Act 是一个基于学习的机器人操控框架,旨在通过多种数据源为机器人提供操…

LabVIEW提高开发效率技巧----用户权限控制

在LabVIEW开发中,用户权限控制是一个重要的设计模块,尤其在多用户系统中,它可以确保数据安全并控制不同用户的操作权限。为了实现用户权限控制,可以通过角色与权限管理模块来进行设计和实施。以下将从多个角度详细说明如何在LabVI…