基础镜像,当前新镜像是基于哪个镜像进行创建。即当前镜像继承自哪个镜像。Dockerfile 文件必须指定且需要在其他指令的前面指定。后续的指令都依赖于该指令指定的镜像。FROM指令指定的基础镜像可以是官方远程仓库中的,也可以位于本地仓库。该指令有两种格式:
FROM <image>
指定基础镜像为该image的最后修改的版本(镜像:latest)。或者:
FROM <image>:<tag>
指定基础镜像为该image的一个tag版本。
实例1:下面是 centos 的 Dockerfile 文件。
FROM scratch ADD centos-7-x86_64-docker.tar.xz / LABEL org.label-schema.schema-version="1.0" \ org.label-schema.name="CentOS Base Image" \ org.label-schema.vendor="CentOS" \ org.label-schema.license="GPLv2" \ org.label-schema.build-date="20190305" CMD ["/bin/bash"]
其中,FROM scratch 指定的 scratch 是所有镜像的基础镜像,所有 Dockerfile 文件必须直接或者间接的继承自 scratch ,类似于 java 中的 Object 类。
实例2:redis 4.0的部分Dockerfile文件内容。
FROM debian:stretch-slim # add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added RUN groupadd -r redis && useradd -r -g redis redis # grab gosu for easy step-down from root # https://github.com/tianon/gosu/releases ENV GOSU_VERSION 1.10 # ... RUN mkdir /data && chown redis:redis /data VOLUME /data WORKDIR /data COPY docker-entrypoint.sh /usr/local/bin/ ENTRYPOINT ["docker-entrypoint.sh"] EXPOSE 6379 CMD ["redis-server"]