基础镜像
Scratch
空镜像,也是源镜像,本身镜像不占空间。
市场上所有的镜像都是基于它扩展的。使用它构建的镜像大小几乎和二进制文件本身一样大,适合运行一个包含所有依赖的二进制文件,如Golang
程序、无依赖的C
程序等。
构建一个centos
镜像:
FROM scratch
ADD centos-7-x86_64-docker.tar.xz /
CMD ["/bin/sh"]
构建一个二进制执行文件的镜像:
FROM scratch
ADD server /
CMD ["/server"]
Busybox
镜像大小:1.22MB
拉取:docker pull busybox
Busybox
在单一的可执行文件中提供了精简的Unix
工具集,可运行于多款POSIX
环境的操作系统,由于BusyBox
可执行文件的文件比较小,使得它非常适合使用于嵌入式系统。
该镜像也补充了一些常用的linux
命令和基础网络配置,其构建的Dockerfile
如下:
FROM scratch
ADD busybox.tar.xz /
CMD ["sh"]
打开busybox.tar.xz
,目录结构如下:
从文件目录上可以看出,集成的文件主要在/bin
和etc
目录下:
-
/bin
目录下主要放置一些常用命令
/etc
目录下补充了一些主机,权限,网络配置等信息。
Alpine
镜像大小:2.67 MB
拉取:docker pull alpine
版本号 | 发布日期 | 支持结束日期 | Linux内核版本 | 镜像大小(x86-64) |
---|---|---|---|---|
3.2 | 2015-05-26 | 2017-05-01 | 3.18.xx | 2.45 MB |
3.3 | 2016-01-06 | 2017-11-01 | 4.1.xx | 2.29 MB |
3.4 | 2016-05-31 | 2018-05-01 | 4.4.xx | 2.28 MB |
3.5 | 2016-12-22 | 2018-11-01 | 4.4.xx | 1.88 MB |
3.6 | 2017-05-24 | 2019-05-01 | 4.9.xx | 1.92 MB |
3.7 | 2017-11-30 | 2019-11-01 | 4.9.xx | 2.01 MB |
3.8 | 2018-06-26 | 2020-05-01 | 4.14.xx | 2.1 MB |
3.9 | 2019-01-29 | 2020-11-01 | 4.19.xx | 2.63 MB |
3.10 | 2019-06-19 | 2021-05-01 | 4.19.xx | 2.66 MB |
3.11 | 2019-12-19 | 2021-11-01 | 5.4.xx | 2.76 MB |
3.12 | 2020-05-29 | 2022-05-01 | 5.4.xx | 2.67 MB |
Alpine Linux是一个由社区开发的Linux操作系统,该操作系统以安全为理念,面向x86
路由器、防火墙、虚拟专用网、IP电话盒及服务器而设计。由于其体积小,通常用于提供快速启动时间的容器中。
官方镜像地址
官网地址
它是生产环境上比较推荐使用的基础镜像,原因有以下几点:
- 包含基础的
linux
命令。 - 官方更新很快,社区活跃,漏洞较少。
- 支持目前市面上大部分
x86-64
指令集架构类型的机器。 - 还提供了可扩展的包管理机制,让你可以使用
apk add
命令(类似centos
的yum install
)让你div
自己的镜像。
在基础镜像上直接组装,如果添加一个curl
命令,那么你的dockerfile
可以这么写:
FROM alpine:3.12.0
RUN apk add --no-cache curl
CMD ["/bin/sh"]
Java镜像
frolvlad/alpine-java
镜像大小:168.3MB
拉取:docker pull frolvlad/alpine-java
JDK8
镜像,移除了一些JDk包中的源码,可视化等多余文件,Dockerfile
如下:
FROM frolvlad/alpine-glibc:alpine-3.9
ENV JAVA_VERSION=8 \
JAVA_UPDATE=202 \
JAVA_BUILD=08 \
JAVA_PATH=1961070e4c9b4e26a04e7f5a083f551e \
JAVA_HOME="/usr/lib/jvm/default-jvm"
RUN apk add --no-cache --virtual=build-dependencies wget ca-certificates unzip && \
cd "/tmp" && \
wget --header "Cookie: oraclelicense=accept-securebackup-cookie;" \
"http://download.oracle.com/otn-pub/java/jdk/${JAVA_VERSION}u${JAVA_UPDATE}-b${JAVA_BUILD}/${JAVA_PATH}/jdk-${JAVA_VERSION}u${JAVA_UPDATE}-linux-x64.tar.gz" && \
tar -xzf "jdk-${JAVA_VERSION}u${JAVA_UPDATE}-linux-x64.tar.gz" && \
mkdir -p "/usr/lib/jvm" && \
mv "/tmp/jdk1.${JAVA_VERSION}.0_${JAVA_UPDATE}" "/usr/lib/jvm/java-${JAVA_VERSION}-oracle" && \
ln -s "java-${JAVA_VERSION}-oracle" "$JAVA_HOME" && \
ln -s "$JAVA_HOME/bin/"* "/usr/bin/" && \
rm -rf "$JAVA_HOME/"*src.zip && \
rm -rf "$JAVA_HOME/lib/missioncontrol" \
"$JAVA_HOME/lib/visualvm" \
"$JAVA_HOME/lib/"*javafx* \
"$JAVA_HOME/jre/lib/plugin.jar" \
......省略若干
"$JAVA_HOME/jre/lib/oblique-fonts" && \
wget --header "Cookie: oraclelicense=accept-securebackup-cookie;" \
"http://download.oracle.com/otn-pub/java/jce/${JAVA_VERSION}/jce_policy-${JAVA_VERSION}.zip" && \
unzip -jo -d "${JAVA_HOME}/jre/lib/security" "jce_policy-${JAVA_VERSION}.zip" && \
rm "${JAVA_HOME}/jre/lib/security/README.txt" && \
apk del build-dependencies && \
rm "/tmp/"* && \
需要特殊注意的时,该镜像也是基于alpine
基础镜像构建起来的,Layer
层次是alpine -> glibc - > jdk
,有兴趣的小伙伴可以深究下。
操作系统镜像
Centos
镜像大小: 71.4MB
拉取:docker pull centos
Ubuntu
镜像大小:27.27MB
拉取:docker pull ubuntu