Docker cơ bản cho người mới: Hướng dẫn từ container đến deployment

Docker là công cụ nền tảng giúp đóng gói ứng dụng vào các container — đơn vị phần mềm siêu nhẹ, chạy đồng nhất trên mọi môi trường từ laptop đến server đám mây. Nếu bạn từng gặp lỗi “trên máy tôi chạy được” khi triển khai phần mềm, Docker chính là giải pháp triệt để cho vấn đề đó.

Docker là gì?

Docker là nền tảng mã nguồn mở sử dụng virtualization ở cấp hệ điều hành (OS-level virtualization). Thay vì tạo ra cả một máy ảo nặng nề, Docker chia sẻ trực tiếp kernel của host machine, từ đó tạo ra các container độc lập với nhau nhưng cực kỳ nhẹ.

Một container Docker chứa toàn bộ những gì ứng dụng cần: code, runtime, system tools, libraries, và settings. Bạn có thể di chuyển container từ môi trường development sang staging hay production mà không sợ khác biệt cấu hình.

Container khác gì với Virtual Machine?

Đây là câu hỏi phổ biến nhất khi mới tìm hiểu Docker:

Tiêu chí Container Virtual Machine
Cân nặng Vài MB Vài GB
Khởi động Vài giây Vài phút
Kernel Chia sẻ kernel host Mỗi VM có kernel riêng
Cô lập Mức OS Mức phần cứng
Hiệu suất Gần như native Có overhead từ hypervisor

Container mỏng hơn rất nhiều vì không cần giả lập phần cứng hay chạy hệ điều hành riêng. Một server vật lý có thể chạy hàng trăm container trong khi chỉ chạy được vài chục VM.

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

Docker Image

Image là bản thiết kế (template) đọc-only của container. Nó chứa mã nguồn, dependencies, và cấu hình. Image được tạo từ Dockerfile — một file văn bản mô tả từng bước build.

Dockerfile

Dockerfile là công thức nấu ăn của image:

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

Mỗi dòng trong Dockerfile là một layer. Docker cache các layer đã build, giúp lần build sau nhanh hơn đáng kể nếu không có gì thay đổi ở các layer đầu.

Docker Container

Container là image đang chạy. Bạn tạo container từ image, và mỗi container có thể chạy riêng biệt, không ảnh hưởng lẫn nhau.

Docker Hub

Kho chứa image công cộng tương tự GitHub nhưng dành cho container. Bạn có thể tìm thấy hàng ngàn image sẵn sàng dùng từ cộng đồng: Docker Hub.

Cài đặt Docker

macOS và Windows

Tải Docker Desktop — phần mềm bao gồm Docker Engine, Docker CLI, Docker Compose, và Kubernetes tích hợp sẵn.

Linux (Ubuntu/Debian)

# Cập nhật package index
sudo apt-get update
# Cài Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io
# Thêm user vào nhóm docker (không cần sudo mỗi lần)
sudo usermod -aG docker $USER
# Đăng nhập lại để áp dụng
newgrp docker

Sau khi cài, kiểm tra bằng lệnh:

docker --version
docker run hello-world

Lệnh Docker cơ bản

Quản lý container

# Chạy container từ image
docker run -d -p 8080:80 nginx

# Liệt kê container đang chạy
docker ps

# Dừng container
docker stop <container_id>

# Xóa container
docker rm <container_id>

# Xem log container
docker logs <container_id>

Quản lý image

# Tải image từ Docker Hub
docker pull ubuntu:latest

# Liệt kê image trên máy
docker images

# Xóa image không dùng
docker image prune -a

# Build image từ Dockerfile
docker build -t myapp:v1 .

Quản lý volume và network

# Tạo volume để dữ liệu tồn tại sau khi container xóa
docker volume create mydata

# Chạy container với volume mount
docker run -v mydata:/app/data postgres:16

# Tạo network cho các container giao tiếp
docker network create mynetwork
docker run --network mynetwork --name db postgres:16

Docker Compose

Khi ứng dụng nhiều service (app + database + cache + …), Docker Compose giúp định nghĩa và chạy toàn bộ từ một file YAML:

# docker-compose.yml
services:
  app:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
      - redis
  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: secret
    volumes:
      - db_data:/var/lib/postgresql/data
  redis:
    image: redis:alpine
volumes:
  db_data:

Chỉ một lệnh khởi chạy toàn bộ hệ thống:

docker compose up -d

Docker Compose đặc biệt hữu ích cho môi trường phát triển. Bạn có thể chạy ứng dụng gốc + database + cache + worker chỉ bằng một file cấu hình duy nhất.

Docker trong thực tế

Phát triển phần mềm

Mỗi developer chạy cùng một phiên bản PostgreSQL, Redis, Elasticsearch mà không cần cài đặt trực tiếp lên máy. Chỉ cần docker compose up là có môi trường đầy đủ.

Triển khai CI/CD

Các hệ thống tích hợp liên tục như GitHub Actions, GitLab CI đều hỗ trợ Docker nativity. Pipeline build image → test trong container → push lên registry → deploy lên production.

Microservices

Mỗi microservice chạy trong một container riêng, giao tiếp qua network. Điều này giúp scale từng service độc lập, fault isolation tốt hơn, và team phát triển song song không xung đột.

Chạy ứng dụng AI local

Docker được dùng rộng rãi để chạy các model AI local như Ollama, Stable Diffusion với đầy đủ dependencies, không sợ conflict với phần mềm khác trên máy.

Mẹo tối ưu khi dùng Docker

  • Sử dụng multi-stage build: Giảm kích thước image bằng cách tách giai đoạn build và runtime. Chỉ copy file cần thiết vào image cuối cùng.
  • Tránh lưu dữ liệu trong container: Container có thể bị xóa bất cứ lúc nào. Luôn dùng volume để lưu dữ liệu quan trọng.
  • Sử dụng .dockerignore: Giống .gitignore, loại bỏ file không cần thiết khỏi build context, tăng tốc build.
  • Pin phiên bản image: Luôn dùng node:20-alpine thay vì node:latest để tránh surprise khi image base update.
  • Giới hạn tài nguyên: Dùng --memory--cpus khi chạy container để tránh một service chiếm hết resource máy host.

Lộ trình học Docker tiếp theo

Sau khi nắm vững các lệnh cơ bản, bạn nên tìm hiểu thêm về Docker Swarm (clustering), Kubernetes (orchestration quy mô lớn), và container security (quét lỗ hổng, scan image).

Docker không chỉ là công cụ devops — bất kỳ lập trình viên nào cũng nên học nó. Việc container hóa ứng dụng giúp môi trường làm việc nhất quán, debugging dễ dàng hơn, và việc chuyển giao code giữa các team trở nên mượt mà hơn bao giờ hết.

Bắt đầu ngay: Cài Docker, viết Dockerfile cho dự án hiện tại, và trải nghiệm sự khác biệt. Bạn sẽ không muốn quay lại cách cũ sau khi đã quen với workflow container-based.

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

Vue.js là gì? Framework JavaScript dễ học cho người mới

Vue.js (thường gọi là Vue, phát âm /vjuː/) là một khung làm việc (framework) JavaScript mã nguồn mở dùng để xây dựng giao diện người dùng (UI) và ứng dụng…

Xem thêm

SQLite là gì? Hướng dẫn cơ sở dữ liệu nhúng cho người mới

SQLite là gì? Đây là cơ sở dữ liệu SQL nhẹ nhàng nhất thế giới, được sử dụng trong mọi smartphone, trình duyệt web và hàng tỷ ứng dụng trên…

Xem thêm

FastAPI là gì? Framework Python hiện đại cho lập trình viên

FastAPI là gì? Framework Python hiện đại cho API hiệu năng cao FastAPI là framework Python hiện đại dành cho việc xây dựng API, nổi bật nhờ hiệu năng cao…

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