Dat's Blog
Trang chủ Blog Videos Giới thiệu

Kiến Trúc Lõi Của Docker: Hiểu Rõ Về Image, Container Và Docker Daemon

Khám phá kiến trúc bên trong của Docker. Hiểu rõ Docker Daemon, Docker Client là gì và cách phân biệt tường minh giữa Docker Image (Khuôn mẫu) với Docker Container (Thành phẩm). Hướng dẫn cho người mới bắt đầu.


Kiến Trúc Lõi Của Docker: Hiểu Rõ Về Image, Container Và Docker Daemon
Tóm tắt AI

Trong Bài 1, chúng ta đã biết Docker là gì và tại sao nó lại là "vị cứu tinh" giúp giải quyết triệt để bài toán xung đột môi trường. Tuy nhiên, để thực sự làm chủ được công cụ này và không bị bỡ ngỡ khi gõ những câu lệnh đầu tiên, bạn cần phải hiểu rõ cấu trúc bên dưới lớp vỏ của nó.

Nếu ví Docker như một công trường xây dựng, thì các thành phần bên trong nó hoạt động phối hợp với nhau như thế nào? Trong bài viết này, chúng ta sẽ cùng nhau "mổ xẻ" kiến trúc lõi của Docker bao gồm: Docker Client, Docker Daemon, Image, ContainerRegistry.

1. Mô Hình Client - Server: Docker Hoạt Động Như Thế Nào?

Khi bạn cài đặt Docker vào máy tính, thực chất bạn đang cài đặt một hệ thống chạy theo mô hình Client - Server (Khách - Chủ). Trong đó, hai thành phần cốt lõi đảm nhận hai nhiệm vụ hoàn toàn khác nhau:

Docker Client (Kẻ ra lệnh)

Docker Client (chính là công cụ dòng lệnh CLI bạn gõ trên Terminal/Command Prompt) là giao diện chính để người dùng tương tác với Docker. Khi bạn gõ một câu lệnh (ví dụ: docker run), Docker Client sẽ không trực tiếp chạy container đó. Nhiệm vụ của nó chỉ là đóng gói câu lệnh của bạn và gửi một yêu cầu (API request) tới "bộ não" phía sau.

Docker Daemon / Docker Engine (Người thực thi)

Docker Daemon (gọi là dockerd) là một tiến trình chạy ngầm (background service) trên máy tính của bạn. Đây mới chính là "gã thợ cơ khí" thực thụ. Nó lắng nghe các yêu cầu từ Docker Client để thực hiện các tác vụ nặng nhọc như: build (xây dựng) image, quản lý network, lưu trữ dữ liệu và vận hành các container.

2. Phân Biệt Tường Minh: Docker Image vs Docker Container

Đây là hai khái niệm dễ gây lú lẫn nhất cho người mới bắt đầu. Hãy để ý kỹ sự khác biệt này thông qua các hình ảnh ẩn dụ thực tế:

Docker Image (Bản thiết kế / Khuôn đúc)

Docker Image là một file đóng gói sẵn, chứa toàn bộ mã nguồn, thư viện, các biến môi trường và cấu hình cần thiết để ứng dụng có thể chạy được.

  • Đặc tính: Image là Read-Only (chỉ đọc), nghĩa là bạn không thể sửa đổi nội dung bên trong một Image khi nó đã được tạo ra.

  • Ẩn dụ: Image giống như một bản thiết kế ngôi nhà trên giấy, hoặc một cái khuôn đúc bánh. Bản thân cái khuôn thì không ăn được, và bạn có thể dùng một cái khuôn để đúc ra hàng nghìn chiếc bánh giống hệt nhau.

Docker Container (Ngôi nhà hoàn thiện / Chiếc bánh thành phẩm)

Khi bạn ra lệnh cho Docker Daemon chạy một Image, nó sẽ lấy "bản thiết kế" đó ra và dựng lên một môi trường sống thực sự. Đó chính là Container.

  • Đặc tính: Container là một thực thể sống, có thể khởi động (start), dừng (stop), xóa (delete). Khi container chạy, Docker sẽ phủ lên trên Image một lớp ghi (Read-Write Layer), cho phép ứng dụng tạo file, ghi log hoặc thay đổi dữ liệu trong lúc vận hành mà không làm ảnh hưởng đến Image gốc bên dưới.

  • Ẩn dụ: Container chính là ngôi nhà ngoài đời thực được xây từ bản thiết kế, hoặc chiếc bánh được đúc ra từ khuôn. Bạn có thể xây 5 ngôi nhà từ 1 bản thiết kế duy nhất; chúng cô lập hoàn toàn với nhau, nhà này cháy thì nhà bên cạnh không hề hấn gì.

3. Bản Đồ Kiến Trúc Hoạt Động Của Docker

Để hình dung cách các thành phần này "nói chuyện" với nhau, hãy nhìn vào quy trình 3 bước kinh điển của Docker dưới đây:

  1. Docker Client: Bạn gõ lệnh docker run nginx.

  2. Docker Daemon: Nhận lệnh và kiểm tra xem trong máy bạn đã có bản thiết kế (Image) của nginx chưa.

    • Nếu chưa có, nó sẽ tự động chạy ra "chợ" Docker Registry (Docker Hub) để tải (pull) Image đó về máy.

    • Nếu có rồi (hoặc sau khi tải xong), nó sẽ lập tức đúc ra một Container mang tên nginx và kích hoạt cho nó chạy ngay lập tức.

4. Docker Registry Và Vị Trí Của Docker Hub

Nếu Image là bản thiết kế, thì Docker Registry chính là cái thư viện khổng lồ lưu trữ tất cả các bản thiết kế đó trên Internet để mọi developer trên thế giới có thể chia sẻ cho nhau.

  • Docker Hub: Là Registry mặc định và lớn nhất do chính Docker quản lý. Tại đây, bạn có thể tìm thấy Image của hầu hết các công nghệ phổ biến hiện nay: từ hệ điều hành (Ubuntu, Alpine), cơ sở dữ liệu (MySQL, MongoDB, Redis) cho đến các môi trường chạy code (Node.js, Python, Golang).

  • Ngoài Docker Hub, các tập đoàn lớn thường tự dựng Registry riêng của họ để lưu trữ các Image bảo mật nội bộ (như AWS ECR, Google Artifact Registry...).

Lời kết & Hướng dẫn chuẩn bị cho bài tiếp theo

Hiểu được kiến trúc Client - Server, nắm rõ ranh giới giữa Image (Khuôn đúc)Container (Thành phẩm) chính là bạn đã đi được 50% chặng đường nhập môn Docker. Bạn đã có tư duy hệ thống của một DevOps Engineer thực thụ.

Đã đến lúc chúng ta ngừng nói lý thuyết suông và bắt đầu "nhúng tay vào chàm". Ở Bài 3: Những Câu Lệnh CLI Sống Còn Khi Thao Tác Với Container, chúng ta sẽ cài đặt Docker Desktop và trực tiếp gõ những câu lệnh đầu tiên để tạo ra, điều khiển và phá hủy các container ngay trên máy tính của bạn.