24

常用镜像记录

 3 years ago
source link: https://studygolang.com/articles/29474
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

基础镜像

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 ,目录结构如下:

JnqMVjA.png!web

微信截图_20200622082103.png

从文件目录上可以看出,集成的文件主要在 /binetc 目录下:

  • /bin 目录下主要放置一些常用命令

    juMzUzU.png!web

    微信截图_20200622082153.png

  • /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 命令(类似 centosyum 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

欢迎关注我们的微信公众号,每天学习Go知识

FveQFjN.jpg!web

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK