Dockerfile镜像构建

Dockerfile镜像构建

Dockerfile 是构建 Docker 镜像的文本格式配置文件,用一系列标准化指令描述镜像的构建步骤,是镜像的 "构建说明书"。

下面我以自己的 springboot 项目为例进行制作Dockerfile镜像

首先第一步需要对项目进行 package 打包

需要注意的是,采用可执行 JAR(Fat JAR)的打包配置方式,包含项目自身代码和所有第三方依赖,可直接通过 java -jar 命令独立运行(内置容器,无需外部依赖),pom.xml 需要配置的内容如下

xml 复制代码
<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <executions>
        <execution>
          <goals>
            <goal>repackage</goal>  <!-- 关键:重新打包,包含依赖 -->
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

此时再执行 mvn package,会将所有依赖打入 JAR,最终生成可执行 JAR,并存放在 target 目录下

第二步本地验证,在 JAR 包所在目录下执行命令:java -jar JAR包名称

本地验证通过后我们远程连接服务器进行实践

在 /opt 下创建一个 test 文件夹上传jar包

由于 springboot 项目的运行依赖于 JDK 环境,所以需要安装 JDK 基础镜像

这里我们使用离线安装方式,上传 JDK 镜像

将本地的 jdk.tar 离线镜像包加载到当前 Docker 环境中 docker load -i jdk.tar

然后编写配置文件 vi Dockerfile

bash 复制代码
FROM openjdk:8
WORKDIR /app
ADD ./docker-0.0.1-SNAPSHOT.jar /app/docker-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java", "-jar", "docker-0.0.1-SNAPSHOT.jar"]
  • FROM openjdk:8
    指定基础镜像为 openjdk:8,无需手动安装 Java 环境,直接复用官方做好的 Java 8,运行时作为镜像的底层基础
  • WORKDIR /app
    设置后续指令的工作目录为镜像内的 /app 目录,所有应用相关文件都放在 /app 下
  • ADD ./docker-0.0.1-SNAPSHOT.jar /app/docker-0.0.1-SNAPSHOT.jar
    将宿主机的 Java 应用 JAR 包复制到镜像中
    语法:ADD或COPY <宿主机文件路径> <镜像内目标路径>
  • ENTRYPOINT ["java", "-jar", "docker-0.0.1-SNAPSHOT.jar"]
    定义容器启动时的入口命令,当基于该镜像启动容器时,容器会自动执行命令 java -jar docker-0.0.1-SNAPSHOT.jar,即通过 Java 命令运行 Java 应用程序

执行 docker build -t test:1.0 . 命令,根据当前目录下的 Dockerfile 构建一个名为 test 标签为 1.0 的镜像,其中 -t 是 --tag 的缩写,用于给构建出的镜像打标签,方便后续识别和使用,需要注意的是 .(最后一个点)不可以省略,是 Docker 引擎在构建镜像时需要访问的文件目录

Docker 会读取当前目录的 Dockerfile,逐行执行其中的指令,每执行一条指令,都会生成镜像的一层,最终组合成完整镜像

构建成功后,通过 docker images 命令可以看到新生成的镜像

再执行 docker run test:1.0 -d 命令

基于 test:1.0 镜像创建一个容器,然后执行镜像中定义好的应用启动命令,最终让应用在容器中运行,-d 是 --detach 的缩写,让容器启动后在后台运行,而不是占用当前的终端窗口

启动成功

相关推荐
郑州光合科技余经理10 小时前
PHP构建:支撑欧美澳市场的同城生活服务平台开发
java·开发语言·数据库·uni-app·php·排序算法·生活
超级大只老咪17 小时前
数组相邻元素比较的循环条件(Java竞赛考点)
java
小浣熊熊熊熊熊熊熊丶17 小时前
《Effective Java》第25条:限制源文件为单个顶级类
java·开发语言·effective java
毕设源码-钟学长17 小时前
【开题答辩全过程】以 公交管理系统为例,包含答辩的问题和答案
java·eclipse
啃火龙果的兔子17 小时前
JDK 安装配置
java·开发语言
星哥说事17 小时前
应用程序监控:Java 与 Web 应用的实践
java·开发语言
派大鑫wink18 小时前
【JAVA学习日志】SpringBoot 参数配置:从基础到实战,解锁灵活配置新姿势
java·spring boot·后端
xUxIAOrUIII18 小时前
【Spring Boot】控制器Controller方法
java·spring boot·后端
Dolphin_Home18 小时前
从理论到实战:图结构在仓库关联业务中的落地(小白→中级,附完整代码)
java·spring boot·后端·spring cloud·database·广度优先·图搜索算法
醇氧18 小时前
org.jetbrains.annotations的@Nullable 学习
java·开发语言·学习·intellij-idea