Docker là gì? Giới thiệu toàn diện về Containerization
Trong thế giới phát triển phần mềm hiện đại, việc triển khai ứng dụng một cách nhất quán và đáng tin cậy trên nhiều môi trường khác nhau luôn là một thách thức lớn. Câu nói kinh điển "It works on my machine" đã trở thành nỗi ám ảnh của rất nhiều developer và DevOps engineer. Docker ra đời để giải quyết triệt để vấn đề này. Trong bài viết đầu tiên của chuỗi khóa học Docker, chúng ta sẽ tìm hiểu Docker là gì, tại sao nó lại quan trọng đến vậy, và lộ trình học tập mà bạn sẽ theo suốt khóa học.
Docker là gì?
Docker là một containerization platform mã nguồn mở (open-source) giúp bạn đóng gói ứng dụng cùng toàn bộ môi trường chạy (dependencies, libraries, cấu hình, runtime environment…) vào một “container” để chạy nhất quán trên mọi máy, từ laptop dev đến server production.
Hãy tưởng tượng bạn muốn gửi một món đồ chơi phức tạp cho bạn bè ở nhiều nơi khác nhau. Thay vì gửi linh kiện rời và hy vọng họ tự lắp đúng, bạn đóng tất cả vào một hộp chuẩn (có sẵn hướng dẫn, ốc vít, pin...). Chỉ cần mở hộp là chạy được ngay, dù người nhận dùng máy tính Windows, Mac hay Linux.
Docker làm đúng việc đó với phần mềm:
- Image = cái hộp đã đóng gói sẵn (ứng dụng + thư viện + cấu hình).
- Container = hộp đang chạy thực tế trên máy bạn.
- Docker = bộ công cụ để bạn: tạo image, chạy container từ image, chia sẻ image qua registry (ví dụ Docker Hub), và orchestrate nhiều container.
Lợi ích lớn nhất:
“Chạy được trên máy tôi” → “Chạy được ở mọi nơi” (máy dev, máy test, server production).
Nói dễ hiểu: thay vì bảo “cài Python 3.11, cài thư viện A/B/C, biến môi trường X=Y”, bạn đưa cho máy một image đã có sẵn tất cả, rồi ra lệnh docker run là chạy được ngay
Lịch sử phát triển
Docker được Solomon Hykes giới thiệu lần đầu tại PyCon 2013 dưới dạng một dự án nội bộ của dotCloud. Ban đầu, Docker được xây dựng dựa trên LXC (Linux Containers), nhưng sau đó đã phát triển runtime riêng gọi là libcontainer (nay là runc). Từ một dự án nhỏ, Docker đã nhanh chóng trở thành tiêu chuẩn công nghiệp cho containerization, thay đổi hoàn toàn cách chúng ta xây dựng, phân phối và chạy phần mềm.
Các khái niệm cốt lõi
Image & Container
- Image: gói read-only gồm code, runtime, libraries, config; được xây dựng từ các layer (mỗi layer là một tập hợp thay đổi trên filesystem).
- Container: instance đang chạy của một image; bạn có thể start/stop/move/delete container mà không ảnh hưởng đến image gốc.
- Layer & immutability: các layer không thể sửa đổi (immutable); khi có thay đổi, Docker sẽ tạo một layer mới chồng lên trên, giúp tái sử dụng layer và tối ưu kích thước image.
Dockerfile & Build
Dockerfile là một file văn bản mô tả cách build image: chọn base image, copy code, cài đặt dependencies, expose port, và định nghĩa lệnh khởi động container.
Khi bạn chạy docker build, Docker đọc Dockerfile và tạo ra image mới từ các layer tương ứng.
Registry & Docker Hub
Registry là nơi lưu trữ và phân phối image (public hoặc private).
Docker Hub là registry công khai lớn nhất, chứa rất nhiều official image (Node, Python, Postgres, Nginx…) mà bạn có thể dùng ngay.
Docker Compose
Compose dùng một file YAML để định nghĩa nhiều container cùng lúc (app + DB + cache…), rồi khởi động tất cả chỉ bằng một lệnh.
Rất tiện cho microservices hoặc những stack có nhiều thành phần.
Kiến trúc Docker (góc nhìn kỹ thuật)
- Docker Client (CLI) gửi lệnh tới Docker Daemon (
dockerd). - Daemon quản lý image, container, network, volume; giao tiếp qua API.
- Container chạy như một tiến trình ở user-space, dùng namespace/cgroup của Linux để cô lập tài nguyên.
Yêu cầu đăng nhập
Vui lòng đăng nhập để truy cập nội dung này
Additional Resources
Course Guide
Comprehensive PDF guide with examples
GitHub Repository
Example code for all lessons
Discussion
Have a question about this lesson? Post it here and get answers from instructors and peers.
