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

启动成功

相关推荐
2601_9620715711 分钟前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
名字还没想好☜39 分钟前
Docker 容器安全加固实战:非 root、只读根文件系统、drop capabilities 与最小攻击面
运维·安全·docker·容器·kubernetes
zww89491111 小时前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·eclipse
码--到成功2 小时前
Docker、Kubernetes安装系列 二
docker·容器·kubernetes
M--Y3 小时前
Docker镜像与仓库管理详解
docker·容器
mohesashou3 小时前
k8s的service
云原生·容器·kubernetes
starzy19903 小时前
虚拟化解决方案全景:软件虚拟化、硬件虚拟化与 Docker 的位置
运维·docker·容器
zww89491113 小时前
匿名树洞系统开发实战:从需求分析到部署指南
java·eclipse
黑马程序员毕设5 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
木井巳5 小时前
【BFS/DFS 解决 FloodFill 算法】太平洋大西洋水流问题
java·算法·leetcode·深度优先·广度优先·宽度优先·推荐算法