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

devtools/2024/10/20 15:15:14/

 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/devtools/127314.html

相关文章

Flink时间窗口程序骨架结构

前言 Flink 作业的基本骨架结构包含三部分:创建执行环境、定义数据处理逻辑、提交并执行Flink作业。 日常大部分 Flink 作业是基于时间窗口计算模型的,同样的,开发一个Flink时间窗口作业也有一套基本的骨架结构,了解这套结构有助…

车载软件架构---软件定义汽车的复杂性

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

构建后端为etcd的CoreDNS的容器集群(二)、下载最新的etcd容器镜像

在尝试获取etcd的容器的最新版本镜像时,使用latest作为tag取到的并非最新版本,本文尝试用实际最新版本的版本号进行pull,从而取到想的最新版etcd容器镜像。 一、用latest作为tag尝试下载最新etcd的镜像 1、下载镜像 [rootlocalhost opt]# …

28——循环结构之累加应用(配套练习后续更新~~~~~)

例28.1 统计奖牌 (Standard IO 3167) 时间限制: 1000 ms 空间限制: 262144 KB 具体限制题目:2008年北京奥运会,Y国的运动员参与了n天的决赛项目(1≤n≤20)。现在要统计一下Y国所获得的金、银、铜牌数目及总奖牌数。 输入 输入n+1行&#xf…

springboot030甘肃非物质文化网站的设计与开发(论文+源码)_kaic

毕 业 设 计(论 文) 题目:甘肃非物质文化网站设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本甘肃非物质文化…

Camera系统知识整理

本文是用来记录常用的Camera系统知识相关的文章 -- ing 1 图像格式 视频存储格式YUV420 NV12 NV21 i420 YV12详解 视频存储格式YUV420 NV12 NV21 i420 YV12详解_yuv420sp-CSDN博客 YUV(YCbCr)色彩空间详解 YUV(YCbCr)色彩空间…

学习虚幻C++开发日志——TSet

TSet 官方文档:虚幻引擎中的Set容器 | 虚幻引擎 5.5 文档 | Epic Developer Community (epicgames.com) TSet 是通过对元素求值的可覆盖函数,使用数据值本身作为键,而不是将数据值与独立的键相关联。 默认情况下,TSet 不支持重…

《深度学习》OpenCV EigenFaces算法 人脸识别

目录 一、EigenFaces算法 1、什么是EigenFaces算法 2、原理 3、实现步骤 1)数据预处理 2)特征提取 3)构建模型 4)识别 4、优缺点 1)优点 2)缺点 二、案例实现 1、完整代码 运行结果&#xff…