NestJS Enterprise Backend APIs · บทเรียน

การทำคอนเทนเนอร์ด้วย Docker และ Kubernetes

บรรจุแอปพลิเคชัน NestJS ลงในคอนเทนเนอร์ด้วย Docker และเรียนรู้กลยุทธ์การนำไปใช้งานเบื้องต้นด้วย Kubernetes สำหรับการโฮสต์ที่รองรับการขยายตัว

บทเรียน 5 จาก 612 ขั้นตอน

การทำคอนเทนเนอร์ด้วย Docker และ Kubernetes เป็นบทเรียน NestJS Enterprise Backend APIs ฟรีบน CoddyKit นี่คือบทเรียนที่ 5 จากทั้งหมด 6 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน NestJS Enterprise Backend APIs และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส NestJS Enterprise Backend APIs มีบทเรียนทั้งหมด 6 บทเรียน

บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ

Why Containerize Your App?

When building server applications like those with NestJS, consistency across environments is key. This is where containerization with Docker comes in.

Docker packages your application and all its dependencies into a single, isolated unit called a container. This ensures your app runs the same way everywhere.

  • Consistency: Works the same on dev, staging, prod.
  • Isolation: Prevents conflicts between apps.
  • Portability: Easily move apps between hosts.

Docker: Images & Containers

Let's understand the two core concepts in Docker:

  • A Docker Image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries, and settings. Think of it as a blueprint or a template.
  • A Docker Container is a runnable instance of an image. You can create, start, stop, move, or delete a container. Multiple containers can run from the same image.

Images are stored in registries like Docker Hub.

Crafting Your NestJS Dockerfile

A Dockerfile is a text file that contains all the commands a user could call on the command line to assemble an image. Here’s a basic one for a NestJS app:

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["node", "dist/main"]

  • FROM: Base image.
  • WORKDIR: Sets working directory.
  • COPY: Copies files.
  • RUN: Executes commands.
  • EXPOSE: Informs Docker that the container listens on the specified network ports at runtime.
  • CMD: Default command to execute.

Building Your Docker Image

Once you have your Dockerfile in your NestJS project's root, you can build an image from it. The docker build command processes the Dockerfile and creates a Docker image.

Open your terminal in the project root and run:

docker build -t my-nestjs-app .

  • -t my-nestjs-app: Tags the image with a name (my-nestjs-app).
  • .: Specifies the build context (current directory).

This command will execute each step in your Dockerfile, creating layers for your image.

Running Your NestJS Container

After building the image, you can run it as a container. The docker run command creates a new container and starts it.

Try running your NestJS app in a container:

docker run -p 3000:3000 my-nestjs-app

  • -p 3000:3000: Maps port 3000 on your host machine to port 3000 inside the container. This lets you access your app via http://localhost:3000.
  • my-nestjs-app: The name of the image you want to run.

Your NestJS application should now be running inside a Docker container!

Docker Compose for Local Dev

For applications with multiple services (like a NestJS backend and a PostgreSQL database), Docker Compose simplifies local development. It allows you to define and run multi-container Docker applications.

A docker-compose.yml file looks like this:

version: '3.8'
services:
api:
build: .
ports:
- '3000:3000'
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_DB: nest
POSTGRES_USER: user
POSTGRES_PASSWORD: pass

Run with: docker-compose up

Kubernetes: Orchestrating Containers

While Docker is great for packaging and running individual containers, managing many containers across multiple servers (especially in production) becomes complex. This is where Kubernetes (K8s) comes in.

Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.

  • Orchestration: Manages container lifecycle.
  • Scaling: Automatically adjusts resources.
  • Self-healing: Recovers from failures.

K8s Core: Pods

The smallest deployable unit in Kubernetes is a Pod. A Pod represents a single instance of a running process in your cluster. It can contain one or more containers (e.g., your NestJS app container and a sidecar logging container).

All containers in a Pod share the same network namespace, IP address, and storage volumes. This makes communication between them very efficient.

Example Pod definition:

apiVersion: v1
kind: Pod
metadata:
name: nestjs-pod
spec:
containers:
- name: nestjs-app
image: my-nestjs-app:latest
ports:
- containerPort: 3000

K8s Core: Deployments

A Deployment in Kubernetes provides declarative updates for Pods and ReplicaSets. You describe a desired state in a Deployment, and the Deployment Controller changes the actual state to the desired state.

Deployments are used to:

  • Create ReplicaSets to bring up Pods.
  • Roll out new versions of your application.
  • Roll back to an earlier Deployment revision.
  • Scale your application up or down.

Example Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
name: nestjs-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nestjs-app
template:
metadata:
labels:
app: nestjs-app
spec:
containers:
- name: nestjs-app
image: my-nestjs-app:latest
ports:
- containerPort: 3000

K8s Core: Services

While Deployments manage Pods, Services in Kubernetes define a logical set of Pods and a policy by which to access them. Services enable network access to a set of Pods.

Pods are ephemeral (they can be created/destroyed), so their IP addresses change. A Service provides a stable IP address and DNS name, acting as a load balancer for the Pods it targets.

Example Service:

apiVersion: v1
kind: Service
metadata:
name: nestjs-service
spec:
selector:
app: nestjs-app
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: LoadBalancer

This exposes your NestJS app externally.

Docker & K8s Knowledge Check

Which of the following is the correct command to build a Docker image from a Dockerfile located in the current directory, tagging it as my-app?

Recap: Dockerization & K8s

Great job! In this lesson, you've learned to containerize your NestJS application using Docker and explore basic deployment strategies with Kubernetes.

  • Docker helps package your app into consistent, isolated containers.
  • You learned to create Dockerfiles, build images, and run containers.
  • Docker Compose aids in local multi-service development.
  • Kubernetes orchestrates containers at scale, using Pods, Deployments, and Services.

These tools are fundamental for modern, scalable backend development!

เริ่มต้นได้ฟรี

เรียนรู้ TypeScript ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
20
บทเรียน
76

คำถามที่พบบ่อย

บทเรียน “การทำคอนเทนเนอร์ด้วย Docker และ Kubernetes” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การทำคอนเทนเนอร์ด้วย Docker และ Kubernetes” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส NestJS Enterprise Backend APIs ให้อัปเกรดเป็น CoddyKit PRO คอร์ส NestJS Enterprise Backend APIs มีบทเรียนทั้งหมด 6 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การทำคอนเทนเนอร์ด้วย Docker และ Kubernetes”

บรรจุแอปพลิเคชัน NestJS ลงในคอนเทนเนอร์ด้วย Docker และเรียนรู้กลยุทธ์การนำไปใช้งานเบื้องต้นด้วย Kubernetes สำหรับการโฮสต์ที่รองรับการขยายตัว คุณปฏิบัติ NestJS Enterprise Backend APIs ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน NestJS Enterprise Backend APIs หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน NestJS Enterprise Backend APIs บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 5 จากทั้งหมด 6 บทเรียน

บทเรียน “การทำคอนเทนเนอร์ด้วย Docker และ Kubernetes” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน NestJS Enterprise Backend APIs นี้ได้ไหม

ได้ บทเรียน NestJS Enterprise Backend APIs ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การทดสอบหน่วยและการทดสอบ E2E
  2. เฟรมเวิร์ก Hardhat และ Truffle
  3. การทดสอบประสิทธิภาพ API
  4. การทดสอบสัญญาอัจฉริยะระดับหน่วย
  5. การทำคอนเทนเนอร์ด้วย Docker และ Kubernetes
  6. การนำไปใช้งานบนเครือข่ายทดสอบและเครือข่ายหลัก
← กลับไปที่ NestJS Enterprise Backend APIs