2022-10-04
班门弄斧
00

目录

简介
指令解析
LABEL
FROM
ENV
RUN
COPY
ADD
WORKDIR
ENTRYPOINT
EXPOSE
VOLUME
总结
赞助请求V3

简介

使用docker简单来说就三步:1.构建镜像、2.获取镜像、3.基于镜像启动容器。大多数人工作中可能只会用到后两步,但真正学会docker第一步也是必不可少的!

构建镜像离不开Dockerfile,本文就来解析Dockerfile中各种指令的作用。

提示:本文基于本人使用经验编写,如有错误欢迎指正,附【官方Dockerfile参考文档】!

之前写过一个简单的实例,可以参考:Dockerfile构建Springboot镜像

指令解析

LABEL

  • 基础作用:添加镜像的一些自定义说明,如:作者、时间、镜像描述等等一些自己觉得有必要的东西。

  • 示例

示例中的key是自定义的,如果你觉得author.name没必要,完全可以改成author,这是完全自定义的。

dockerfile
# 作者名 LABEL author.name="DingDangDog" # 作者邮箱 LABEL author.email="dddogx@qq.com" # 项目名 LABEL project.name="cashbook-server" # 项目版本 LABEL project.version="0.0.1" # 项目描述 LABEL project.description="this project is cashbook's server"

FROM

  • 基础作用:以某个镜像为基础,构建自定义镜像。如:FROM openjdk:8-jdk:以openjdk镜像的8-jdk版本为基础。

  • 高级使用:有时我们会发现一个Dockerfile文件中有个多个FROM指令,这既是高阶使用。使用多FROM指令可以完成多阶段编译,每一条FROM指令都是一个构建阶段,多条FROM就是多阶段构建,虽然最后生成的镜像只能是最后一个阶段的结果,但是,能够将前置阶段中产生的文件拷贝到后边的阶段中,这就是多阶段构建的最大意义。

ENV

  • 基础作用:设置环境变量。可以在编译时就设置一些环境变量的默认值,在镜像内部的容器中可以读到这些环境变量值,如现在大多数前端node项目使用的process.env.***

  • 拓展:环境变量在启动容器的命令中也可以指定,并会覆盖构建脚本Dockerfile中的默认值。如:docker run --env env=dev -d -p 8888:8080 balance,其中--env env=dev就是设置环境变量env的值为dev

RUN

  • 基础作用:运行一些脚本,一般是sh脚本,常见用法是安装一些三方工具包,以拓展镜像支持的功能。如更新 apt-get 并安装某些工具包:
Dockerfile
RUN apt-get update && apt-get install -y package-name

COPY

  • 基础作用:将指定文件/文件夹拷贝到镜像中,如:
Dockerfile
COPY ./local-dir /app/

ADD

  • 基础作用:将指定文件/文件夹添加到镜像中。类似于 COPY,但功能更强大,可以从 URL 复制文件并自动解压缩。如:
Dockerfile
ADD https://example.com/file.tar.gz /app/

WORKDIR

  • 设置工作目录,即在镜像中后续执行命令时的默认路径。

ENTRYPOINT

  • 基础作用:镜像作为容器启动时,执行的脚本/可执行文件等。一般用于最终启动服务的脚本,如:ENTRYPOINT [ "node", "./dist/main.js" ]

与 CMD 不同的是,ENTRYPOINT 指令的参数不会被 Dockerfile 中的 CMD 覆盖,而是作为 ENTRYPOINT 的参数。

EXPOSE

  • 声明容器运行时监听(暴露)的端口,如:EXPOSE 8080

VOLUME

  • 声明匿名数据卷,用于持久化数据。如:VOLUME /data

总结

以上这些指令是 Dockerfile 中常用的一些指令,可以根据具体需求灵活使用,要想体会指令的实际作用,还需要你自己动手取实践!

赞助请求V3

建站因为热爱,生活需要Money,请屏幕前的大佬动动您发财的小手,点击一次以示鼓励,祝您生活愉快!

PS:就目前的访问量,即便每个访客都点一次广告,收入也不足以支付运营成本。如果看不到广告,可能是网络原因或被拦截了,那就算了吧。再次祝您生活愉快~~

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:DingDangDog

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!