【docker】Dockerfile

Dockerfile是什么

Dockerfile是一个文本文件,用于构建镜像
文本内容是构建镜像的的指令和说明

Docker镜像构建

  1. 编写dockerfile文件
    FROM 和 RUN
    FROM:指定源镜像
    RUN:设置在镜像中要执行的命令

    RUN <命令行命令>
    or RUN [“可执行文件”, “参数1”, “参数2”]

    dockerfile的指令每一次执行都会构建新的层
    过多的层会导致镜像变大
    多条RUN指令可以通过 \ 回车 &&链接为一条指令执行

  2. 在dockerfile所在目录执行

    docker build -t 镜像名称:镜像标签 .
    

    指令最后一个 . 是上下文路径

    • 上下文路径是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包
    • 上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

指令详解

COPY:复制指令,从上下文目录中复制文件或者目录到容器里指定路径
ADD:和COPY类似,目标文件如果是tar压缩文件,会自动复制并解压,缺点:如果不解压,会导致镜像构建缓存失效,构建速度变慢。
CMD:启动容器时生效,为启动的容器指定默认要运行的程序

  • 程序运行结束,容器也就结束
  • CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
  • 如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。

ENTRYPOINT:类似CMD

不会被docker run指定的命令行参数替代,命令行参数给该指令做参数
运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指令指定的程序
如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
CMD指定的参数是可选参数,外部没有传递参数时才有用

ENV:指定环境变量
ARG:仅仅在docker build过程中有用

构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖

VOLUME:定义匿名数据卷,在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

避免重要的数据,因容器重启而丢失,这是非常致命的。
避免容器不断变大。
在启动容器 docker run 的时候,我们可以通过 -v 参数修改挂载点。

EXPOSE:声明端口

帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

WORKDIR:指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。
USER:用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户

用户和用户组必须提前已经存在

HEALTHCHECK:用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
ONBUILD:用于延迟构建命令的执行。
LABEL:LABEL 指令用来给镜像添加一些元数据(metadata)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值