基礎(chǔ)鏡像
Scratch
空鏡像,也是源鏡像,本身鏡像不占空間。
市場(chǎng)上所有的鏡像都是基于它擴(kuò)展的。使用它構(gòu)建的鏡像大小幾乎和二進(jìn)制文件本身一樣大,適合運(yùn)行一個(gè)包含所有依賴的二進(jìn)制文件,如Golang 程序、無(wú)依賴的C程序等。
構(gòu)建一個(gè)centos鏡像:
FROM scratch
ADD centos-7-x86_64-docker.tar.xz /
CMD ["/bin/sh"]
構(gòu)建一個(gè)二進(jìn)制執(zhí)行文件的鏡像:
FROM scratch
ADD server /
CMD ["/server"]
Busybox
鏡像大?。?code>1.22MB
拉?。?code>docker pull busybox
Busybox在單一的可執(zhí)行文件中提供了精簡(jiǎn)的Unix工具集,可運(yùn)行于多款POSIX環(huán)境的操作系統(tǒng),由于BusyBox可執(zhí)行文件的文件比較小,使得它非常適合使用于嵌入式系統(tǒng)。
該鏡像也補(bǔ)充了一些常用的linux命令和基礎(chǔ)網(wǎng)絡(luò)配置,其構(gòu)建的Dockerfile如下:
FROM scratch
ADD busybox.tar.xz /
CMD ["sh"]
打開(kāi)busybox.tar.xz,目錄結(jié)構(gòu)如下:

從文件目錄上可以看出,集成的文件主要在/bin和etc目錄下:
-
/bin目錄下主要放置一些常用命令
微信截圖_20200622082153.png /etc目錄下補(bǔ)充了一些主機(jī),權(quán)限,網(wǎng)絡(luò)配置等信息。
Alpine
鏡像大小:2.67 MB
拉?。?code>docker pull alpine
| 版本號(hào) | 發(fā)布日期 | 支持結(jié)束日期 | Linux內(nèi)核版本 | 鏡像大小(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是一個(gè)由社區(qū)開(kāi)發(fā)的Linux操作系統(tǒng),該操作系統(tǒng)以安全為理念,面向x86路由器、防火墻、虛擬專用網(wǎng)、IP電話盒及服務(wù)器而設(shè)計(jì)。由于其體積小,通常用于提供快速啟動(dòng)時(shí)間的容器中。
官方鏡像地址
官網(wǎng)地址
它是生產(chǎn)環(huán)境上比較推薦使用的基礎(chǔ)鏡像,原因有以下幾點(diǎn):
- 包含基礎(chǔ)的
linux命令。 - 官方更新很快,社區(qū)活躍,漏洞較少。
- 支持目前市面上大部分
x86-64指令集架構(gòu)類型的機(jī)器。 - 還提供了可擴(kuò)展的包管理機(jī)制,讓你可以使用
apk add命令(類似centos的yum install)讓你div自己的鏡像。
在基礎(chǔ)鏡像上直接組裝,如果添加一個(gè)curl命令,那么你的dockerfile可以這么寫(xiě):
FROM alpine:3.12.0
RUN apk add --no-cache curl
CMD ["/bin/sh"]
Java鏡像
frolvlad/alpine-java
鏡像大?。?code>168.3MB
拉?。?code>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/"* && \
需要特殊注意的時(shí),該鏡像也是基于alpine基礎(chǔ)鏡像構(gòu)建起來(lái)的,Layer層次是alpine -> glibc - > jdk,有興趣的小伙伴可以深究下。
操作系統(tǒng)鏡像
Centos
鏡像大小: 71.4MB
拉?。?code>docker pull centos
Ubuntu
鏡像大小:27.27MB
拉?。?code>docker pull ubuntu
