Dockerfile保留字指令介绍以及实例演示

Dockerfile保留字指令

保留字指令 含义
FROM 基础镜像,表示当前镜像是基于哪个镜像的
MAINTAINER 镜像维护者的姓名和邮箱地址
RUN 容器构建时需要运行的命令
EXPOSE 当前容器对外暴露的端口号
WORKDIR 指定容器创建后,终端默认登录进来的工作目录
ENV 在构建过程中设置环境变量
ADD 将宿主机目录下的文件拷贝到镜像中
※:ADD命令会自动处理URL和解压tar压缩包
COPY 类似于ADD,拷贝文件和目录到镜像中
VOLUME 容器数据卷,用于数据保存、数据持久化和数据共享
CMD 指定容器启动时要运行的命令
※:Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
ENTRYPOINT 指定容器启动时要运行的命令
※:ENTRYPOINT和CMD一样,都是在指定容器启动命令及参数
ONBUILD 父镜像被子镜像继承后,父镜像的ONBUILD被触发

指令实例

Base镜像(scratch)

Docker hub中99%的镜像都是通过在base镜像中安装和配合需要的软件构建出来的。

Docker hub中centos7的Dockerfile:

FROM scratch
ADD centos-7-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="20181006"

CMD ["/bin/bash"]

自定义centos镜像

  1. 通过docker hub上centos镜像创建的centos容器有以下特点:
    默认工作路径是/;
    默认不支持vim;
    默认不支持ifconfig;
    Dockerfile保留字指令介绍以及实例演示
  2. 自定义mycentos镜像使其具有以下特点:
    登陆后的默认工作路径为:/root;
    支持vim命令;
    支持ipconfig命令;
  3. 编写Dockerfile:
# 设置基础镜像
FROM centos
# 设置当前镜像的维护者姓名和邮件
MAINTAINER NullPointerException<[email protected]>

# 设置环境变量
ENV MYPATH /root
# 设置默认工作路径
WORKDIR $MYPATH

# 安装 vim
RUN yum -y install vim
# 安装 net工具
RUN yum -y install net-tools

# 设置对外暴露的端口号
EXPOSE 8088

# 打印默认工作路径的环境变量
CMD echo $MYPATH

CMD echo "build success ^.^"

CMD /bin/bash
  1. build Dockerfile
docker build -f /myDocker/Dockerfile -t mycentos:1.0 .

查看build好的mycentos镜像:
Dockerfile保留字指令介绍以及实例演示

  1. 运行mycentos容器:
docker run -it --name mycentos_container mycentos:1.0

Dockerfile保留字指令介绍以及实例演示

通过上图可以看到自定义的mycentos跟预期的完全一致???