Như chúng ta đã biết, Docker là một trong các công cụ của DevOps rất hữu ích trong việc build các ứng dụng. Phía sau công cụ tuyệt vời này, cũng là một kiến trúc tuyệt vời. Bài viết này, chúng ta sẽ tìm hiểu về kiến trúc của Docker.

Trước khi bắt đầu, chúng ta sẽ tìm hiểu sự khác biệt giữa VM (Virtual Machines) và Docker. VM là một chương trình giả lập, chạy trên hiệu điều hành chủ, cung cấp hệ điều hành khách và application layers đươc ảo hoá. Trong khi đó Docker sử dụng hệ điều hành chủ và chủ ảo hoá application layers.

Quy trình làm việc của Docker

Để hiểu cơ bản về cách làm việc của Docker, chúng ta sẽ xem qua Docker Engine và vài thành phần của nó. Docker Engine chịu trách nhiệm develop và run applications bằng các thành phần sau:

0*Hv6l88Aa cFzeiu9

Docker Daemon: Docker Daemon hay dockerd lắng nghe các Docker API request và quản lý các đối tượng của Docker như images, containers, networks và volumes. Một daemon cũng có thể giao tiếp với các daemons khác để quản lý các services Docker

REST API: Docker CLI giao tiếp với Docker Daemon bằng RES API.

Docker CLI: Là Command Line Interface, giúp người dùng tương tác với Docker. Ví dụ, khi ta sử dụng lện docker run client sẽ gửi lệnh này đến Docker Daemon và thực hiến chúng.

Kiến trúc của Docker

Docker sử dụng kiến trúc client-server. Docker Client sẽ giao tiếp với Docker Daemon chịu trách nhiệm building, running, và phân phối Docker containers.

0*37qP6UCEnc7GPN

Nhìn vào sơ đồ trên, commands như là docker build, docker pull … được bởi người dùng sử dụng Docker CLI. Bây giờ, Docker client nói chuyện với Doker Daemon. Doker Daemon liên tục lắng nghe Docker API request và xử lý chúng. Nó xử lý tất cả containers, images và nếu cần, nó sẽ lấy images từ các registry.

Các đối tượng của Docker

Khi bạn sử dụng Docker, bạn sẽ tạo và sử dụng images, container, networks, volumes, plugins và các đối tượng khác. Phần này là một cái nhìn tổng quan ngắn gọn về một số đối tượng đó.

Images:

Image là một template chỉ đọc dùng để hướng dẫn tạo Docker Containers. Chúng ta có thể tạo images cho riêng mình hoặc sử dụng images được tạo bởi người và published trên nó lên registry. Để xây dựng một images, chúng ta cần một Dockerfile, trong đó có các bước tạo một image và run nó. Mội một bước trong Dockerfile sẽ tạo một layer trong image. Khi bạn thay đổi Dockerfile và rebuild image, chỉ mỗi layer thay đổi sẽ được rebuild. Đây là phần làm cho images lightweight, nhỏ và nhanh hơn khi so sánh với các công nghệ ảo hoá khác.

Containers:

Container là instances của image khi chạy. Chúng ta có thể chạy nhiều container sử dụng bởi một image. Mỗi container chạy trong một môi trường biệt lập mà không làm gián đoạn các ứng dụng đang chạy của một hệ thống. Chúng ta sử dụng lệnh docker run để chuyển đổi một images sang một container. Mội khi docker tạo container từ một image, sẽ có layer có khả năng ghi lại những thay đổi được thực hiện cho container, và những thay đổi này kéo dài trong suốt qua trình runtime của nó.

Volumes:

Volumes là cơ chế cho phép lưu trữ dữ liệu được tạo ra và sử dụng bởi container. Volumes được quản lý hoàn toàn bởi Docker.

Kết luận:

Docker có kiến trúc client-server. Trong mỗi client có Docker CLI để người dùng giao tiếp với docker. Docker Daemon hoạt động như một máy chủ chịu trách nhiệm building, running, và quản lý tất cả containers

Phạm Hoài Thương

Software Engineer

About the Author

Creating an application is easy, but creating a Great, Production-Ready Application is a whole different story. Một thợ code đang mong muốn trở thành một kỹ sư thực thụ. Đây là nơi tôi chia sẽ những kiến thức tôi đọc qua hoặc trải nghiệm cảm thấy hay ho.

View Articles