0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Hướng Dẫn Chi Tiết Dockerize Dự Án Java Spring Boot Sử Dụng MySQL và Redis

Đăng vào 3 ngày trước

• 4 phút đọc

Cập Nhật Gần Nhất: 10/11/2024

Chào các bạn! 👋👋

Những ngày cuối năm miền Bắc thật lạnh, và hôm nay mình sẽ tiếp tục với series học Docker và CI/CD. Bài viết này sẽ hướng dẫn các bạn cách Dockerize một dự án Java Spring Boot sử dụng MySQL và Redis.

Clone Source Code

Trước tiên, hãy clone source code của mình từ nhánh master. Trong bài viết này, chúng ta sẽ chỉ tập trung vào thư mục docker-java-spring-boot-mysql-redis.

Chạy Thử Trên Local

Khi Dev

Dự án của chúng ta là một ứng dụng CRUD cho người dùng, và dữ liệu sẽ được lưu vào MySQL. Ngoài ra, chúng ta cũng sẽ có tính năng đăng nhập và đăng xuất, với phiên làm việc được lưu trữ trong Redis.

Nếu máy tính của bạn chưa cài đặt Java 17, MySQL hoặc Redis, các bạn có thể theo dõi bài viết này để có cái nhìn tổng quát.

Trước khi chạy, hãy kiểm tra xem các công cụ cần thiết đã được cài đặt chưa bằng các lệnh sau:

bash Copy
java --version
curl localhost:3306
curl localhost:6379

Chú ý: Nếu cổng của MySQL hoặc Redis của bạn khác, hãy thay đổi cho phù hợp.

Tại tệp src/main/java/resources/application.properties, bạn sẽ cần cập nhật các thông tin cho đúng với cấu hình máy của mình:

  • Ứng dụng sẽ chạy trên cổng 8081.
  • Tên database là java_test với thông tin tài khoản là root/rootpass.
  • Tài khoản đăng nhập vào ứng dụng là user/Password1.

Bạn cũng có thể chạy scrip trong tệp db.sql để tạo bảng dữ liệu cần thiết trong database.

Sau đó, hãy chạy dự án:

bash Copy
./gradlew bootRun

Mở trình duyệt và truy cập vào địa chỉ http://localhost:8081, sau đó đăng nhập với tài khoản user/Password1. Bây giờ bạn có thể thử thêm, sửa, xoá một vài người dùng và kiểm tra xem mọi thứ hoạt động ổn không nhé!

Xây Dựng Ứng Dụng

Khi các bạn đã kiểm tra mọi thứ ổn định, bước tiếp theo là chúng ta sẽ sản xuất một file JAR để ứng dụng có thể chạy tốt hơn và sẵn sàng cho việc triển khai vào môi trường sản xuất.

Để xây dựng dự án, bạn chạy lệnh:

bash Copy
./gradlew build

Sau khi quá trình xây dựng hoàn tất, bạn sẽ thấy hai file JAR nằm trong thư mục build/libs. Bạn có thể chạy thử ứng dụng bằng lệnh:

bash Copy
java -jar demo-0.0.1-SNAPSHOT.jar

Một lần nữa, hãy chắc chắn rằng bạn có thể truy cập vào http://localhost:8081 để thử nghiệm ứng dụng.

Dockerize Ứng Dụng

Bước 1: Dockerize với Build Ngoài, Chạy Trong

Tùy chọn đầu tiên cho việc Dockerize dự án Java là xây dựng JAR ở môi trường ngoài, sau đó đưa vào trong Docker image và chạy nó. Để thực hiện điều này, hãy tạo một tệp Dockerfile với nội dung sau:

dockerfile Copy
FROM openjdk:17-jdk-alpine3.14

WORKDIR /app
COPY ./build/libs/demo-0.0.1-SNAPSHOT.jar app.jar
CMD ["java","-jar","app.jar"]

Tiếp tục với quá trình build image:

bash Copy
docker build -t java-spring:v1 .

Sau đó tạo tệp docker_application.properties trong root folder dự án với cấu hình cần thiết cho ứng dụng trong container.

Bước 2: Tạo docker-compose.yml

Tiếp theo, bạn cần tạo tệp docker-compose.yml để dễ dàng chạy ứng dụng cùng với MySQL và Redis:

yaml Copy
version: '3.7'

services: 
  app:
    image: java-spring:v1
    restart: always
    ports:
      - "8081:8081"
    volumes:
      - ./docker_application.properties:/app/application.properties:ro
    depends_on:
      - db
      - redis

  db:
    image: mysql:8
    restart: always
    volumes:
      - ./.docker/data/db:/var/lib/mysql
      - ./db.sql:/docker-entrypoint-initdb.d/db.sql:ro
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: demo_app

  redis:
    image: redis:6-alpine
    restart: always
    volumes:
      - ./.docker/data/redis:/data

Bước 3: Chạy Docker Compose

Bây giờ, hãy chạy ứng dụng:

bash Copy
docker compose up -d

Sau khi ứng dụng đã khởi động, hãy quay lại trình duyệt của bạn và truy cập http://localhost:8081 một lần nữa để kiểm tra mọi thứ.

Xây Dựng + Chạy Trong Docker

Nếu bạn muốn không cần cài đặt Java trên máy của mình, bạn có thể xây dựng và chạy tất cả trong Docker. Đầu tiên, hãy down ứng dụng:

bash Copy
docker compose down

Chỉnh sửa tệp Dockerfile để xây dựng và chạy trong một môi trường hoàn toàn trong Docker:

dockerfile Copy
FROM openjdk:17-jdk-alpine3.14 as build
WORKDIR /app
COPY . .
RUN ./gradlew build -x test

FROM openjdk:17-jdk-alpine3.14 as production
WORKDIR /app
COPY --from=build /app/build/libs/demo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]

Cuối cùng, hãy xây dựng lại image và chạy ứng dụng như trước:

bash Copy
docker build -t java-spring:v2 .
docker compose up -d

Tối Ưu Image Size

Bây giờ, hãy tối ưu hóa kích thước image bằng cách sử dụng multi-stage build, giữ lại chỉ file JAR cần thiết cho runtime. Sửa đổi Dockerfile như sau:

dockerfile Copy
FROM eclipse-temurin:17-jdk-alpine as build
WORKDIR /app
COPY . .
RUN ./gradlew build -x test

FROM eclipse-temurin:17-jre-alpine as production
WORKDIR /app
COPY --from=build /app/build/libs/demo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]

Khi bạn quay lại kiểm tra kích thước của các image, bạn sẽ thấy rằng kích thước của image đã giảm đáng kể.

Kết Luận

Hy vọng bài viết này đã cung cấp cho các bạn kiến thức và kỹ năng cần thiết để Dockerize dự án Java Spring Boot của mình. Hãy áp dụng những gì bạn đã học vào dự án thực tế và trở thành một lập trình viên tự chủ hơn. Cảm ơn các bạn đã theo dõi! Hẹn gặp lại trong các bài viết tiếp theo! 👋
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào