Springboot應用的Docker容器化部署學習
本文详细介绍了Springboot应用的Docker容器化部署学习,包括Spring Boot应用的基础搭建、Docker的基本使用和配置,以及如何将Spring Boot应用打包成JAR文件并通过Dockerfile构建镜像,最后展示了如何在本地和远程服务器上运行Docker容器。
Spring Boot应用简介
1.1 Spring Boot概述
Spring Boot 是由 Pivotal 团队提供的一个用于简化 Spring 应用初始搭建以及配置过程的框架。它通过一系列约定优于配置的方式,使得开发者可以快速搭建起一个独立运行的 Spring 应用。Spring Boot 的主要特点包括:
- 自动配置:Spring Boot 可以自动配置很多常见的场景,例如数据库连接、WebSocket 服务等。
- 起步依赖:通过在
pom.xml
或build.gradle
文件中添加相应的spring-boot-starter
依赖,可以快速加入所需的依赖库。 - 命令行界面:Spring Boot 应用可以通过
spring-boot-maven-plugin
或spring-boot-gradle-plugin
插件提供的命令行界面启动。 - 内置 web 服务器:Spring Boot 可以内置 Tomcat、Jetty 或者 Undertow 作为应用服务器。
Spring Boot 可以帮助开发者摆脱繁琐的配置过程,从而专注于业务逻辑的实现。
1.2 创建第一个Spring Boot应用
要创建一个简单的 Spring Boot 应用,首先需要设置项目环境。这里使用 Maven 来管理项目依赖。
1.2.1 使用Maven创建Spring Boot应用
在 pom.xml
文件中添加 Spring Boot 的父依赖和 Spring Web 依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
接下来,创建一个简单的 Controller 类:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@RestController
public class HelloController {
@GetMapping("/")
public String hello() {
return "Hello, Docker!";
}
}
}
1.2.2 使用Gradle创建Spring Boot应用
使用 Gradle 创建 Spring Boot 应用,可以在 build.gradle
文件中添加以下依赖:
plugins {
id 'org.springframework.boot' version '2.5.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
创建一个简单的 Controller 类,代码与 Maven 版本相同:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@RestController
public class HelloController {
@GetMapping("/")
public String hello() {
return "Hello, Docker!";
}
}
}
Docker基础入门
2.1 Docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包应用及其依赖关系到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker 使用客户端-服务器 (Client-Server) 架构模式,主要概念包括:
- 镜像 (Image):Docker 镜像是一个只读的模板,包含了应用的运行环境和依赖库。
- 容器 (Container):Docker 容器是在镜像上运行的一个或一组进程。容器从镜像创建,但镜像本身不包含任何动态数据。
- 仓库 (Repository):仓库是存放镜像文件的场所,可以理解为代码控制中的代码仓库。Docker Hub 是官方提供的仓库。
2.2 安装Docker
Docker 支持在多种操作系统上安装,包括 Linux、Windows 和 macOS。这里以 Linux 发行版为例,介绍安装步骤:
-
安装 Docker:
-
对于 Ubuntu,可以使用以下命令安装 Docker:
sudo apt-get update sudo apt-get install docker.io
-
对于 CentOS,可以使用以下命令安装 Docker:
sudo yum install docker sudo service docker start
-
-
安装完成后,可以验证 Docker 是否安装成功:
docker --version
2.3 Docker基本命令
Docker 提供了一系列基本命令用于镜像和容器的操作:
-
镜像操作:
docker images
:列出所有镜像docker pull <image-name>
:从 Docker Hub 拉取镜像docker build -t <tag-name> .
:根据 Dockerfile 构建镜像docker push <image-name>
:将镜像推送到 Docker Hub
- 容器操作:
docker ps
:列出正在运行的容器docker ps -a
:列出所有容器docker run -it <image-name>
:创建并运行容器docker stop <container-id>
:停止容器docker rm <container-id>
:删除容器
以下是一些具体的命令示例:
# 创建一个简单的 Ubuntu 容器
docker run -it ubuntu /bin/bash
# 列出正在运行的容器
docker ps
# 列出所有容器
docker ps -a
Spring Boot应用打包为可执行的JAR包
3.1 使用Maven打包Spring Boot应用
-
在
pom.xml
文件中添加spring-boot-maven-plugin
插件:<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
-
打包应用:
-
使用以下命令打包应用:
mvn clean package
- 打包完成后,可以在
target
目录下找到生成的 JAR 文件。
-
3.2 使用Gradle打包Spring Boot应用
-
在
build.gradle
文件中添加springBoot
插件:plugins { id 'org.springframework.boot' version '2.5.4' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'org.springframework.boot' version '2.5.4' }
-
打包应用:
-
使用以下命令打包应用:
./gradlew bootJar
- 打包完成后,可以在
build/libs
目录下找到生成的 JAR 文件。
-
Dockerfile编写
4.1 Dockerfile基本语法
Dockerfile 是一个文本文件,包含了一组指令,这些指令描述了如何构建一个 Docker 镜像。Dockerfile 的基本语法包括以下几个指令:
-
FROM:指定基础镜像。例如:
FROM openjdk:8-jdk-alpine
-
RUN:执行一条命令。例如:
RUN apk add --no-cache ca-certificates
-
COPY:从构建上下文文件系统复制文件到镜像。例如:
COPY target/demo-0.0.1-SNAPSHOT.jar /app.jar
-
CMD:定义容器启动时默认执行的命令。例如:
CMD ["java", "-jar", "/app.jar"]
-
EXPOSE:暴露容器运行时监听的端口。例如:
EXPOSE 8080
4.2 编写Dockerfile以支持Spring Boot应用
-
创建 Dockerfile:
-
在项目根目录下创建一个
Dockerfile
文件,并添加以下内容:# 使用 openjdk 8 作为基础镜像 FROM openjdk:8-jdk-alpine # 设置工作目录 WORKDIR /app # 暴露应用端口 EXPOSE 8080 # 复制 JAR 文件到容器 COPY target/demo-0.0.1-SNAPSHOT.jar app.jar # 设置容器启动命令 CMD ["java", "-jar", "app.jar"]
-
构建镜像:
- 使用以下命令构建 Docker 镜像:
docker build -t springboot-demo .
-
构建并运行Docker容器
5.1 构建Docker镜像
-
使用 Dockerfile 构建镜像:
-
在项目的根目录下运行以下命令:
docker build -t springboot-demo .
-
构建完成后,可以使用
docker images
查看新构建的镜像:docker images
-
5.2 运行Docker容器
-
运行容器:
-
使用以下命令运行容器:
docker run -d -p 8080:8080 --name springboot-demo springboot-demo
-d
参数表示以守护进程方式运行容器。-p
参数将容器内的 8080 端口映射到主机的 8080 端口。--name
参数为容器指定一个名称。
-
-
验证容器运行状态:
-
使用以下命令查看正在运行的容器:
docker ps
- 访问
http://localhost:8080
查看应用是否正常运行。
-
部署到服务器
6.1 将Docker镜像推送至Docker Hub
-
登录 Docker Hub:
-
使用以下命令登录 Docker Hub:
docker login
-
-
推送镜像:
-
使用以下命令推送镜像到 Docker Hub:
docker push springboot-demo:latest
-
6.2 在服务器上拉取并运行Docker容器
-
拉取镜像:
-
在服务器上运行以下命令拉取镜像:
docker pull springboot-demo:latest
-
-
运行容器:
-
在服务器上运行以下命令运行容器:
docker run -d -p 8080:8080 --name springboot-demo springboot-demo
-
-
验证容器运行状态:
-
使用以下命令查看容器的日志:
docker logs springboot-demo
- 访问
http://<服务器IP>:8080
查看应用是否正常运行。
-
共同學習,寫下你的評論
評論加載中...
作者其他優質文章