Ở 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
Container
và máy ảo truyền thống - Hiểu tại sao
Container
trở 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
VM
chạyOS
riêng của nó - Tốn nhiều
Resource
hệ thống - Xử lý các
Process
chậm chạp
- Container:
- Tất cả
Container
chia sẻ chungKernel
củaOS Host
- Tiết kiệm
Resource
đáng kể - Xử lý các
Process
trở nên nhanh chóng
Lợi ích của việc chia sẻ Kernel
:
- Chia sẻ
Kernel
:Container
không cần mộtOS
hoàn chỉnh. Thay vào đó, chúng chia sẻKernel
củaOS Host
, giảm đáng kể việcOverhead
và tiêu tốnResource
. - Hiệu quả về mặt
Resource
: Chỉ đóng góiApplication
và cácLibrary
cần thiết,Container
loạ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ụngResource
tố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
Container
có riêng mộtNamespace
, đảm bảo cácProcess
trongContainer
này không thể ảnh hưởng đến cácContainer
khác. - Network Interface (CNI):
Container
cóCNI
riêng biệt, cho phép kiểm soáttraffic
giữa chúng. - File System Mount Points: Mỗi
Container
có hệ thốngFile System
riêng, đảm bảo thay đổi trongFile System
củaContainer
này không ảnh hưởng đến cácContainer
khá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
Application
trongContainer
, quản lýProcess
và xử lý cácSystem Call
tớ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
Backend
quản lýContainer
,Image
vàNetwork
. - Docker REST API:
API
mà client sử dụng để giao tiếp vớiDaemon
và 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à
OS
hoặcRuntime
cơ sở nhất - Application Layer (Tầng ứng dụng - Readonly): Chứa code
Application
và cácLibrary
cầ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
Namespace
riêng biệt và cung cấpDNS
nội bộ. - Host Networking:
Container
chia sẻNetwork Stack
từHost
, cho phép truy cập trực tiếp vàoHost
. - Overlay Networking: Cho phép giao tiếp giữa
Container
trên nhiềuHost
khá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
Container
có môi trường riêng biệt cho cácProcess
,Network
vàFile System
. - Control Groups (cgroups): Cho phép thiết lập các
Limitation
,Priority
vàTracking
cácResource
(tài nguyên), đảm bảo kiểm soát được mức độ tiêu thụResource
trongContainer
.
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:
Container
sử 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ả khiContainer
bịStop
hoặ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 chiaNetworking
và ràng buộcResource
. - Access Control (Kiểm soát truy cập):
Docker
tận dụngLinux Capabilities
, tích hợpSELinux/AppArmor
và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ả:
Container
chia sẻKernel Host
, giảmOverhead
và cải thiện hiệu năng hoạt động. - Cách ly: Đảm bảo mỗi
Application
chạy trong các môi trường độc lập, cải thiện tínhSecurity
và 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
,DEV
và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.