什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?

简介: 什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?

Docker 是一种流行的容器化技术,它允许开发者将应用程序及其所有依赖项打包到一个轻量级、可移植的容器中,从而确保应用程序在任何环境中都能一致地运行。Docker 的出现极大地简化了应用程序的开发、测试和部署流程,提高了开发效率和系统的可维护性。

本文将详细介绍 Docker 的基本概念,并逐步指导你如何将一个 Spring Boot 庾用程序部署到 Docker 容器中。

1. 什么是 Docker?

Docker 是一个开源平台,用于自动化应用程序的部署、扩展和管理。它使用操作系统层面的虚拟化技术(称为容器化),而不是传统的虚拟机技术。Docker 容器是轻量级的,因为它们共享宿主机的操作系统内核,而不需要每个应用程序都运行一个完整的操作系统实例。

Docker 的主要组件:
  • 镜像(Image):Docker 镜像是一个轻量级、独立的、可执行的软件包,包含了运行某个软件所需的所有内容,包括代码、运行时环境、库、环境变量和配置文件。
  • 容器(Container):容器是镜像的运行实例。它可以被启动、停止、移动和删除。容器是隔离的,互不影响。
  • Dockerfile:Dockerfile 是一个文本文件,其中包含了一系列指令,用于自动构建 Docker 镜像。
  • Docker Hub:Docker Hub 是一个公共的镜像仓库,用户可以在这里上传、下载和分享 Docker 镜像。

2. 安装 Docker

在开始之前,你需要在你的开发机器上安装 Docker。Docker 提供了适用于多种操作系统的安装包,包括 Windows、MacOS 和 Linux。

  • Windows 和 MacOS:你可以从 Docker 官方网站 下载并安装 Docker Desktop。
  • Linux:你可以使用包管理器(如 aptyum)来安装 Docker。例如,在 Ubuntu 上,你可以运行以下命令:

    sudo apt-get update
    sudo apt-get install docker.io
    

3. 创建 Spring Boot 项目

假设你已经有一个 Spring Boot 项目。如果没有,你可以使用 Spring Initializr (https://start.spring.io/) 快速生成一个基础的 Spring Boot 项目。

4. 编写 Dockerfile

在项目的根目录下创建一个名为 Dockerfile 的文件。这个文件将包含构建 Docker 镜像所需的指令。

以下是一个简单的 Dockerfile 示例:

# 使用官方的 Java 运行时作为父镜像
FROM openjdk:11-jre-slim

# 设置工作目录
WORKDIR /app

# 将本地的 jar 文件复制到容器中
COPY target/my-app.jar /app/my-app.jar

# 暴露应用程序的端口
EXPOSE 8080

# 启动应用程序
ENTRYPOINT ["java", "-jar", "my-app.jar"]

在这个 Dockerfile 中:

  • FROM openjdk:11-jre-slim:指定基础镜像为 OpenJDK 11 的 JRE 版本。
  • WORKDIR /app:设置工作目录为 /app
  • COPY target/my-app.jar /app/my-app.jar:将本地的 my-app.jar 文件复制到容器中的 /app 目录。
  • EXPOSE 8080:暴露 8080 端口,这是 Spring Boot 应用程序默认的 HTTP 端口。
  • ENTRYPOINT ["java", "-jar", "my-app.jar"]:指定启动容器时运行的命令。

5. 构建 Docker 镜像

在项目的根目录下,运行以下命令来构建 Docker 镜像:

docker build -t my-spring-boot-app .
  • -t my-spring-boot-app:给镜像打标签,方便后续引用。
  • .:表示 Dockerfile 在当前目录。

构建过程可能需要一些时间,具体取决于你的网络速度和计算机性能。

6. 运行 Docker 容器

构建完成后,你可以使用以下命令来运行 Docker 容器:

docker run -d -p 8080:8080 my-spring-boot-app
  • -d:以后台模式运行容器。
  • -p 8080:8080:将容器的 8080 端口映射到主机的 8080 端口。
  • my-spring-boot-app:要运行的镜像名称。

7. 验证应用程序

打开浏览器,访问 http://localhost:8080,你应该能看到你的 Spring Boot 应用程序正在运行。

8. 推送镜像到 Docker Hub

如果你希望将构建好的镜像推送到 Docker Hub,以便在其他机器上使用,可以按照以下步骤操作:

  1. 登录 Docker Hub

    docker login
    
  2. 标记镜像

    docker tag my-spring-boot-app your-dockerhub-username/my-spring-boot-app
    
  3. 推送镜像

    docker push your-dockerhub-username/my-spring-boot-app
    

结论

通过本文,你已经了解了 Docker 的基本概念,并学会了如何将一个 Spring Boot 应用程序打包成 Docker 镜像并部署到 Docker 容器中。Docker 的使用不仅简化了应用程序的部署流程,还提高了应用程序的可移植性和一致性。希望本文能帮助你在实际项目中更好地利用 Docker 技术。

相关文章
|
5天前
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
151 91
|
6天前
|
存储 NoSQL Redis
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
|
7天前
|
XML Java 应用服务中间件
SpringBoot-打包&部署
SpringBoot 项目支持两种打包方式:WAR 包和 JAR 包。JAR 包内置 Tomcat,可直接运行;WAR 包需部署在外部 Tomcat 上。JAR 包通过 `mvn clean package` 打包并用 `java -jar` 运行,支持后台运行和 JVM 参数配置。WAR 包需修改 pom.xml 为 war 类型,移除嵌入式 Tomcat 依赖,添加 servlet-api,并继承 `SpringBootServletInitializer`。配置文件可通过外部 application.yml 覆盖,默认优先级高于 JAR 内部配置。
46 17
SpringBoot-打包&部署
|
13天前
|
JavaScript 前端开发 Docker
如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
通过这些步骤,可以确保您的Next.js应用在多核服务器上高效运行,并且在Docker环境中实现高效的容器化管理。
72 44
|
21天前
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
25天前
|
SQL Java Maven
docker部署apollo
docker部署apollo步骤
|
26天前
|
JavaScript 搜索推荐 Java
基于SpringBoot+Vue实现的家乡特色推荐系统设计与实现(源码+文档+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
57 8
|
26天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的高校食堂移动预约点餐系统设计与实现(源码+文档+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
70 3
|
26天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的冬奥会科普平台设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
45 0
|
26天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
38 2