告别“在我的机器上能运行”:使用 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

Back to Blog

相关文章

阅读更多 »

构建 Write-Once 发布流水线

问题在于,撰写内容是最容易的部分。将其在各平台上持续发布——使用正确的 metadata、图片、标签、canonical URLs 和更新……