Bài viết sẽ giới thiệu tổng quan về Docker, kiến trúc của Docker và các thành phần liên quan khác bên trong Docker.
Docker là gì? #
Docker là một nền tảng miễn phí (open platform) dành cho việc phát triển, triển khai ứng dụng, cho phép người dùng có thể phát triển và triển khai phần mềm một cách nhanh chóng mà không phải quan tâm nhiều đến hạ tầng bên dưới.
Ứng dụng của Docker. Nguồn ảnh: Sưu tầm
Docker cung cấp khả năng đóng gói và triển khai ứng dụng trong một môi trường cô lập được gọi là container. Với tính cô lập và bảo mật, Docker cho phép người dùng có thể triển khai nhiều container đồng thời trên một server (máy chủ) nhất định. Các container sử dụng rất ít dung lượng bộ nhớ vì chúng không cần sử dụng hypervisor, thay vào đó các container sẽ tương tác trực tiếp với nhân (kernel) của server. Người dùng có thể khởi chạy nhiều container trên một tổ hợp phần cứng nhất định so với việc sử dụng máy ảo, và thậm chí có thể chạy các Docker container trên các máy ảo.
Docker Engine là gì? #
Docker engine là một phần mền dạng “client-server” bao gồm các thành phần chính sau:
- Một tiến trình Docker daemon (dockerd) có nhiệm vụ khởi tạo và quản lý các container, image, volume, network.
- REST API là nơi nhận các yêu cầu từ phía Docker client và giao tiếp với Docker daemon để yêu cầu Docker daemon thực thi các yêu cầu từ phía người dùng.
- Docker CLI có vai trò là client, cung cấp giao diện tương tác với người dùng (command line) và gửi các request tương ứng đến Docker Daemon thông qua REST API.
Docker Engine. Nguồn ảnh: Docker
Kiến trúc của Docker #
Docker sử dụng kiến trúc client – server. Docker client sử dụng một REST API (thông qua UNIX socket, hoặc cổng mạng) để có thể giao tiếp với Docker daemon, tiến trình này thực hiện công việc tạo, chạy và phân phối các Docker container. Docker client và daemon có thể chạy trên cùng một hệ thống hoặc có thể kết nối Docker client với Docker daemon từ xa. Kiến trúc của Docker sẽ bao gồm:
Kiến trúc của Docker. Nguồn ảnh: Docker
Docker daemon #
Daemon Docker (dockerd) lắng nghe các yêu cầu của người dùng thông qua Docker API và quản lý các đối tượng Docker như image, container, network và volume. Một daemon cũng có thể giao tiếp với các daemon khác để quản lý các Docker service.
Docker client #
Docker client (docker) là cách thức mà nhiều người dùng tương tác với Docker. Khi bạn sử dụng các câu lệnh như docker run, client thông qua Docker API sẽ gửi các lệnh này đến dockerd, nơi thực hiện chúng. Docker client có thể giao tiếp với nhiều hơn một Docker daemon.
Docker registry #
Docker registry sẽ là nơi lưu trữ các Docker image. Docker Hub là nơi lưu trữ Docker image công khai (public registry) mà bất kỳ ai cũng có thể sử dụng và Docker được định cấu hình mặc định để tìm image trên Docker Hub. Ngoài ra người dùng có thể cấu hình các registry riêng tư khác để lưu trữ Docker image.
Khi người dùng sử dụng câu lệnh “docker pull” hoặc “docker run”, các image chỉ định sẽ được tải về dựa trên registry đã được cấu hình trước đó. Khi người dùng sử dụng câu lệnh “docker push”, image cũng sẽ được tải lên registry mà người dùng đã cấu hình từ trước đó.
Các đối tượng khác #
Khi sử dụng Docker, bạn sẽ khởi tạo và sử dụng image, container, network, volume, plugin và các đối tượng khác. Sau đây sẽ là tổng quan về các đối tượng này.
Docker image
Docker Image là template read-only (chỉ cho phép đọc) với các hướng dẫn để tạo Docker container. Image sẽ được sử dụng để đóng gói các ứng dụng và các thành phần đi kèm của ứng dụng, được lưu trữ ở server hoặc trên registry. Ví dụ bạn có thể sử dụng Dockerfile để tạo ra một Docker image sử dụng hệ điều hành Ubuntu và cài đặt Apache server với những cài đặt, cấu hình tùy chỉnh của riêng mình.
Docker container
Container là 1 “runable instance” của image. Bạn có thể khởi tạo, dừng hoặc xóa container bằng cách sử dụng Docker API hoặc CLI. Bạn có thể kết nối container đến 1 hoặc nhiều network, thư mục lưu trữ, hoặc thậm chí tạo ra 1 image mới dựa trên tình trạng hiện tại của container. Mặc định 1 container được “cách ly” với các container và server nếu người dùng không có các cài đặt gì thêm.
Docker volume
Volume được thiết kể để làm nơi lưu trữ các dữ liệu độc lập với vòng đời của container.
Docker network
Cung cấp một private network mà chỉ tồn tại giữa container và server, giúp các container có thể giao tiếp được với nhau một cách dễ dàng.
Docker service
Service cho phép bạn mở rộng các contaner thông qua nhiều Docker daemon, chúng giao tiếp với nhau thông qua swarm cluster bao gồm nhiều manager và worker. Mỗi một node của swarm là 1 Docker daemon giao tiếp với nhau bằng cách sử dụng Docker API. Theo mặc định thì service được cân bằng tải trên các node.
Khi nào sử dụng Docker? #
- Triển khai kiến trúc Microservices.
- Khi xây dựng ứng dụng và cần scale một cách linh hoạt.
- Khi bạn muốn không tốn khá nhiều thời gian để config máy local và server cùng một môi trường để chạy được ứng dụng. Bạn chỉ cần build 1 lần chạy ở nhiều nơi mà thôi.
- Sản phẩm của công ty bạn cần một cách tiếp cận mới về xây dựng, triển khai lên server, thực thi ứng dụng một cách nhanh chóng dễ dàng.
Nguồn tham khảo: