Docker微容器 Alpine Linux

简介

使用 Docker 创建容器时,基础镜像通常选择 Ubuntu 或 Centos,不管哪个镜像的大小都在 100MB 以上。

Alpine Linux 是一个面向安全的轻型的 Linux 发行版。

Alpine Linux 采用了 musl libcbusybox 以减小系统的体积和运行时资源消耗。

在保持瘦身的同时,Alpine Linux 还提供了自己的包管理工具 apk。

关键的是,相比于其他 Linux 的 Docker 镜像,它的容量非常小,仅仅只有 5MB。

Alpine Linux 的官网:

http://www.alpinelinux.org/

https://pkgs.alpinelinux.org/packages

下面使用 Alpine 镜像,来制作 nginx 容器。

制作 Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
# vim Dockerfile

FROM alpine:latest
MAINTAINER zhanghao zhanghao@wenzuo.net

# 下面指令可替换软件源为清华镜像源, 并更新软件包缓存, 然后安装 nginx
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories \
&& apk --update add nginx

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

用 Dockerfile 创建镜像

1
docker build -t zhanghao/nginx .

用创建好的镜像启动容器

确认镜像信息

1
docker images

Alpine 的镜像不到 5MB,用 Alpine 作为基础镜像的 nginx 镜像不到 7MB。

启动容器

1
docker run --name my-alpine-nginx -d -p 80:80 zhanghao/nginx

问题点

  1. Alpine Linux 使用了 musl,可能和其他 Linux 发行版使用的 glibc 实现会有些不同。
  2. musl 实现的 DNS 服务不会使用 resolv.conf 文件中的 search 和 domain 两个配置,通过 DNS 来进行服务发现时需要注意。

后记

Alpine Linux 的最大优势是小,有消息说 Docker 官方镜像将会使用 Alpine Linux 替换 Ubuntu。