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 的缩写,让容器启动后在后台运行,而不是占用当前的终端窗口

启动成功

相关推荐
小满、2 小时前
对象住哪里?——深入剖析 JVM 内存结构与对象分配机制
java·jvm·#java对象分配·#hotspot实现
How_doyou_do2 小时前
模态框的两种管理思路
java·服务器·前端
m0_748248022 小时前
C++ 异常处理全解析:从语法到设计哲学
java·c++·word
仟濹2 小时前
IDEA 软件下载 + 安装 | 操作步骤
java·ide·intellij-idea
毕设源码-赖学姐2 小时前
【开题答辩全过程】以 法院信访投诉平台为例,包含答辩的问题和答案
java·eclipse
依_旧2 小时前
MySQL下载安装配置(超级超级入门级)
java·后端
淘源码d3 小时前
什么是医院随访系统?成熟在用的智慧随访系统源码
java·spring boot·后端·开源·源码·随访系统·随访系统框架
回忆是昨天里的海3 小时前
k8s部署dashboard ui管理平台
云原生·容器·kubernetes
程序猿阿越3 小时前
Kafka源码(七)事务消息
java·后端·源码阅读