写点什么

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

评论

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

深入浅出java虚拟机

AI乔治

Java 架构 性能优化 JVM JVM原理

DB-Engines 9月数据库排名:ClickHouse一路猛冲,Redis坐稳第七

华章IT

MySQL 数据库 redis Clickhouse

XSKY全新一代SDS一体机五大场景之存储+灾备

XSKY星辰天合

架构师课作业 - 第十二周

Tulane

喷一喷坑爹的面向UI编程

架构师修行之路

大数据管理:构建数据自己的“独门独院”

华为云开发者联盟

大数据 数据湖

产业互联网成区块链与数字货币的分水岭

CECBC

区块链 数字货币 产业互联网

正在走进现实的“飞行汽车”,能否颠覆地面交通?

脑极体

一个银行客户经理的“变形记”

华为云开发者联盟

人工智能 金融科技

又踩Maven的两个坑

xiaoboey

maven Unknown lifecycle phase settings.xml 无效 PowerShell

LeetCode题解:225. 用队列实现栈,两个队列, 压入 - O(n), 弹出 - O(1),JavaScript,详细注释

Lee Chen

大前端 LeetCode

深兰科技的征途,AI的赛场与战场

脑极体

内存型数据库Redis,是如何实现持久化的?

Zhongger

redis

或许是史上最好的AQS源码分析了,你确定要错过?!

InfoQ_d2212957090d

快来看看!AQS 和 CountDownLatch 有怎么样的关系?

程序员小航

Java AQS 源码阅读 CountDownLatch JUC

浅析LR.Net工作流引擎

Philips

敏捷开发 工作流 软件开发流程 开发工具

Docker私有化部署gitlab gitlab-runner

Leon

gitlab 持续集成 runner

云图说 | 一分钟带你扫盲云容器黑话

华为云开发者联盟

容器 节点 集群

CPU中的程序是怎么运行起来的

良知犹存

cpu

太赞了!华为工程师终于总结出了Linux归纳笔记,提供开放下载

小Q

实战解读丨Linux下实现高并发socket最大连接数的配置方法

华为云开发者联盟

Linux TCP socket 高并发

用 Python 实现一个简易版的 Pong 游戏 (一)

Matrix Chan

Python Turtle Python游戏

鼓舞人心!主席支持数字经济!央行数字货币研究所为世界制定区块链相关国际标准

CECBC

区块链 金融

抽象可能从未停止过

架构师修行之路

系统设计 抽象 抽象思维

Redis 数据同步机制--主从模式

是老郭啊

redis 主从配置 主从同步 redis主从 主从复制

为什么企业自主开发软件时,都会使用统一的模块化框架式开发平台?

Learun

敏捷开发 程序设计 开发工具 软件设计 技术方案

深入Spring Security魔幻山谷-获取认证机制核心原理讲解

朱季谦

spring security

使用amoeba实现mysql读写分离

小Q

Java MySQL 编程 程序员

万字长文 | 23 个问题 TCP 疑难杂症全解析

yes

TCP 计算机网络

【基础架构】不同场景下的数据存储技术,你用对了吗?

嘉为蓝鲸

网络 存储 系统 raid 磁盘挂载

北京城市副中心将试点法定数字货币

CECBC

数字货币 货币

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