告别“在我的机器上能运行”:使用 Docker 的 Spring Boot 与 PostgreSQL
发布: (2026年1月16日 GMT+8 20:07)
3 min read
原文: Dev.to
Source: Dev.to
介绍
当我开始学习 Java 应用的容器化时,显而易见,最大的收益不仅是把应用打包,而是把 整个环境 都转化为代码。在本文中,我展示了仅用两个文件就能启动一个 Spring Boot + PostgreSQL 应用,无需在本地安装 Java、数据库或应用服务器。
后端开发中的经典问题
从事后端工作的人至少遇到过以下场景之一:
- “在我的机器上可以运行”
- 环境之间 Java 版本不一致
- 数据库手动配置
- 新成员的环境搭建时间长
容器化正好解决了这些问题:环境变得 可复现 且 可版本化。
Dockerfile
# Dockerfile
FROM eclipse-temurin:17-jdk
WORKDIR /app
COPY target/app.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]
Dockerfile 定义了:
- 使用的 Java 版本 (
eclipse-temurin:17-jdk); - 应用在容器内的路径 (
/app); - 启动方式 (
java -jar app.jar)。
docker‑compose.yml
# docker-compose.yml
version: "3.8"
services:
db:
image: postgres:15
environment:
POSTGRES_DB: appdb
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
ports:
- "5432:5432"
app:
build: .
ports:
- "8080:8080"
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/appdb
SPRING_DATASOURCE_USERNAME: user
SPRING_DATASOURCE_PASSWORD: pass
depends_on:
- db
在该文件中我们定义了:
- 一个用于 PostgreSQL 的容器;
- 一个用于 Spring Boot 应用 的容器;
- 连接所需的环境变量;
- 服务之间的通信(
app依赖db)。
使用单个命令启动全部服务:
docker compose up
好处
- 环境不再是配置难题。
- 新开发者的入职变得简单。
- CI/CD 流水线更加可预期。
- 基础设施成为可版本化的代码。
容器化不仅仅是 Docker;它关乎 可靠性、可移植性和标准化。当整个项目可以用文件来描述时,开发水平会提升。该模型可作为以下的基础:
- 微服务
- Kubernetes
- 云端现代架构
- 持续交付
而这一切都始于一个 Dockerfile 和一个 docker-compose.yml。