Docker cho người mới: Hướng dẫn từ A đến Z

Docker cho người mới — từ khái niệm đến thực hành. Docker là công nghệ đóng gói ứng dụng vào container, giúp chạy phần mềm giống nhau trên mọi máy tính. Bài viết này hướng dẫn từng bước: cài đặt Docker, viết Dockerfile, chạy container đầu tiên và các lệnh thường dùng — đủ để bạn tự tin làm việc với Docker trong dự án thực tế.

Container là gì? Vì sao cần Docker?

Trước Docker, bài toán kinh điển: code chạy trên máy mình nhưng không chạy trên server. Nguyên nhân: phiên bản hệ điều hành, thư viện, cấu hình khác nhau. Container giải quyết bằng cách đóng gói ứng dụng cùng toàn bộ môi trường chạy — thư viện, runtime, cấu hình — vào một gói duy nhất.

So với máy ảo truyền thống:

  • Nhẹ hơn: máy ảo cần cả hệ điều hành riêng (nhiều GB), container dùng chung kernel máy chủ
  • Khởi động nhanh: container bật trong vài giây, máy ảo mất vài phút
  • Tiết kiệm tài nguyên: chạy hàng chục container trên một server
  • Nhất quán: cùng image = cùng môi trường, hết chuyện “chạy được trên máy tôi”

Cài đặt Docker

Trên Ubuntu/Debian (server phổ biến nhất):

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

Trên Windows/macOS: tải Docker Desktop và cài đặt theo hướng dẫn. Kiểm tra cài đặt thành công:

docker --version
docker run hello-world

Lệnh thứ hai tải image hello-world và chạy thử — nếu thấy thông báo chào mừng nghĩa là Docker hoạt động.

Khái niệm cốt lõi

  • Image: bản thiết kế chỉ đọc, chứa mã nguồn + môi trường. Ví dụ node:20, python:3.12
  • Container: instance đang chạy từ image — có trạng thái riêng, có thể start/stop
  • Dockerfile: file văn bản mô tả cách xây dựng image từng bước
  • Registry: kho lưu trữ image — Docker Hub là registry công khai lớn nhất
  • Volume: vùng lưu trữ dữ liệu tồn tại độc lập với container

Viết Dockerfile đầu tiên

Tạo file Dockerfile cho ứng dụng Node.js đơn giản:

# Lấy image nền có sẵn Node.js
FROM node:20-alpine

# Thư mục làm việc trong container
WORKDIR /app

# Sao chép file package.json trước để tận dụng cache
COPY package*.json ./
RUN npm install

# Sao chép toàn bộ mã nguồn
COPY . .

# Cổng ứng dụng lắng nghe
EXPOSE 3000

# Lệnh chạy khi container khởi động
CMD ["node", "index.js"]

Xây dựng image và chạy:

docker build -t my-app .
docker run -p 3000:3000 my-app

Mở trình duyệt truy cập http://localhost:3000 — ứng dụng đã chạy trong container.

Các lệnh Docker thường dùng

Lệnh Chức năng
docker ps Xem container đang chạy
docker ps -a Xem tất cả container (kể cả đã dừng)
docker images Xem danh sách image đã tải
docker stop <tên> Dừng container
docker rm <tên> Xóa container
docker rmi <image> Xóa image
docker logs <tên> Xem log của container
docker exec -it <tên> sh Mở shell bên trong container

Docker Compose — nhiều container cùng lúc

Ứng dụng thực tế thường gồm nhiều phần: web, database, cache. Docker Compose quản lý toàn bộ bằng một file docker-compose.yml:

version: "3.9"
services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - db-data:/var/lib/postgresql/data
volumes:
  db-data:

Chạy cả hệ thống chỉ với một lệnh:

docker compose up -d

Compose tự tạo network nội bộ, các service gọi nhau qua tên service (ví dụ db thay vì địa chỉ IP).

Lỗi thường gặp và cách xử lý

  • Port bị trùng: port is already allocated — đổi cổng host hoặc dừng container cũ bằng docker ps + docker stop
  • Dữ liệu mất khi xóa container: dữ liệu trong container không bền — dùng volume (volumes: trong compose) để lưu trữ
  • Image quá lớn: dùng image nhẹ như alpine, gộp lệnh RUN bằng &&
  • Không thấy container sau khi chạy: kiểm tra docker ps -adocker logs để xem lỗi khởi động

Kết luận

Docker là kỹ năng bắt buộc cho developer 2026 — từ cá nhân làm side project đến đội ngũ vận hành hệ thống lớn. Nắm được năm khái niệm cốt lõi (image, container, Dockerfile, registry, volume) và các lệnh cơ bản, bạn đã đủ nền tảng. Bước tiếp theo: học Docker Compose cho multi-container, rồi đến Kubernetes khi hệ thống cần mở rộng.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

React hay Vue: Nên chọn framework JavaScript nào?

React và Vue là hai framework JavaScript phổ biến nhất để xây dựng giao diện người dùng hiện đại. Cả hai đều mã nguồn mở, đều dựa trên component, nhưng…

Xem thêm

Python cho người mới bắt đầu: Lộ trình học từ con số không

Python là gì? Python là ngôn ngữ lập trình bậc cao, mã nguồn mở, ra đời năm 1991 do Guido van Rossum tạo ra. Đây là ngôn ngữ có cú…

Xem thêm

FastAPI là gì? Framework Python xây REST API tốc độ cao

FastAPI đang trở thành framework Python được yêu thích nhất để xây dựng REST API, với hơn 100.000 sao trên GitHub và 550 triệu lượt tải mỗi tháng, gấp 2,7…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất