0
0
Lập trình
TT

Chuyển Đổi Từ Docker Sang Kubernetes: Ứng Dụng Đến Đám Mây

Đăng vào 7 tháng trước

• 4 phút đọc

Giới thiệu

Trong phát triển phần mềm hiện đại, Docker và Kubernetes thường được nhắc đến cùng nhau. Tuy nhiên, chúng giải quyết những vấn đề khác nhau. Docker giúp đóng gói ứng dụng vào các container, trong khi Kubernetes quản lý và chạy các container đó một cách tự động và đáng tin cậy trên nhiều máy chủ. Bài viết này sẽ hướng dẫn bạn cách đưa ứng dụng từ môi trường phát triển cục bộ lên đám mây bằng Kubernetes.

Mục tiêu

Trong hướng dẫn này, chúng ta sẽ thực hiện các bước sau:

  1. Xây dựng một ứng dụng đơn giản bằng Docker.
  2. Đẩy hình ảnh container lên Docker Hub (một kho lưu trữ).
  3. Triển khai ứng dụng trên Kubernetes.
  4. Mở rộng nó và khám phá cách Kubernetes quản lý ứng dụng.

Các yêu cầu trước khi bắt đầu

Trước khi bắt đầu, bạn cần cài đặt những công cụ sau:

  • Node.js phiên bản mới nhất.
    • Để kiểm tra, hãy chạy lệnh sau trong terminal:
    Copy
    node -v
  • Docker Desktop (hoặc Docker Engine).
    • Để kiểm tra, hãy chạy:
    Copy
    docker --version
  • Kubectl (CLI của Kubernetes).
    • Để kiểm tra, hãy chạy:
    Copy
    kubectl version --client
  • Một cụm Kubernetes.
    • Người mới có thể sử dụng Minikube (cụm cục bộ).
    • Hoặc kích hoạt Kubernetes trực tiếp trong Docker Desktop.
  • Tài khoản Docker Hub (miễn phí).

    Tôi thích nghĩ rằng Docker Hub giống như GitHub cho các hình ảnh container.

Tạo một ứng dụng Node.js đơn giản

Chúng ta sẽ tạo một ứng dụng Node.js đơn giản trả về một thông điệp.

Tạo thư mục dự án:

bash Copy
mkdir docker-k8s-demo
cd docker-k8s-demo

Tạo file app.js:

javascript Copy
const http = require('http');
const port = 3000;

const requestHandler = (req, res) => {
  res.end('Hello from Docker and Kubernetes!');
};

const server = http.createServer(requestHandler);

server.listen(port, () => {
  console.log(`Server running on port ${port}`);
});

Tạo file package.json:

json Copy
{
  "name": "docker-k8s-demo",
  "version": "1.0.0",
  "main": "app.js",
  "dependencies": {}
}

Tại thời điểm này, chúng ta đã có một ứng dụng Node.js đơn giản.

Viết Dockerfile

Dockerfile là một tệp văn bản đơn giản (không có phần mở rộng, thường được đặt tên là Dockerfile) cho biết Docker cách xây dựng một hình ảnh. Nó nằm ở thư mục gốc của dự án.

Tạo file Dockerfile:

dockerfile Copy
# Bắt đầu từ hình ảnh cơ bản Node.js
FROM node:18-alpine

# Đặt thư mục làm việc bên trong container
WORKDIR /usr/src/app

# Sao chép các tệp dự án vào container
COPY package*.json ./
COPY app.js ./

# Cài đặt các phụ thuộc
RUN npm install

# Mở cổng ứng dụng
EXPOSE 3000

# Khởi động ứng dụng
CMD ["node", "app.js"]

Xây dựng hình ảnh:

bash Copy
docker build -t myapp:1.0 .
  • -t myapp:1.0 → đặt tên cho hình ảnh là myapp với phiên bản 1.0.
  • . có nghĩa là “sử dụng Dockerfile trong thư mục này.”

Nếu lệnh này chạy thành công, bạn sẽ thấy thông báo thành công trên terminal.

Chạy container Docker:

bash Copy
docker run -p 3000:3000 myapp:1.0

Truy cập http://localhost:3000. Bạn sẽ thấy:

Copy
Hello from Docker and Kubernetes!

Đẩy hình ảnh lên Docker Hub

Kubernetes sẽ không biết về hình ảnh cục bộ của bạn—nó cần lấy nó từ một kho lưu trữ.

Đăng nhập vào Docker Hub:

bash Copy
docker login

Bạn nên thấy thông báo thành công trên terminal.

Gán nhãn hình ảnh của bạn với tên người dùng Docker Hub:

bash Copy
docker tag myapp:1.0 your-username/myapp:1.0

Đẩy hình ảnh lên:

bash Copy
docker push your-username/myapp:1.0

Bây giờ hình ảnh của bạn đã công khai trên Docker Hub, sẵn sàng cho Kubernetes.

Triển khai trên Kubernetes

Một triển khai Kubernetes cần một tệp YAML mô tả những gì cần chạy.

Tạo deployment.yaml:

yaml Copy
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: your-username/myapp:1.0
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 3000
  type: LoadBalancer

Áp dụng (chạy trên terminal):

bash Copy
kubectl apply -f deployment.yaml

Kiểm tra các pod:

bash Copy
kubectl get pods

Bạn sẽ thấy ba pod đang chạy trong cửa sổ terminal của bạn.

Kiểm tra dịch vụ:

bash Copy
kubectl get service myapp-service
  • Nếu sử dụng Docker Desktop hoặc Kubernetes trên đám mây, bạn sẽ nhận được một IP bên ngoài.
  • Nếu sử dụng Minikube:
bash Copy
minikube service myapp-service

Điều này sẽ mở ứng dụng trong trình duyệt của bạn.

Mở rộng ứng dụng với Kubernetes

Trong ví dụ trên, chúng ta đã mở rộng lên ba bản sao. Khi một hệ thống hoặc ứng dụng phát triển, cần nhiều bản sao hoặc phiên bản của nó hơn để có thể mở rộng hiệu quả với nhu cầu. Điều này có thể được thực hiện dễ dàng bằng cách chạy lệnh sau với số lượng bản sao bạn cần:

bash Copy
kubectl scale deployment myapp-deployment --replicas=5

Kubernetes sẽ tự động tạo thêm hai pod nữa.

Kết luận

Quy trình này—xây dựng bằng Docker, triển khai bằng Kubernetes—là nền tảng của các ứng dụng cloud-native. Docker đảm bảo tính nhất quán giữa các môi trường, và Kubernetes đảm bảo độ tin cậy trong sản xuất.

💡 Thích bài viết này? Hãy kết nối với tôi!

  • 🔗 Kết nối với tôi trên LinkedIn
  • 📧 Gửi email cho tôi

Tôi rất muốn nghe ý kiến và phản hồi của bạn. Tôi cũng rất mở lòng cho các hợp tác về bài viết kỹ thuật, tài liệu hoặc các bài báo white paper!

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