命令总结:https://www.runoob.com/docker/docker-dockerfile.html
一、Dockerfile的组成
主体内容四部分:基础镜像信息、维护者信息、镜像操作指令、和容器启动时执行指令
构建镜像的基本步骤:(Nginx)
vim Dockerfile
FROM nginx
RUN echo '这是一个nginx镜像' > /usr/share/nginx/html/index.html
FROM 定制的镜像是基于FROM的镜像,基础镜像
RUN 执行后面的命令行
shell 格式:
RUN <命令行命令>
exec格式:
RUN ["可执行文件","参数1","参数2"]
注意:
Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大
FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
简化形式:
FROM centos
RUN yum -y install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& tar -xvf redis.tar.gz
&& 符号连接命令,这样执行后,只会创建 1 层镜像
构建镜像:
$ docker build -t nginx:v3 .
. 表示本次执行的上下文路径
二、指令说明
FROM 指定基础镜像,用于后续的指令构建
MAINTAINER 指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令)
LABEL 添加镜像的元数据,使用键值对的形式
RUN 在构建过程中在镜像中执行命令
CMD 指定容器创建时的默认命令 (可以被覆盖)
ENTRYPOINT 设置容器创建时的主要命令(不可以被覆盖)
EXPOSE 声明容器运行时监听的特定网络端口
ENV 在容器内部设置环境变量
ADD 将文件、目录或远程URL复制到镜像中
COPY 将文件或目录复制到镜像中
VOLUME 为容器创建挂载点或声明卷
WORKDIR 设置后续指令的工作目录
USER 指定后续指令的用户上下文
ARG 定义在构建过程中传递给构建器的变量,可使用 "docker build" 命令设置
ONBUILD 当该镜像被用作另一个构建过程的基础时,添加触发器
STOPSIGNAL 设置发送给容器以退出的系统调用信号
HEALTHCHECK 定义周期性检查容器健康状态的命令
SHELL 覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令