Docker là gì?

Docker là một nền tảng mã nguồn mở cho phép bạn đóng gói, phân phối và chạy ứng dụng bên trong các “container” – những môi trường ảo nhẹ, cô lập nhưng vẫn chia sẻ nhân hệ điều hành của máy chủ. Khái niệm then chốt ở đây là “containerization”: thay vì cài đặt phần mềm và mọi phụ thuộc trực tiếp lên máy ảo hay máy thật, Docker gom gọn toàn bộ mã nguồn, thư viện, công cụ và file cấu hình vào một gói duy nhất (gọi là image). Khi chạy, image khởi thành một container – một quy trình cô lập với hệ thống file, mạng và biến môi trường tách biệt, đảm bảo ứng dụng luôn chạy nhất quán trên mọi môi trường từ máy phát triển, máy kiểm thử đến production.

Điểm mạnh lớn nhất của Docker là khả năng tái sử dụng và di động. Một khi bạn đã xây dựng được một Docker image, bạn có thể đem nó chạy bất cứ đâu có cài Docker Engine, bất kể đó là Linux, Windows, macOS, hay cả trong các dịch vụ đám mây như AWS, Azure, Google Cloud. Điều này giải quyết triệt để tình trạng “chỗ tôi chạy được mà chỗ bạn thì không” (the infamous “works on my machine”), đồng thời giúp đẩy nhanh tiến trình phát triển và triển khai nhờ vào việc tự động hóa các bước đóng gói và khởi chạy.

Các thành phần trong Docker

Docker Engine (Daemon và Client)
Docker Engine bao gồm hai phần chính: Docker Daemon (được gọi là dockerd) và Docker CLI (client). Daemon chạy ngầm trên máy chủ, chịu trách nhiệm xây dựng, chạy và quản lý các container cùng với các object liên quan như images, networks và volumes. Khi bạn gõ lệnh docker trong terminal, Docker CLI sẽ gửi các API call tới Docker Daemon để thực thi công việc. Cơ chế client–server này cho phép bạn điều khiển Docker Engine từ xa, thậm chí từ một máy tính khác, miễn là được cấp quyền truy cập.

Docker Image
Docker Image là “bản sao chỉ đọc” (read-only template) chứa toàn bộ hệ điều hành con (nhẹ), các thư viện, phần mềm và mã nguồn cần thiết để chạy ứng dụng. Mỗi image được xây dựng theo lớp (layered) từ Dockerfile—một tập hợp các lệnh tuần tự (FROM, RUN, COPY, …) mô tả cách cài đặt mọi thứ. Khi image thay đổi (ví dụ cài thêm gói mới), Docker chỉ tạo thêm một layer mới, giúp tiết kiệm không gian lưu trữ và tăng tốc quá trình build.

Docker Container
Container là thể hiện động của một image: khi bạn chạy docker run, Docker Daemon khởi tạo một container – một quy trình (process) cô lập sử dụng các namespace và cgroups của Linux để tách biệt hệ thống file, mạng và tài nguyên CPU/RAM so với host và các container khác. Container có trạng thái riêng và có thể khởi động, dừng, xóa mà không ảnh hưởng tới host hoặc container khác.

Dockerfile
Dockerfile là tệp văn bản định nghĩa các bước để build một image. Mỗi dòng lệnh trong Dockerfile tương ứng với một layer trong image. Qua Dockerfile, bạn có thể mô tả từ image gốc (ví dụ python:3.9-slim), sao chép mã nguồn, cài đặt dependency, đến lệnh khởi động ứng dụng (CMD hay ENTRYPOINT). Dockerfile giúp mọi người trong team có thể tái tạo chính xác environment ở bất cứ đâu.

Docker Registry
Registry là nơi lưu trữ và phân phối Docker images. Docker Hub là registry công cộng phổ biến nhất, nhưng bạn cũng có thể cài đặt Registry riêng (self-hosted) để quản lý image internal, bảo mật và kiểm soát phiên bản. Khi bạn chạy docker pull hoặc docker push, Docker CLI giao tiếp với registry để tải về hoặc đẩy lên image.

Docker Compose
Docker Compose là công cụ cho phép bạn định nghĩa và chạy multi-container applications bằng một file YAML (docker-compose.yml). Trong đó, bạn khai báo các service (ví dụ web, database, cache), network và volume dùng chung. Chỉ với một câu lệnh docker-compose up, toàn bộ stack sẽ được khởi động, cấu hình đúng thứ tự phụ thuộc.

Network và Volume
Network: Docker tự động tạo một bridge network mặc định, cho phép container giao tiếp với nhau. Bạn có thể tạo thêm network loại bridge, overlay (dùng trong Swarm), hoặc host để tùy chỉnh cách kết nối nội bộ và ra ngoài.
Volume: Dùng để lưu trữ dữ liệu bền vững, tách biệt khỏi vòng đời của container. Dockerd quản lý volumes, cho phép mount chúng vào thư mục bên trong container, đảm bảo dữ liệu không mất đi khi container bị xóa.

Docker Swarm (Orchestration)
Khi cần chạy và quản lý hàng chục, hàng trăm container trên nhiều host, Docker Swarm cung cấp giải pháp orchestration tích hợp sẵn. Bạn có thể khởi một Swarm cluster, deploy services với tính năng load-balancing, scaling tự động, và rolling update. Các node trong Swarm được phân thành Manager và Worker, đảm bảo tính sẵn sàng cao và phân phối workload hiệu quả.

About the Author

Đức Phát

View all author's posts

Leave a Comment

Your email address will not be published. Required fields are marked *

Bài viết khác

Sử dụng Request/Response trong ứng dụng RESTful mô hình MVC

DTO là gì? DTO (Data Transfer Object) là một object trung gian dùng để truyền dữ liệu giữa client – server hoặc giữa các service trong ứng dụng web/API theo kiến trúc RESTful API. DTO chỉ chứa các thông tin cần thiết mà client hoặc service khác cần (ví dụ: Login Form chỉ cần thông […]

Kiểm thử phần mềm

Testing là gì? Quá trình kiểm thử phần mềm (software testing) là một chuỗi hoạt động có hệ thống nhằm đánh giá chất lượng, độ ổn định và tính đúng đắn của một ứng dụng so với yêu cầu ban đầu. Không đơn thuần chỉ là tìm ra lỗi, testing còn giúp đảm bảo rằng […]

Cache

Cache là gì? Cache là một bộ nhớ tạm (nhanh) được sử dụng để lưu trữ tạm thời dữ liệu thường xuyên được truy cập, nhằm giảm độ trễ và tăng hiệu suất của hệ thống. Cache thường được sử dụng ở Client, như CPU, applications, web browsers hoặc operating systems (OSes). Một số Cache phổ […]

Tìm hiểu Kafka

Kafka là gì? Apache Kafka là một nền tảng phân phối sự kiện phân tán mã nguồn mở được phát triển bởi Apache Software Foundation và được viết bằng Java và Scala. Kafka ban đầu được phát triển bởi LinkedIn và sau đó được mở nguồn cho Quỹ phần mềm Apache (Apache Software Foundation) vào đầu năm 2011. (đồng sáng lập […]

Tìm hiểu RabbitMQ

RabbitMQ là gì? RabbitMQ là một phần mềm trung gian giúp các hệ thống, server, ứng dụng có thể giao tiếp, trao đổi dữ liệu với nhau. Nhiệm vụ của RabbitMQ được hiểu đơn giản là: nhận message từ nhiều nguồn => lưu trữ, sắp xếp sao cho hợp lý => đẩy tới đích đến. Là […]

Tìm hiểu về Message Broker

Message Broker là gì Message Broker (hay còn gọi là “trình môi giới thông điệp”) là một thành phần trung gian chuyên xử lý việc gửi, nhận, định tuyến và chuyển tiếp thông điệp (message) giữa các thành phần (ứng dụng, dịch vụ) trong hệ thống. Nó cho phép giao tiếp phi đồng bộ giữa […]