docker-dockerfile

docker-dockerfile

丁起男 103 2022-09-21

docker-dockerfile

dockerfile是用来构建docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本

一般的,dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时指令

基础

  • 每条保留字指定都必须为大写字母,且后面要跟至少一个参数
  • 指令按照从上到下,顺序执行
  • #表示注释
  • 每条指令都会创建一个新的镜像并对镜像进行提交

执行流程

  1. docker从基础镜像运行一个容器
  2. 执行一条指令并对容器做出修改
  3. 执行类似docker commit的操作提交一个新的镜像层
  4. docker再基于刚提交的镜像运行一个新容器
  5. 执行dockerfile中的下一条指令直到所有指令都执行完成

保留字

保留字 作用
FROM 基础镜像,当前新镜像是基于哪个镜像的,指定一个已存在的镜像作为模板,第一条指令必须是FROM
MAINTAINER 镜像维护者的姓名和邮箱地址
RUN 容器构建时需要运行的命令,有shell格式和exec格式,RUN是在docker build时运行。因为每个指令都会在docker上新建一层,过多的层会造成镜像膨胀。可用使用&&\减少命令数量
EXPOSE 当前容器对外暴露的端口,在docker run -P时,会自动映射EXPOSE端口
WORKDIR 指定工作目录,在镜像构建的过程中,每一个RUN命令都是新建一层。只有WORKDIR创建的目录才会一直存在
USER 该镜像以什么样的用户去执行,如果不指定,默认root
ENV 用来在构建镜像过程中设置变量环境,语法:ENV key value
ARG 与ENV作用一致。不过作用域不一样。ARG设置的环境变量仅在dockerfile内有效,也就是说只有docker build的过程中有效,构建好的镜像内不存在此环境变量
LABEL 用来给镜像添加一些元数据
ADD 将宿主机目录下的文件拷贝进镜像且会自动处理url和解压tar压缩包
COPY 类似ADD,拷贝文件和目录到镜像中。语法COPY 源路径 目标路径
VOLUME 容器数据卷,用于数据保存和持久化。
CMD 容器启动后要干的事。有shell格式、exec格式和参数列表格式(在指定了ENTRYPOINT后)。可用有多个CMD指令,但之后最后一个生效。CMD会被docker run之后的参数替换。CMD是在docker run时运行
ENTRYPOINT 用来指定一个容器启动时要运行的命令,类似CMD命令,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令参数会被当作参数送给ENTRYPOINT指令指定的程序
ONBUILD 延迟构建的命令执行。配置当所创建的镜像作为其他新创建的基础镜像时,所执行的操作指令
HEALTHCHECK 用于指定某个程序或者指令来监控docker容器服务的运行状态

docker build

语法

docker build [选项] 路径

常用选项说明

  • –build-arg=[]:设置镜像创建时的变量
  • –lablel=[]:设置镜像使用的元数据
  • -f:指定要使用的dockerfile路径
  • –force-rm:设置镜像过程中删除中间容器
  • –rm:设置镜像成功后删除中间容器
  • -m:设置最大内存
  • –no-cache:创建镜像的过程中不使用缓存
  • –pull:尝试去更新镜像的新版本
  • –squash:将dockerfile中的所有操作缩为一层
  • –quiet、-q:安静模式,成功后只输出镜像id
  • –tag、-t:镜像的名字及标签,通常为name:tag或name的格式,可用设置多个
  • -m:设置内存最大值