Dockerfile

Dockerfile指令解析

指令

功能简介

FROM

指定构建新image是使用的基础image,通常必须是Dockerfile的第一个有效指令;定义一个基础镜像。

LABEL

附加到image之上的元数据,键值格式;定义一些元数据。

ENV

以键值格式设定环境变量,可被其后的指令所调用,且基于新生成的image运行的Container中也会存在这些变量。

RUN

以FROM中定义的image为基础环境运行指令命令,生成结果将作为新image的一个镜像层,并可由后续指令所使用。RUN后跟要执行的命令。

CMD

基于dockerfile生成的image运行的container时,CMD能够指定容器中默认运行的程序,因而其只应该定义一次。

ENTRYPOINT

类似于CMD指令的功能,但不能被命令行指定要运行的应用程序覆盖,且 ENTRYPOINT 指令为 exec 模式时与CMD共存时,CMD的内容将作为该指令中定义的程序的参数。

WORKDIR

相当于cd切换目录的命令,如果切换的那个地方没有哪个目录,则会自动创建一个目录。

COPY

相当于cp命令,复制主机上或者前一阶段构建结果中(需要使用–from选项)文件或目录生成新的镜像。

ADD

与COPY指令的功能相似,但ADD传输压缩包的时候,是可以解压的。

VOLUME

指定基于新生成的Image运行Container时期望作为volume使用的目录。

EXPOSE

指定基于新生成的lmage运行Container时期望 暴露的端口,但实际暴露与否取决于"docker run”命令的选项,支持TCP和UDP协议。

USER

为Dockerfile中该指令后面的RUN、CMD和ENTRYPOING指令中要运行的应用程序指定运行者身份UID,以及一个可选的GID。

注意:

  • dockerfile中add和copy推荐用哪个

优先使用 COPY:在大多数情况下,建议优先使用 COPY 指令。

使用 ADD 的情况:当你确实需要自动解压归档文件或者从 URL 下载文件时,可以使用 ADD 指令。但需要注意的是,由于 ADD 的行为较为复杂,使用时要谨慎,以免引入不必要的复杂性。

  • dockerfile中CMD与ENTRYPOINT区别是什么?

CMD可被命令行程序替代,ENTRYPOINT不会,且两者同时存在时,CMD的内容将作为ENTRYPOINT的参数

构建镜像命令格式

docker build -t 要打的镜像名:版本号 Dockerfile路径

实战案例

springboot-project/
├── target
│   └── your-project.jar  # 打包后的 JAR 文件
└── Dockerfile

# 使用基础镜像,这里选择 OpenJDK 17 作为基础镜像,你可以根据项目实际的 Java 版本需求进行调整
FROM openjdk:17-jdk-slim

# 设置工作目录,在镜像内部创建一个目录用于存放项目文件
WORKDIR /app

# 将本地项目的 target 目录下的 JAR 文件复制到镜像的工作目录中
COPY target/your-project.jar /app/

# 声明容器运行时需要暴露的端口,这里假设你的 Spring Boot 项目使用的是默认的 8080 端口
EXPOSE 8080

# 设置容器启动时要执行的命令,这里运行复制到镜像中的 JAR 文件
CMD ["java", "-jar", "your-project.jar"]

构建镜像

docker build -t your-image-name:your-tag .

 运行容器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值