Docker là gì? Container giải thích cho người mới bắt đầu

Chia sẻ bài viết

Mục lục
Docker là gì? Container giải thích cho người mới bắt đầu

Trả lời nhanh: Docker là công cụ đóng gói phần mềm kèm toàn bộ môi trường nó cần (thư viện, cấu hình, runtime) thành một container, chạy giống hệt nhau trên mọi máy Linux. Nó trị dứt căn bệnh kinh niên "máy em chạy được mà lên server lại lỗi": môi trường đi cùng phần mềm, không còn cảnh cài tay mỗi nơi một kiểu. Khác máy ảo: container dùng chung kernel với máy chủ, nhẹ hơn hàng chục lần, khởi động trong giây. Với người tự host, Docker là chìa khóa mở cả kho phần mềm: n8n, database, panel... đều phát hành dạng container cài-một-lệnh.

Cụm bài này đã dùng Docker chạy đủ thứ, n8n, Postgres, Uptime Kuma, và luôn kèm lời hứa 'khái niệm sẽ có bài riêng'. Đây là bài đó: Docker giải thích cho người chưa từng chạm, bằng ví dụ đời thường, đúng bốn khái niệm cần biết, và ranh giới thật thà giữa nơi Docker tỏa sáng với nơi nó chỉ làm mọi thứ rườm rà thêm.

Tóm tắt nhanh
  • Container = phần mềm + môi trường đóng chung một gói, chạy đâu cũng như nhau
  • Nhẹ vì dùng chung kernel máy chủ, khác máy ảo phải vác nguyên hệ điều hành riêng
  • Bốn khái niệm đủ dùng: image (khuôn), container (bản chạy), volume (dữ liệu bền), compose (cả cụm)
  • Giá trị lớn nhất với người tự host: kho phần mềm thế giới thành cài-một-lệnh

Căn bệnh Docker sinh ra để trị

Phần mềm không chạy một mình: nó cần đúng phiên bản runtime, đúng thư viện hệ thống, đúng biến cấu hình. Cài tay lên mỗi máy là mỗi lần gieo xúc xắc, server thiếu một gói, khác một phiên bản, và ra đời câu nói bất hủ "máy em chạy được mà". Docker đóng băng toàn bộ 'đúng' đó vào một gói: tác giả phần mềm mô tả môi trường một lần trong Dockerfile, build thành image, và từ đó mọi máy chạy image đó đều là một môi trường y hệt. Cái bạn nhận: cài n8n không cần biết n8n cần gì bên trong, nó tự mang theo hết.

Container vs máy ảo: nhẹ hơn nhờ dùng chung bếp

Máy ảo (VM) là căn hộ đầy đủ: mỗi VM vác nguyên một hệ điều hành, nặng vài GB, khởi động hàng chục giây; đổi lại cách ly tuyệt đối (chính chiếc VPS bạn thuê là một VM như thế, KVM). Container là phòng trong ký túc xá dùng chung bếp: các container chia nhau kernel của máy chủ, chỉ đóng gói phần trên (thư viện, app), nhẹ vài chục MB, khởi động dưới giây, một VPS 4 GB chạy chục container thảnh thơi. Hai tầng này cộng chứ không thay nhau: kiến trúc phổ thông nhất 2026 chính là VPS (VM) làm nền an toàn + Docker (container) xếp dịch vụ bên trên.

Bốn khái niệm - học đúng bốn là dùng được

  • Image, cái khuôn: gói bất biến chứa phần mềm + môi trường, tải từ kho chung Docker Hub: docker pull postgres:16. Số sau dấu hai chấm là phiên bản, ghim số cụ thể thay vì latest là thói quen tốt đầu tiên.
  • Container, bản chạy từ khuôn: docker run tạo một (hoặc mười) bản sống từ image. Triết lý quan trọng nhất: container là đồ dùng một lần, hỏng thì vứt tạo lại từ khuôn, không ai 'sửa chữa' container.
  • Volume, ngăn dữ liệu bền: vì container dùng-rồi-vứt, dữ liệu quý (database, cấu hình) phải nằm trong volume, sống sót qua mọi lần vứt-tạo lại. Quên volume cho database = bài học đau đầu tiên của mọi người mới.
  • Compose, bản thiết kế cả cụm: file YAML khai app + database + cache cùng lúc, một lệnh dựng cả dàn (bài Docker Compose trong cụm đi sâu kèm file mẫu).

Docker đáng dùng khi nào - và khi nào là thừa

Tỏa sáng: cài phần mềm bên thứ ba (n8n, database, monitoring, lý do số một của người tự host); chạy nhiều dịch vụ sạch sẽ trên một VPS; đồng nhất dev-staging-production; và làm nền cho các panel như Coolify. Thừa thãi: một app Node đơn giản duy nhất, PM2 cài thẳng nhẹ đầu hơn; máy quá yếu (RAM 512 MB); hay đóng gói thứ bạn không hiểu chỉ vì 'cho hiện đại'. Lộ trình một buổi tối: cài Docker theo bài checklist → chạy hello-world → dựng Postgres có volume → viết compose đầu tiên cho n8n, bốn nấc là đủ tự tin đi tiếp cả kho self-host.

Khi nào đáng dùng và khi nào là thừa

Tình huốngCó đáng dùng khôngVì sao
Một trang web tĩnh trên một máy chủThừaChép tệp lên là xong
Ứng dụng cần đúng phiên bản thư viện, chạy trên nhiều máyĐángĐây là bài toán nó sinh ra để giải
Chạy nhiều dịch vụ tự host trên một máy chủRất đángMỗi dịch vụ một hộp, không giẫm chân nhau
Cần dựng lại môi trường giống hệt sau khi hỏngRất đángMột tệp khai báo dựng lại toàn bộ
Đội chưa ai biết dùng, dự án gấpChưa đángHọc và vận hành là chi phí thật
Ứng dụng cần hiệu năng ổ đĩa tối đaCân nhắcCó thêm một lớp, cần cấu hình đúng để không mất tốc độ

Bốn khái niệm, học đúng bốn là dùng được

  • Ảnh: bản đóng gói sẵn của ứng dụng kèm mọi thứ nó cần. Giống một bản cài đặt.
  • Container: một bản ảnh đang chạy. Một ảnh chạy được nhiều container.
  • Vùng lưu trữ gắn ngoài: nơi giữ dữ liệu. Container xóa đi thì dữ liệu ở đây vẫn còn. Đây là khái niệm quan trọng nhất và hay bị bỏ qua nhất.
  • Tệp khai báo nhiều dịch vụ: mô tả cả cụm ứng dụng trong một tệp, chạy một lệnh là lên hết.

Ba lỗi người mới hay mắc

# 1. Khong tach du lieu ra ngoai container
#    Xoa container la mat sach du lieu. Luon dung vung luu tru gan ngoai.
docker volume ls
docker inspect TEN_CONTAINER | grep -A5 Mounts

# 2. Khong gioi han kich thuoc nhat ky
#    O dia day sau vai thang. Dat trong tep khai bao:
#      logging: { driver: json-file, options: { max-size: 10m, max-file: 3 } }
docker system df

# 3. Mo cong ra ca internet trong khi chi can noi bo
#    Sai:  ports: "5432:5432"      -> ca internet vao duoc co so du lieu
#    Dung: ports: "127.0.0.1:5432:5432"
ss -ltnp | grep -v 127.0.0.1

# Don dep dinh ky, anh cu chiem rat nhieu cho
docker system prune -a --volumes

Lỗi thứ ba là lỗi gây hậu quả nặng nhất: rất nhiều cơ sở dữ liệu bị dò và khai thác chỉ vì một dòng cấu hình mở cổng ra toàn bộ internet trong khi ứng dụng chỉ cần kết nối nội bộ.

Câu hỏi thường gặp

Docker có an toàn không? Container thoát ra ngoài được không?

Cách ly container tốt cho mục đích thường ngày nhưng mỏng hơn VM, vì vậy đồ không tin cậy đừng chạy chung máy đồ quan trọng, và quyền docker chỉ trao cho user tin cậy (tương đương root). Mô hình VPS-của-bạn + container-của-bạn là an toàn thực dụng.

Học Docker mất bao lâu?

Dùng được (chạy dịch vụ có sẵn bằng compose): một buổi tối theo lộ trình cuối bài. Thành thạo (tự viết Dockerfile tối ưu): vài tuần dùng thật, và bài Docker build chậm trong cụm là lớp học tiếp theo.

Docker trên Windows/Mac khác gì trên VPS Linux?

Trên Windows/Mac, Docker phải chạy qua một VM Linux ẩn, nặng máy và I/O chậm hơn. Trên VPS Linux, container chạy thẳng trên kernel, nhẹ và nhanh đúng thiết kế. Đó là lý do 'dev trên laptop, chạy thật trên VPS Linux' là cặp bài trùng.

Kubernetes có phải Docker phiên bản xịn không?

Không, Kubernetes là dàn nhạc trưởng điều phối container trên NHIỀU máy, cho đội lớn. Một-vài VPS: Docker + Compose là đúng cỡ; vác Kubernetes vào là mang dao mổ trâu giết gà, như bài Compose đã nói thẳng.

Hạ tầng NVMe Enterprise của TND
VPS ổ Enterprise U.2 NVMe, CPU xung cao, đặt tại Việt Nam
Docker mở kho phần mềm thế giới, chiếc VPS là mảnh đất cắm kho: TND VPS NVMe kéo image, bung layer, chạy volume database trên Enterprise U.2 NVMe RAID 10 nhanh gọn, Xeon Platinum xung cao cho từng container phản hồi lẹ. Gói 4-6 GB là cả cụm dịch vụ đầu tiên của bạn sống khỏe, bàn giao 5 phút, tối nay chạy hello-world.
Xem VPS ổ Enterprise U.2 NVMe tại Việt Nam

Bài viết liên quan