Cách Chạy Java trong một Container Docker

Xin chào các bạn đang học lập trình! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của Docker và Java. Là người thầy công nghệ máy tính gần gũi của bạn, tôi ở đây để hướng dẫn bạn từng bước trong cuộc phiêu lưu này. Vậy, hãy mang theo mũ bảo hiểm ảo của bạn, và cùng tôi lao vào!

Docker Setting - Java

Lợi Ích của Việc Sử Dụng Container Docker để Chạy Ứng Dụng Java

Trước khi chúng ta bắt đầu lập mã, hãy nói về lý do chúng ta lại phải quan tâm đến Docker. Hãy tưởng tượng bạn đang nướng bánh quy (hãy ở lại với tôi, tôi hứa rằng điều này liên quan đến lập trình). Bạn có công thức hoàn hảo, nhưng khi bạn cố gắng nướng chúng ở nhà bạn bè, chúng lại ra sai. Lò nướng khác, kết quả khác, phải không? Đó là điều tương tự có thể xảy ra với phần mềm.

Docker giải quyết vấn đề này bằng cách tạo ra một môi trường nhất quán cho ứng dụng Java của bạn. Nó giống như có một lò nướng ma thuật di động luôn nướng bánh quy của bạn hoàn hảo, bất kể bạn ở đâu. Dưới đây là một số lợi ích chính:

  1. Nhất quán: Ứng dụng Java của bạn chạy như nhau ở mọi nơi.
  2. Tách biệt: Các ứng dụng không can thiệp vào nhau.
  3. Di động: Dễ dàng di chuyển giữa môi trường phát triển, kiểm tra và sản xuất.
  4. Tăng trưởng: Nhanh chóng tạo ra nhiều phiên bản của ứng dụng của bạn.
  5. Quản lý phiên bản: Dễ dàng quản lý các phiên bản khác nhau của ứng dụng và các phụ thuộc của nó.

Cách Chạy Java trong Docker Sử Dụng Ảnh Cơ Sở Java?

Được rồi, bây giờ hãy làm cho đôi tay của chúng ta bẩn (tất nhiên là ảo). Chúng ta sẽ bắt đầu với cách đơn giản nhất để chạy Java trong Docker bằng cách sử dụng các ảnh cơ sở Java chính thức.

Trước tiên, hãy chắc chắn rằng bạn đã cài đặt Docker trên máy tính của bạn. Nếu bạn chưa cài đặt, hãy truy cập trang web Docker và làm theo hướng dẫn cài đặt của họ.

Bây giờ, hãy tạo một chương trình Java đơn giản. Mở trình soạn thảo văn bản yêu thích của bạn và gõ vào mã này:

public class HelloDocker {
public static void main(String[] args) {
System.out.println("Hello, Docker!");
}
}

Lưu tệp này với tên HelloDocker.java. Bây giờ, hãy biên dịch nó:

javac HelloDocker.java

Điều này sẽ tạo ra tệp HelloDocker.class. Bây giờ, chúng ta đã sẵn sàng để sử dụng Docker! Mở terminal của bạn và chạy:

docker run --rm -v "$PWD":/app -w /app openjdk:11 java HelloDocker

Hãy phân tích lệnh này:

  • docker run: Điều này yêu cầu Docker chạy một container.
  • --rm: Điều này xóa container sau khi nó thoát.
  • -v "$PWD":/app: Điều này gắn kết thư mục hiện tại của bạn vào thư mục /app trong container.
  • -w /app: Điều này đặt thư mục làm việc trong container là /app.
  • openjdk:11: Đây là ảnh cơ sở Java chúng ta sử dụng.
  • java HelloDocker: Đây là lệnh để chạy chương trình Java của chúng ta.

Nếu mọi thứ diễn ra tốt đẹp, bạn sẽ thấy "Hello, Docker!" được in ra trong terminal của bạn. Chúc mừng! Bạn vừa chạy chương trình Java đầu tiên của mình trong một container Docker!

Cách Sử Dụng Dockerfile để Tạo Ảnh Java Tùy Chỉnh?

Bây giờ chúng ta đã có nền tảng cơ bản, hãy nâng cấp một bước. Chúng ta sẽ tạo một ảnh Docker tùy chỉnh cho ứng dụng Java của mình bằng cách sử dụng một Dockerfile.

Tạo một tệp mới có tên Dockerfile (không có phần mở rộng) trong cùng thư mục với tệp Java của bạn, và thêm nội dung sau:

FROM openjdk:11
WORKDIR /app
COPY HelloDocker.java .
RUN javac HelloDocker.java
CMD ["java", "HelloDocker"]

Hãy phân tích điều này:

  • FROM openjdk:11: Điều này xác định ảnh cơ sở của chúng ta.
  • WORKDIR /app: Điều này đặt thư mục làm việc trong container.
  • COPY HelloDocker.java .: Điều này sao chép tệp Java của chúng ta vào container.
  • RUN javac HelloDocker.java: Điều này biên dịch tệp Java của chúng ta.
  • CMD ["java", "HelloDocker"]: Điều này xác định lệnh để chạy khi container khởi động.

Bây giờ, hãy xây dựng ảnh tùy chỉnh của chúng ta:

docker build -t my-java-app .

Và chạy nó:

docker run my-java-app

Bạn nên thấy "Hello, Docker!" lần nữa. Nhưng lần này, chúng ta đã tạo ra ảnh Docker tùy chỉnh của riêng mình!

Các Mẹo Quan Trọng khi Thiết lập Java trong Docker

Khi chúng ta kết thúc hành trình Docker, hãy qua một số mẹo quan trọng cần nhớ:

Mẹo Mô Tả
Sử dụng ảnh cơ sở chính thức Luôn bắt đầu với các ảnh Java chính thức từ Docker Hub
Giữ ảnh nhỏ Sử dụng các ảnh dựa trên Alpine để có kích thước nhỏ hơn
Sử dụng xây dựng nhiều giai đoạn Tách biệt môi trường xây dựng và chạy để có ảnh cuối cùng nhỏ hơn
Không chạy dưới root Sử dụng lệnh USER để chuyển sang một người dùng không phải root
Sử dụng biến môi trường Làm cho các container của bạn có thể cấu hình
Tối ưu hóa cho缓存 Sắp xếp các hướng dẫn trong Dockerfile từ ít thay đổi nhất đến nhiều thay đổi nhất

Nhớ rằng, như việc học bất kỳ kỹ năng mới nào, việc thành thạo Docker đòi hỏi sự thực hành. Đừng nản lòng nếu mọi thứ không hoạt động hoàn hảo lần đầu tiên. Hãy tiếp tục thử nghiệm, học hỏi, và quan trọng nhất, hãy vui vẻ!

Như chúng ta thường nói trong thế giới lập trình, "Mong rằng mã của bạn không có lỗi và các container của bạn luôn chạy!" Chúc các bạn lập trình vui vẻ, những người chủ tương lai của Docker!

Credits: Image by storyset