2022-10-04
班门弄斧
00

目录

简介
指令解析
LABEL
FROM
ENV
RUN
ADD
COPY
ENTRYPOINT
总结

简介

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

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

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

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

指令解析

LABEL

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

  • 示例

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

dockerfile
# 作者名 LABEL author.name="DingDangDog" # 作者邮箱 LABEL author.email="[email protected]" # 项目名 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脚本,常见用法是安装一些三方工具包,以拓展镜像支持的功能。如:以一个基本的linux镜像为基础,可以使用RUN指令安装node,使其具有node环境,并支持node相关指令。

ADD

  • 基础作用:将指定文件/文件夹添加到镜像中。

COPY

  • 基础作用:将指定文件/文件夹拷贝到镜像中,功能与ADD指令有重合部分。

ENTRYPOINT

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

总结

  1. 基础简简单单。
  2. 镜像很大,细心的大佬能发现,jar包只有不到20M,构建出来的镜像却有500M+,这是因为镜像内不止有你放进去的jar包,还包含jdk等众多运行所需环境,甚至还有一些不必要的环境,这就需要你精通Docker后再来优化了(或者使用其他优化过的基础镜像)。
  3. Docker 🐂 🍺!
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:DingDangDog

本文链接:

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