把握行业变革关键节点,12 月 19 日 - 20 日,AICon北京站即将重磅启幕! 了解详情
写点什么

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:0040672

评论

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

.NET6新东西--Lambda优化

喵叔

11月日更

Python Qt GUI设计:QLabel标签类(基础篇—11)

不脱发的程序猿

Python PyQt GUI设计 QLabel标签类

别被你的框架框住了

Teobler

angular.js 大前端 React 框架 编程范式

【LeetCode】最长和谐子序列Java题解

Albert

算法 LeetCode 11月日更

CSS架构揭秘之Ant design

Augus

CSS 11月日更

【死磕Java并发】-----Java内存模型之总结

chenssy

11月日更 死磕 Java 死磕 Java 并发

[Pulsar] ChunkMessageID介绍及其原理

Zike Yang

Apache Pulsar 11月日更

自定义View:如何手写ViewGroup实现ListView效果

Changing Lin

11月日更

模块四作业:千万级学生管理系统的考试试卷存储方案

dean

架构实战营

参与tdengine开源的方式

williamcai

fork git 学习

Prometheus Exporter (三)容器信息监控

耳东@Erdong

container Prometheus exporter 11月日更 cAdvisor

Prometheus 都可以采集那些指标?-- 常用 Exporter 合集

耳东@Erdong

内容合集

网络安全—如何从IP源地址角度,预防DDoS攻击?

郑州埃文科技

【Flutter 专题】03 图解第一个程序 Hello World!

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

Go语言学习查缺补漏ing Day2

Regan Yue

Go 语言 11月日更

十分钟搞懂WebAssembly

俞凡

Wasm

数据库版本控制中间件flyway企业落地

小鲍侃java

11月日更

面试必备(背)--Go语言八股文系列!

微客鸟窝

Go 语言 八股文 11月日更

Hive数据抽样与存储格式详解

五分钟学大数据

11月日更

基于海思Hi3559A或者Atlas_200模块,Hi3559A(主)+Atlas_200(从)开发AI加速边缘计算主板的三种模式

Todd Wong

人工智能 深度学习

dart系列之:dart中的异步编程

程序那些事

flutter dart 程序那些事 11月日更

搞定大厂算法面试之leetcode精讲1.开篇介绍

全栈潇晨

算法面经

【架构实战营】模块四

衣谷

架构实战营

通过USB接入双目UVC协议外接人脸比对相机实现1:1比对开发

Todd Wong

数字化办公

Go 的 Panics 处理

baiyutang

golang 11月日更

前端开发:VS Code编辑器新建Vue文件自定义模板的方法

三掌柜

11月日更

Android C++系列:Linux文件系统(二)

轻口味

c++ android jni 11月日更

自动驾驶 传感器和计算硬件 易筋 ARTS 打卡 Week 76

John(易筋)

ARTS 打卡计划 arts

【Redis集群原理专题】(1)介绍一下常用的Redis集群机制方案的原理和分析

码界西柚

集群 redis cluster redis sentinel 11月日更

🍃【Spring专题】「实战系列」重新回顾一下异常重试框架Spring Retry的功能指南

码界西柚

spring 11月日更 Spring retry Guava retry

Redis 实现限流的三种方式

大数据技术指南

11月日更

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