跳到主内容
Ron {·} Hai

Dockefile

隆海

Dockefile

什么是Dockerfile

Dockerfile是一种文本文件,它包含了构建某个镜像的所有指令:

Dockerfile也是上述文件的官方推荐文件名。

编写规则

Dockerfile的指令汇总

文件指令详解

演示环境

FROM、LABEL、RUN指令

WORKDIR、ADD、COPY指今

ENV、CMD、ENTRYPOINT、EXPOSE指令

总结

多阶段构建

  1. 什么是多阶段构建
  1. 为什么需要多阶段构建 在每个阶段结束后,只需将必要的数据复制到下一个阶段,并舍弃上一个阶段中的多余信息

    • 减少镜像的体积
    • 加快构建的速度
    • 提升安全性
  2. 实现多阶段构建 需求:代码托管平台下载后端项目->docker中构建maven环境->maven打包->docker中构建运行环境 ->启动容器,运行项目。目录结构组织如下:

    myapplication

    ├── Dockerfile ├── pom.xml └── src

    3.1 传统Dockfile实现

    FROM maven: 3.8.3	 		# 基础镜像maven:3.8.3,java version=17
    WORKDIR /app     			# 设置容器的工作目录为 /app
    COPY ./pom.xml / app/  	#将宿主机当前日录下的pom.xmI拷贝到容器的工作日录中
    COPY ./src /app/src	 	# 将宿主机当前目录下的src目录拷贝到容器的工作目录中
    RUN mvn -f /app/pom.ml clean package -DskipTests=true	# 根据pom文件执行maven清理和打包命令(跳过测试)
    EXPOSE 8080 # 对外暴露8080端口
    CMD ["java", "-jar", "app/target/myapp.jar"]		# 透行jar包
    ニニニニニニニニニニニニニニニニニニニニニニニニニニニニニニニニニニ
    docker build -t build01 .	# build01镜像体积851MB,构建时长573S
    docker run -p 8080:8080 -it --rm build01	#--rm 代表容器停止后会自动被删

    3.2 多阶段构建实现

    FROM maven: 3.8.3 AS maven-build #阶段一:maven-build代表阶段名,不指定名字也可按序号引用,默认是0,from=0
    WORKDIR /app
    COPY ./pom.xml /app/
    COPY ./src /app/src
    RUN mvn -f /app/pom.ml clean package -DskipTest=true
    
    FROM openjdk:17-alpine #阶段二:基础镜像openjdk:17-alpine
    WORKDIR /app
    COPY --from=0  /app/target/myapp.jar /app # 把阶段一产生的jar包拷贝到本阶段/app目录中
    EXPOSE 8080
     CMD ['"java", "-jar", "/app/myapp. jar"]
  3. 指定构建阶段

    • 构建镜像时,不一定需要构建整个Dockfile的全部阶段,可以指定构建停留在某个阶段 实现命令

      docker build --target 构建名 -t 镜像名 .

当最终的项目需要经过一个环境处理得到结果在运行时用的另外一个环境,就用多阶段构建

分享
链接已复制,请打开微信粘贴分享复制失败,请手动复制链接
上一篇
Docker-Compose
下一篇
Docker容器转镜像