Container hóa Spring Boot: Triển khai nhất quán mọi nước

Đăng ngày: 16-10-2025 18:26
DockercontainerizationDocker ComposecontainerSpring BootDockerfileTriển khai ứng dụngMicroservices

Chào mừng bạn đến với bài viết thứ 13 trong chuỗi bài giới thiệu về Spring và Spring Boot. Hôm nay, chúng ta sẽ khám phá cách container hóa một ứng dụng Spring Boot. Việc này giú giải quyết bài toán triển khai ứng dụng một cách nhất quán trên các môi trường khác nhau.

Container hóa là gì? Nó là một phương pháp đóng gói ứng dụng và tất cả các phụ thuộc của nó. Tất cả được đóng gói trong một container. Container chạy một cách độc lập với hệ điều hành. Docker là nền tảng container hóa phổ biến nhất hiện nay.

Dockerfile: Hướng dẫn tạo container

Dockerfile là một tập tin văn bản. Nó chứa các hướng dẫn để tạo ra một Docker image. Docker image là một bản sao chép của ứng dụng và các phụ thuộc của nó. Chúng ta sẽ bắt đầu với một Dockerfile đơn giản cho ứng dụng Spring Boot.


FROM openjdk:17-jdk-slim

WORKDIR /app

COPY target/*.jar app.jar

ENTRYPOINT ["java", "-jar", "app.jar"]

Giải thích các dòng lệnh:

  • FROM openjdk:17-jdk-slim: Sử dụng base image là OpenJDK 17. Sử dụng biến thể slim để giảm kích thước image.
  • WORKDIR /app: Thiết lập thư mục làm việc bên trong container.
  • COPY target/*.jar app.jar: Sao chép file JAR từ thư mục target vào container.
  • ENTRYPOINT ["java", "-jar", "app.jar"]: Chỉ định lệnh chạy khi container khởi động.

Sau khi tạo Dockerfile, bạn cần build image. Sử dụng lệnh sau trong terminal:


docker build -t my-spring-boot-app .

Lệnh này sẽ build image với tên là my-spring-boot-app. Dấu chấm (.) chỉ định Dockerfile nằm trong thư mục hiện tại.

Docker Compose: Kết hợp ứng dụng và CSDL

Docker Compose là một công cụ để quản lý nhiều container cùng lúc. Nó sử dụng một tập tin YAML để định nghĩa các service, network, và volume.

Giả sử, ứng dụng Spring Boot của bạn kết nối đến một cơ sở dữ liệu PostgreSQL. Bạn có thể sử dụng Docker Compose để chạy cả ứng dụng và cơ sở dữ liệu cùng nhau.

Dưới đây là một ví dụ về tập tin docker-compose.yml:


version: "3.8"
services:
  db:
    image: postgres:13
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
      POSTGRES_DB: mydb
    ports:
      - "5432:5432"
  app:
    image: my-spring-boot-app
    ports:
      - "8080:8080"
    depends_on:
      - db
    environment:
      SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/mydb
      SPRING_DATASOURCE_USERNAME: myuser
      SPRING_DATASOURCE_PASSWORD: mypassword

Giải thích:

  • version: "3.8": Phiên bản của Docker Compose.
  • services: Định nghĩa các service.
  • db: Service cho cơ sở dữ liệu PostgreSQL.
  • image: postgres:13: Sử dụng image PostgreSQL phiên bản 13.
  • environment: Các biến môi trường cho PostgreSQL.
  • ports: Map port 5432 từ container ra máy chủ.
  • app: Service cho ứng dụng Spring Boot.
  • image: my-spring-boot-app: Sử dụng image đã build trước đó.
  • depends_on: Chỉ định ứng dụng phụ thuộc vào service db.
  • SPRING_DATASOURCE_URL, SPRING_DATASOURCE_USERNAME, SPRING_DATASOURCE_PASSWORD: Các biến môi trường để kết nối đến PostgreSQL.

Bạn có thể khởi chạy tất cả các service bằng lệnh:


docker-compose up -d

Lệnh này sẽ tạo và khởi chạy các container theo định nghĩa trong tập tin docker-compose.yml. Tùy chọn -d chạy các container trong background.

Đảm bảo tính nhất quán

Container hóa giú đảm bảo tính nhất quán giữa các môi trường. Một khi ứng dụng được container hóa, nó sẽ chạy giống nhau bất kể là trên máy phát triển, máy chủ test, hay máy chủ production. Điều này giảm thiểu rủi ro lỗi và giú đẩy nhanh quá trình triển khai.

Bằng cách sử dụng Docker và Docker Compose, bạn có thể dễ dàng quản lý và triển khai ứng dụng Spring Boot của mình. Hy vọng bài viết này giú bạn hiểu rõ hơn về quy trình này.

Kết luận

Container hóa ứng dụng Spring Boot với Docker là một bước quan trọng để đảm bảo tính nhất quán trong quá trình triển khai. Docker Compose giú đơn giản hóa việc quản lý các ứng dụng phức tạp với nhiều service. Hãy bắt đầu thực hành ngay hôm nay để tận hưởng những lợi ích mà container hóa mang lại!

0 Bình luận