❤️ AZDIGI chính thức cập nhật hệ thống blog mới hoàn chỉnh. Tuy nhiên có thể một số bài viết bị sai lệch hình ảnh, hãy ấn nút Báo cáo bài viết ở cuối bài để AZDIGI cập nhật trong thời gian nhanh nhất. Chân thành cám ơn.

Nếu bạn đang quản lý VPS và từng gặp tình huống: cài một ứng dụng thì xung đột thư viện, nâng cấp PHP thì web khác chết, hay muốn thử nghiệm mà sợ ảnh hưởng server chính, thì Docker chính là thứ bạn cần.

Đây là Bài 1 trong serie Docker từ Zero đến Hero trên VPS. Mình sẽ giải thích Docker là gì, tại sao nó lại quan trọng với người dùng VPS, và những khái niệm cốt lõi bạn cần nắm trước khi bắt tay vào thực hành.

Docker — đóng gói ứng dụng vào container
Docker giúp đóng gói ứng dụng và dependencies vào container, chạy nhất quán trên mọi môi trường.

Docker là gì?

Nôm na thì Docker là một công cụ giúp bạn đóng gói ứng dụng cùng toàn bộ môi trường chạy của nó vào một “hộp” độc lập, gọi là container.

Ví dụ bạn có một quán phở. Để nấu được phở, bạn cần bếp, nồi, gia vị, nước dùng, bánh phở : rất nhiều thứ. Bình thường, bạn phải setup từng thứ một trong bếp (giống như cài đặt ứng dụng trên server). Nhưng nếu có ai đó đóng gói sẵn toàn bộ , bếp, nồi, gia vị, công thức , vào một cái thùng, bạn chỉ cần mở thùng ra là nấu được ngay. Đó chính là Docker container.

Về mặt kỹ thuật, Docker là một nền tảng containerization mã nguồn mở. Nó cho phép bạn:

  • Đóng gói ứng dụng + dependencies vào một container
  • Chạy container đó trên bất kỳ máy nào có Docker, không cần lo môi trường khác nhau
  • Cô lập các ứng dụng với nhau: app A không ảnh hưởng app B
  • Tái tạo môi trường giống hệt nhau mọi lúc, mọi nơi

Docker ra đời năm 2013 và nhanh chóng thay đổi hoàn toàn cách người ta triển khai ứng dụng. Từ startup nhỏ đến Google, Netflix, Spotify, tất cả đều dùng container.

Container vs Virtual Machine – khác nhau thế nào?

Trước Docker, khi muốn cô lập ứng dụng, người ta dùng Virtual Machine (VM): máy ảo. Vậy container khác VM ở điểm nào?

Virtual Machine (VM)

VM giả lập nguyên một máy tính, bao gồm cả hệ điều hành riêng. Nếu bạn chạy 3 VM trên VPS, nghĩa là bạn có 3 hệ điều hành chạy đồng thời. Mỗi VM ngốn RAM, CPU, ổ cứng riêng, rất nặng.

Container

Container chia sẻ kernel của hệ điều hành host. Nó chỉ đóng gói ứng dụng và những gì ứng dụng cần, không cần cả một OS riêng. Nhờ vậy, container nhẹ hơn rất nhiều, khởi động trong vài giây thay vì vài phút.

So sánh Container và Virtual Machine
Container chia sẻ kernel với host OS, nhẹ hơn VM rất nhiều — khởi động vài giây thay vì vài phút.

Bảng so sánh

Tiêu chíContainer (Docker)Virtual Machine
Khởi độngVài giâyVài phút
Dung lượngVài chục MB → vài trăm MBVài GB
Hệ điều hànhDùng chung kernel với hostMỗi VM có OS riêng
Hiệu năngGần như nativeThấp hơn do overhead ảo hoá
Cô lậpCô lập ở mức processCô lập hoàn toàn ở mức phần cứng
Số lượng trên 1 VPSChạy được hàng chục containerChỉ vài VM
Use case phổ biếnMicroservices, CI/CD, deploy appChạy nhiều OS khác nhau, môi trường cần cô lập mạnh

Tóm lại: Container giống như thuê phòng trong chung cư (dùng chung hạ tầng toà nhà), còn VM giống như mua nguyên một căn nhà riêng. Phòng chung cư nhẹ nhàng hơn, tiết kiệm hơn, và phù hợp cho hầu hết nhu cầu.

Kiến trúc Docker: Dockerfile, Image, Container, Docker Hub
Quy trình Docker: Dockerfile → build → Image → run → Container. Docker Hub là nơi lưu trữ và chia sẻ images.

Các khái niệm cốt lõi trong Docker

Trước khi đi sâu hơn, bạn cần nắm 4 khái niệm nền tảng. Hiểu rõ chúng, phần còn lại sẽ dễ dàng hơn rất nhiều.

1. Image (Ảnh Docker)

Image là bản thiết kế, là “khuôn mẫu” để tạo container. Nó chứa mọi thứ cần thiết: code ứng dụng, thư viện, runtime, biến môi trường, file cấu hình.

Ví dụ thực tế: Image nginx:latest chứa sẵn web server Nginx đã cấu hình, sẵn sàng chạy. Image wordpress:6.4 chứa WordPress + PHP + Apache, chỉ cần kết nối database là xong.

Đặc điểm quan trọng: Image là read-only (chỉ đọc). Bạn không chỉnh sửa trực tiếp image, mà tạo container từ nó.

2. Container

Container là một instance đang chạy của image. Nếu image là khuôn bánh, thì container là chiếc bánh đã nướng xong.

Từ một image, bạn có thể tạo nhiều container. Ví dụ, từ image nginx, bạn tạo 3 container cho 3 website khác nhau, mỗi cái chạy độc lập, không ảnh hưởng nhau.

# Tạo và chạy container từ image nginx
docker run -d --name web1 -p 8080:80 nginx
docker run -d --name web2 -p 8081:80 nginx
docker run -d --name web3 -p 8082:80 nginx

Ba lệnh trên tạo 3 web server Nginx chạy song song trên các port khác nhau. Đơn giản vậy thôi.

3. Dockerfile

Dockerfile là file text chứa các chỉ dẫn để Docker build ra một image. Nó giống như công thức nấu ăn, liệt kê từng bước một.

# Ví dụ Dockerfile cho ứng dụng Node.js
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Giải thích nhanh:

  • FROM node:20-alpine: Bắt đầu từ image Node.js 20 (bản nhẹ Alpine)
  • WORKDIR /app: Đặt thư mục làm việc
  • COPY + RUN npm install: Copy code và cài dependencies
  • EXPOSE 3000: Khai báo port ứng dụng
  • CMD: Lệnh chạy khi container khởi động

Dockerfile cực kỳ quan trọng vì nó giúp bạn tái tạo môi trường một cách nhất quán. Ai có Dockerfile đều build ra image giống nhau, không còn chuyện “máy tao chạy được mà!”.

4. Docker Hub / Registry

Docker Hub (hub.docker.com) là “kho ứng dụng” của Docker, nơi mọi người chia sẻ images. Giống App Store, nhưng dành cho server.

Bạn có thể tìm thấy images chính thức của hầu hết mọi phần mềm phổ biến:

  • nginx: Web server
  • mysql, mariadb, postgres: Database
  • wordpress: CMS
  • redis: Cache
  • node, python, php: Runtime các ngôn ngữ

Chỉ cần một lệnh docker pull nginx là bạn đã có Nginx sẵn sàng chạy. Không cần compile, không cần config từ đầu.

Registry là khái niệm tổng quát hơn, bất kỳ nơi nào lưu trữ Docker images. Docker Hub là registry công cộng lớn nhất. Bạn cũng có thể tự dựng private registry cho riêng mình hoặc sử dụng dịch vụ như GitHub Container Registry, AWS ECR.

Docker trên VPS — chạy nhiều ứng dụng hiệu quả
Một VPS có thể chạy nhiều container độc lập: web server, database, cache, monitoring — tất cả cô lập và nhẹ nhàng.

Tại sao nên dùng Docker trên VPS?

Đây là phần quan trọng nhất. Docker không chỉ là trend, nó giải quyết những vấn đề thực tế mà ai quản lý VPS cũng từng gặp.

1. Cài đặt phần mềm cực nhanh

Thay vì mất 30 phút đến 1 tiếng để cài WordPress (cài Nginx, PHP, MySQL, config vhost, SSL…), với Docker bạn chỉ cần:

docker run -d --name wordpress -p 80:80 wordpress

Xong. WordPress đã chạy. Tất nhiên production cần config thêm, nhưng ý tưởng là vậy, từ 0 đến chạy được trong vài giây.

2. Không xung đột môi trường

Ứng dụng A cần PHP 7.4, ứng dụng B cần PHP 8.2? Không vấn đề. Mỗi container có môi trường riêng, không ai đụng ai. Bạn có thể chạy 5 phiên bản PHP khác nhau trên cùng một VPS mà không cần xoắn não.

3. Dễ backup và di chuyển

Muốn chuyển ứng dụng sang VPS mới? Với cách truyền thống, bạn phải cài lại từ đầu, copy config, cầu nguyện không thiếu gì. Với Docker, bạn chỉ cần copy file docker-compose.yml + data volume sang máy mới, chạy docker compose up -d: mọi thứ y hệt.

4. Tiết kiệm tài nguyên

Container nhẹ hơn VM rất nhiều. Một VPS 2GB RAM có thể chạy thoải mái 5-10 container (web server, database, cache, monitoring…). Nếu dùng VM, bạn may lắm chạy được 1-2 cái.

5. Rollback dễ dàng

Nâng cấp ứng dụng xong bị lỗi? Chỉ cần quay lại image version cũ. Không cần panic, không cần restore backup. Ví dụ:

# Đang chạy WordPress 6.4, muốn quay về 6.3
docker stop wordpress
docker rm wordpress
docker run -d --name wordpress -p 80:80 wordpress:6.3

6. Tái tạo được môi trường

Mọi thứ được mô tả trong file (Dockerfile, docker-compose.yml). Nghĩa là bạn có thể version control cấu hình server bằng Git. Server chết? Clone repo, chạy lại, xong. Đây là nền tảng của Infrastructure as Code: quản lý hạ tầng bằng code thay vì click chuột.

Khi nào nên dùng Docker, khi nào không?

Docker mạnh, nhưng không phải lúc nào cũng là lựa chọn tối ưu. Đây là cách mình đánh giá:

✅ Nên dùng Docker khi

  • Chạy nhiều ứng dụng trên cùng VPS: Docker giúp cô lập và quản lý dễ dàng
  • Muốn deploy nhanh: Một lệnh là xong, không config rườm rà
  • Cần môi trường nhất quán: Dev, staging, production giống hệt nhau
  • Thử nghiệm công nghệ mới: Muốn test Redis, MongoDB, Elasticsearch? Pull image xuống, chạy thử, xong xoá. Sạch sẽ
  • Làm việc với microservices: Docker sinh ra cho kiến trúc này
  • CI/CD pipeline: Build, test, deploy tự động

❌ Có thể chưa cần Docker khi

  • VPS chỉ chạy 1 website đơn giản: Cài LAMP/LEMP truyền thống có khi nhanh và đơn giản hơn
  • VPS RAM quá thấp (< 1GB): Docker daemon chiếm một phần RAM, VPS yếu sẽ chật
  • Ứng dụng cần truy cập phần cứng trực tiếp: GPU, USB device, kernel module đặc biệt
  • Chưa quen Linux cơ bản: Nên nắm vững Linux command line trước, rồi học Docker sau

💡 Lời khuyên: Nếu bạn đang quản lý VPS và chạy từ 2 ứng dụng trở lên, Docker gần như luôn là lựa chọn tốt hơn so với cài đặt trực tiếp. Lợi ích về lâu dài vượt xa thời gian học ban đầu.

Chuẩn bị gì trước khi bắt đầu serie này?

Để theo dọc serie Docker từ Zero đến Hero trên VPS, bạn cần chuẩn bị:

VPS tối thiểu

  • RAM: Tối thiểu 1GB (khuyến nghị 2GB trở lên)
  • CPU: 1 vCPU trở lên
  • Ổ cứng: 20GB trở lên (Docker images chiếm kha khá dung lượng)
  • Hệ điều hành: Ubuntu 22.04 hoặc 24.04 LTS (mình sẽ dùng Ubuntu xuyên suốt serie)

Kiến thức cần có

  • Biết SSH vào VPS: Nếu chưa biết, AZDIGI có bài hướng dẫn chi tiết
  • Biết dùng Linux command line cơ bản: cd, ls, cat, nano
  • Có quyền root hoặc sudo trên VPS

Nếu bạn chưa có VPS, bạn có thể đăng ký VPS tại AZDIGI, gói từ 2GB RAM là đủ dùng thoải mái cho việc học Docker.

📚 Serie Docker từ A đến Z

  1. Bài 1: Docker là gì? Tại sao nên dùng Docker trên VPS (đang đọc)
  2. Bài 2: Cài đặt Docker và Docker Compose trên VPS Ubuntu
  3. Bài 3: Làm quen với Docker – Các lệnh cơ bản cần biết
  4. Bài 4: Docker Image & Dockerfile – Tự tạo Image riêng
  5. Bài 5: Docker Volume & Network – Quản lý dữ liệu và mạng
  6. Bài 6: Docker Compose là gì? Cài đặt và cú pháp cơ bản
  7. Bài 7: Deploy WordPress + MySQL + phpMyAdmin bằng Docker Compose
  8. Bài 8: Deploy LEMP Stack (Nginx + PHP-FPM + MariaDB) bằng Docker Compose
  9. Bài 9: Biến môi trường & file .env trong Docker Compose
  10. Bài 10: Reverse Proxy với Nginx Proxy Manager + SSL tự động
  11. Bài 11: Deploy ứng dụng Node.js / Python với Docker Compose
  12. Bài 12: Backup & Restore dữ liệu Docker Volume
  13. Bài 13: Monitoring Docker với Portainer, Uptime Kuma và cAdvisor
  14. Bài 14: Docker Logging – Quản lý log hiệu quả
  15. Bài 15: Bảo mật Docker trên VPS
  16. Bài 16: CI/CD đơn giản – Auto deploy với Webhook + Docker Compose
  17. Bài 17: Docker Compose trong thực tế – Tổng hợp project mẫu

Tổng kết

Trong bài này, bạn đã nắm được:

  • Docker là gì: Công cụ đóng gói ứng dụng vào container, chạy độc lập và nhất quán
  • Container vs VM: Container nhẹ hơn, nhanh hơn, hiệu quả hơn cho hầu hết use case
  • 4 khái niệm cốt lõi: Image (bản thiết kế), Container (instance đang chạy), Dockerfile (công thức build), Docker Hub (kho images)
  • Lý do dùng Docker trên VPS: Nhanh, gọn, không xung đột, dễ backup, dễ rollback
  • Khi nào nên/không nên dùng: Phù hợp khi chạy nhiều app, chưa cần thiết khi VPS chỉ host 1 site đơn giản

Docker không khó như bạn nghĩ. Khó nhất là bước đầu tiên, hiểu nó là gì và tại sao cần nó. Bạn đã xong bước đó rồi.

Bài tiếp theo

Trong Bài 2: Cài đặt Docker trên VPS, mình sẽ hướng dẫn bạn cài Docker Engine + Docker Compose trên Ubuntu, cấu hình cho đúng chuẩn, và chạy container đầu tiên. Từ lý thuyết sang thực hành, bạn sẽ thấy Docker dễ hơn bạn tưởng!

Hẹn gặp bạn ở bài tiếp theo. 🐳

👉 Bài tiếp: Cài đặt Docker và Docker Compose trên VPS Ubuntu

Chia sẻ:
Bài viết đã được kiểm duyệt bởi AZDIGI Team

Về tác giả

Thạch Phạm

Thạch Phạm

Đồng sáng lập và Giám đốc điều hành của AZDIGI. Có hơn 15 năm kinh nghiệm trong phổ biến kiến thức liên quan đến WordPress tại thachpham.com, phát triển website và phát triển hệ thống.

Hơn 10 năm phục vụ 80.000+ khách hàng

Bắt đầu dự án web của bạn với AZDIGI