写点什么

Alpine Linux,一个只有 5M 的 Docker 镜像

  • 2016-01-06
  • 本文字数:1182 字

    阅读完需:约 4 分钟

简介

Alpine Linux Docker 镜像基于 Alpine Linux 操作系统,后者是一个面向安全的轻型 Linux 发行版。不同于通常 Linux 发行版,Alpine Linux 采用了 musl libc busybox 以减小系统的体积和运行时资源消耗。在保持瘦身的同时,Alpine Linux 还提供了自己的包管理工具 apk,可以在其网站上查询,或者直接通过apk 命令查询和安装。

Alpine Linux Docker 镜像也继承了 Alpine Linux 发行版的这些优势。相比于其他 Docker 镜像,它的容量非常小,仅仅只有 5M,且拥有非常友好的包管理器。

下表是一些官方镜像的大小:

除了小,Alpine 镜像的另外一大优势就是内置完整包管理器。相较于其他微型基础镜像(如 busybox,基础镜像大小为 1.113MB),拥有一个包管理器,可以快速构建应用镜像。例如这个 dnsmasq 镜像,Dockerfile 非常简单,仅仅运行了 Alpine 提供的 apk 工具安装了 dnsmasq 包即可:

复制代码
FROM alpine:3.2
RUN apk -U add dnsmasq
EXPOSE 53 53/udp
ENTRYPOINT ["dnsmasq", "-k"]

使用

由于 Alpine Linux 有完整的包管理器,其使用方式和其他的基础镜像类似,直接使用其包管理命令 apk 即可。

如 README 中例子,如果需要安装一个 mysql 客户端,只需要创建如下 Dockerfile:

复制代码
FROM gliderlabs/alpine:3.3
RUN apk add --no-cache mysql-client
ENTRYPOINT ["mysql"]

然后通过docker build命令,即可构建出自己的 mysql 客户端。同样,基于 Alpine Linux 构建出来的镜像,有其空间上的巨大优势:

复制代码
docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
alpine/mysql latest edf988b8f4c8 58 seconds ago 35.74 MB

争论

对于 Alpine Linux, Hacker News 上争论还是比较激烈的。

首先是空间占用问题,小是 Alpine Linux 的最大优势,但是 Docker 的文件系统可以进行分层缓存,对于已经构建或者拉取过镜像的机器来说,每次的增量更新内容可能并不会很多。也就是说,如果所有镜像都使用相同的基础镜像,这个镜像在所有机器上都只会拉取一遍。

另外,Alpine Linux 使用了 musl,可能和其他 Linux 发行版使用的 glibc 实现会有所不同。在容器化中最可能遇到的是 DNS 问题,即 musl 实现的 DNS 服务不会使用 resolv.conf 文件中的 search 和 domain 两个配置,这对于一些通过 DNS 来进行服务发现的框架可能会遇到问题。

总结

Alpine Linux,一个只有 5M 的 Docker 镜像,它尽可能的简化了镜像的大小,易于分发,有着完善的包管理器和预编译的包。如果你需要一个干净、简洁的容器,开始尝试使用吧!


感谢魏星对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群InfoQ 好读者(已满),InfoQ 读者交流群(#2)InfoQ 好读者)。

2016-01-06 18:0040085

评论

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

pycharm的安装

工程师日月

5月月更

CMMI研究院刚刚推出两门新认证课程

高山

培训 CMMI 确保安全 确保安防

浅析微服务全链路灰度解决方案

阿里巴巴云原生

阿里云 微服务 云原生 灰度

云原生小课堂 | 如何打造一款软硬兼施、多功能、零损耗的云原生网络方案

York

云原生 性能 智能网卡vpc 容器网络方案

答题交互功能深入研究

CRMEB

网站开发进阶(六十一)详解js中Number()、parseInt()和parseFloat()的区别

No Silver Bullet

5月月更 Number() parseInt() parseFloat()

druid源码学习三-继续探究DruidDataSource类init方法

Nick

Apache Druid

自开发 Web 应用如何使用 SAP Customer Data Cloud 实现自定义登入功能

汪子熙

用户权限 第三方登录 SAP 登录验证 5月月更

web前端培训单元测试入门知识分享

@零度

单元测试 web前端开发

封装格式介绍

Loken

音视频 5月月更

java培训Nginx 快速入门

@零度

JAVA开发

探讨企业知识管理的困惑

小炮

企业知识管理

你肯定听说过requests,但你知道2022年有一个比 requests 还牛的爬虫库吗?

梦想橡皮擦

5月月更

增强现实(AR)技术在企业管理软件中的一个实际创新案例

汪子熙

AR SAP 虚拟现实 增强现实 5月月更

使用 OData 实施 SAP 系统与第三方系统集成的步骤概述

汪子熙

系统集成 SAP OData 5月月更 第三方系统

【大数据培训】面试中数据仓库重要概念

@零度

数据仓库 大数据开发

从服务端生成Excel电子表格(GcExcel + SpreadJS)

葡萄城技术团队

服务器端开发 前端表格控件 测试比较

【直播回顾】OpenHarmony知识赋能五期第四课——子系统音频解读

OpenHarmony开发者

OpenHarmony 多媒体

数据库连接池 -Druid 源码学习(三)

wjchenge

Druid 数据库连接池

Druid 连接池源码阅读 03

石小天

如何让你的 WordPress 网站更安全

海拥(haiyong.site)

WordPress 5月月更

专访朱雷:昔日的游戏少年,如今的Python工匠

图灵教育

Python 程序员 图灵访谈

前端生成PDF,让后端刮目相看

葡萄城技术团队

PDF pdf.js

druid 源码阅读 3——DataSource的结构(变量)

张大彪

C语言_结构体总结

DS小龙哥

5月月更

【刷题第七天】15 三数之和

白日梦

5月月更

从服务端生成Excel电子表格(Node.js+SpreadJS)

葡萄城技术团队

SpreadJS 前端表格

Docker下的OpenResty三部曲之二:细说开发

程序员欣宸

Docker 5月月更

【高并发】高并发环境下诡异的加锁问题(你加的锁未必安全)

冰河

并发编程 多线程 高并发 协程 异步编程

FlyFish2.0版本后端源码学习笔记

云智慧AIOps社区

前端 大前端 数据可视化 大屏可视化

Autograd解析|OneFlow学习笔记

OneFlow

人工智能 深度学习 数学原理 Autograd模块

Alpine Linux,一个只有5M的Docker镜像_语言 & 开发_金灵杰_InfoQ精选文章