Ở bài viết này, chúng ta sẽ tìm hiểu sâu hơn về kiến trúc đằng sau Container - công nghệ cốt lõi của Docker và các công cụ Container hóa khác.
Việc hiểu rõ kiến trúc cốt lõi của Container sẽ giúp bạn:
- Nắm được sự khác biệt giữa
Containervà máy ảo truyền thống - Hiểu tại sao
Containertrở thành yếu tố thiết yếu trong phát triển phần mềm hiện đại
Table of contents
Open Table of contents
- Kiến trúc cốt lõi của Container
- Shared Kernel Architecture (Kiến Trúc Chia Sẻ Của Kernel)
- Resource Isolation (Cách Ly Tài Nguyên)
- Container Runtime Architecture (Kiến Trúc Container Runtime)
- Cách Docker triển khai Kiến Trúc Container
- Kiến trúc phân tầng (Layers) của
Docker Image: - Networking Architecture (Kiến Trúc Mạng)
- Container Resource Architecture (Kiến Trúc Resource Container)
- Storage Architecture (Kiến Trúc Storage)
- Security Architecture (Kiến Trúc Bảo Mật)
- Benefits of Container Architecture (Lợi Ích Của Kiến Trúc Container)
- Conclusion (Kết Luận)
Kiến trúc cốt lõi của Container
Shared Kernel Architecture (Kiến Trúc Chia Sẻ Của Kernel)
Điểm khác biệt chính giữa Container và Máy Ảo (VM) là nằm ở cách chúng sử dụng Resource của hệ thống:
- Máy ảo (VM):
- Mỗi
VMchạyOSriêng của nó - Tốn nhiều
Resourcehệ thống - Xử lý các
Processchậm chạp
- Container:
- Tất cả
Containerchia sẻ chungKernelcủaOS Host - Tiết kiệm
Resourceđáng kể - Xử lý các
Processtrở nên nhanh chóng
Lợi ích của việc chia sẻ Kernel:
- Chia sẻ
Kernel:Containerkhông cần mộtOShoàn chỉnh. Thay vào đó, chúng chia sẻKernelcủaOS Host, giảm đáng kể việcOverheadvà tiêu tốnResource. - Hiệu quả về mặt
Resource: Chỉ đóng góiApplicationvà cácLibrarycần thiết,Containerloại bỏ các nhu cầu dư thừa liên quan vềOS, cho phép chúng chạy với mức sử dụngResourcetối thiểu.
Resource Isolation (Cách Ly Tài Nguyên)
Mặc dù chia sẻ Kernel, các Container vẫn được cách ly hoàn toàn riêng biệt với nhau:
- Process Space (Nơi chạy tiến trình): Mỗi
Containercó riêng mộtNamespace, đảm bảo cácProcesstrongContainernày không thể ảnh hưởng đến cácContainerkhác. - Network Interface (CNI):
ContainercóCNIriêng biệt, cho phép kiểm soáttrafficgiữa chúng. - File System Mount Points: Mỗi
Containercó hệ thốngFile Systemriêng, đảm bảo thay đổi trongFile SystemcủaContainernày không ảnh hưởng đến cácContainerkhác.
Container Runtime Architecture (Kiến Trúc Container Runtime)
Container dựa vào môi trường Runtime để quản lý vòng đời và thực thi Application. Kiến trúc Runtime gồm hai thành phần chính:
- Container Engine Layer (Tầng Engine Container): Quản lý vòng đời
Container, bao gồm phân phốiImage, phân bổResource, khởi động và dừng Container. - Container Runtime Layer (Tầng Runtime Container): Chịu trách nhiệm xử lý các
ApplicationtrongContainer, quản lýProcessvà xử lý cácSystem CalltớiOS Host.
Cách Docker triển khai Kiến Trúc Container
Các thành phần chính của Docker:
- Docker Client (CLI): Giao diện UI để tương tác với
Docker, nơi thực hiện các lệnh. - Docker Daemon (Server): Thành phần
Backendquản lýContainer,ImagevàNetwork. - Docker REST API:
APImà client sử dụng để giao tiếp vớiDaemonvà thực hiện lệnh.
Kiến trúc phân tầng (Layers) của Docker Image:
Docker sử dụng cách tiếp cận phân các layers riêng biệt cho Container Image:
- Base Image Layer (Tầng cơ sở - Readonly): Tầng nền tảng, thường là
OShoặcRuntimecơ sở nhất - Application Layer (Tầng ứng dụng - Readonly): Chứa code
Applicationvà cácLibrarycần thiết - Configuration Layer (Tầng Config - Readonly): Chứa các tệp
Configuration - Container Layer (Tầng Container - ReadWrite): Tầng trên cùng, nơi lưu trữ các thay đổi trong quá trình chạy
Networking Architecture (Kiến Trúc Mạng)
Ở đây chúng ta chỉ nói về một số các mode cơ bản của Networking trong Container, ta sẽ có một bài khác để nói chi tiết về chủ đề này
Docker cung cấp nhiều Network Mode:
- Bridge Networking: Default Network mode, tạo một
Namespaceriêng biệt và cung cấpDNSnội bộ. - Host Networking:
Containerchia sẻNetwork StacktừHost, cho phép truy cập trực tiếp vàoHost. - Overlay Networking: Cho phép giao tiếp giữa
Containertrên nhiềuHostkhác nhau, đặc biệt hữu ích trongOrchestration.
Container Resource Architecture (Kiến Trúc Resource Container)
Container có được sự Isolation về mặt tiến trình và quản lý Resource dựa trên hai khái niệm chính:
- Namespaces: Đảm bảo
Containercó môi trường riêng biệt cho cácProcess,NetworkvàFile System. - Control Groups (cgroups): Cho phép thiết lập các
Limitation,PriorityvàTrackingcácResource(tài nguyên), đảm bảo kiểm soát được mức độ tiêu thụResourcetrongContainer.
Storage Architecture (Kiến Trúc Storage)
Containers sử dụng nhiều giải pháp lưu trữ khác nhau để quản lý dữ liệu:
- Union File System:
Containersử dụngUnion File Systemđể phân tầng thư mục, tạo ra cái nhìn thống nhất về hệ thống tệp. - Volume Management:
Volumeđược sử dụng để lưu trữ dữ liệu một cách bền vững, dữ liệu vẫn luôn tồn tại ngay cả khiContainerbịStophoặcDeleted.
Security Architecture (Kiến Trúc Bảo Mật)
Bảo mật luôn là một mối quan tâm được ưu tiên hàng đầu. Đối với việc Container hoá cũng vậy, Docker triển khai nhiều lớp bảo mật để đảm bảo rằng các Container và Resource luôn được bảo vệ ở trong nó:
- Isolation Layer (Tầng Cách Ly): Bao gồm việc cách ly các
Process, phân chiaNetworkingvà ràng buộcResource. - Access Control (Kiểm soát truy cập):
Dockertận dụngLinux Capabilities, tích hợpSELinux/AppArmorvàSeccomp Profiles.
Ví dụ:
# Dockerfile
FROM ubuntu:20.04 # Base layer
RUN apt-get update # System layer
COPY ./app /app # Application layer
WORKDIR /app # Configuration
EXPOSE 8080 # Network configuration
CMD ["./start.sh"] # Runtime instruction
Benefits of Container Architecture (Lợi Ích Của Kiến Trúc Container)
- Hiệu quả:
Containerchia sẻKernel Host, giảmOverheadvà cải thiện hiệu năng hoạt động. - Cách ly: Đảm bảo mỗi
Applicationchạy trong các môi trường độc lập, cải thiện tínhSecurityvà sự ổn định. - Nhất quán: Cung cấp môi trường nhất quán qua các giai đoạn phát triển,
UAT,DEVvàPROD.
Conclusion (Kết Luận)
Kiến trúc Container đang thay đổi cách ta xây dựng và triển khai phần mềm. Bằng cách nắm vững cách hoạt động của Container và hiểu rõ cách triển khai của Docker, bạn có thể khai thác tiềm năng tạo ra các ứng dụng có khả năng Scalability, Effectiveness và Security.
Kiến trúc Shared Kernel, Resource Isolation và Containerized Application chỉ là khởi đầu cho những gì đã làm cho Container trở thành công cụ cần thiết và không thể thiếu cho việc xây dựng và phát triển các hệ thống ngày nay.
Tham khảo tại bài viết này. Cảm ơn vì đã đọc.