Một container Linux là gì?
Trong một môi trường ảo hóa thông thường, một hoặc nhiều máy ảo chạy trên máy vật lý bằng cách sử dụng một trình ảo hóa như Xen, Hyper-V, v.v. Các container chạy trong không gian người dùng (user space) trên nhân của hệ điều hành. Nó có thể được gọi là ảo hóa cấp hệ điều hành. Mỗi vùng chứa sẽ có không gian người dùng riêng biệt và bạn có thể chạy nhiều vùng chứa trên một máy chủ, mỗi vùng có không gian người dùng riêng. Điều đó có nghĩa là bạn có thể chạy các hệ thống Linux (container) khác nhau trên một máy chủ. Ví dụ: bạn có thể chạy một container RHEL và SUSE trên máy chủ Ubuntu. Máy chủ Ubuntu có thể là máy ảo hoặc máy chủ vật lý.
Lưu ý: bạn không thể chạy container windows trên máy chủ Linux vì không có hỗ trợ Linux Kernel cho Windows. Bạn có thể đọc về các container Windows từ đây
Các container được phân lập trong một máy chủ bằng cách sử dụng hai tính năng nhân Linux được gọi là namespace và control groups.
Namespace trong linux
Có sáu Namespace trong Linux
- pid namespace : Chịu trách nhiệm cô lập tiến trình (PID: ID tiến trình).
- net namespace : Nó quản lý các giao diện mạng (NET: Mạng).
- ipc namespace : Nó quản lý quyền truy cập vào tài nguyên IPC (IPC: InterProcess Communication).
- mnt namespace : Chịu trách nhiệm quản lý các điểm gắn kết hệ thống tập tin (MNT: Mount).
- uts namespace : Cô lập kernel and version identifiers. (UTS: Hệ thống chia sẻ thời gian Unix).
Sử dụng các namespace này, một container có thể có giao diện mạng, địa chỉ IP riêng, v.v … Mỗi container sẽ có namespace riêng và các quy trình chạy bên trong namespace đó sẽ không có bất kỳ đặc quyền nào ngoài namespace của nó.
Control groups
Các tài nguyên được sử dụng bởi một container được quản lý bởi Control groups Linux. Bạn có thể quyết định số lượng CPU và tài nguyên bộ nhớ mà một container nên sử dụng bằng cách sử dụng các nhóm điều khiển Linux.
Container không phải là một khái niệm mới. Google đã sử dụng công nghệ container của riêng mình trong Cơ sở hạ tầng trong nhiều năm. Solaris Zones, BSD Jails, LXC là số ít công nghệ container của Linux đã tồn tại trong nhiều năm. Trong bài viết này, chúng ta sẽ tìm hiểu về Docker và xem tại sao Docker rất hữu ích và khác biệt với các công nghệ container khác.
Docker là gì?
Docker là một dự án nguồn mở phổ biến dựa trên các container Linux. Docker được viết và phát triển bởi Dotcloud (Công ty A PaaS). Docker về cơ bản là một công cụ chứa sử dụng các tính năng Linux Kernel như namespace và các nhóm điều khiển để tạo các container trên hệ điều hành và tự động triển khai ứng dụng trên container.
Nó cung cấp một môi trường nhẹ để chạy code ứng dụng của bạn. Docker có một quy trình làm việc hiệu quả để chuyển ứng dụng của bạn từ máy tính xách tay của nhà phát triển, môi trường thử nghiệm sang sản xuất. Nó cực kỳ nhanh và nó có thể chạy trên máy chủ với Linux Kernel tương thích.
Docker sử dụng hệ thống tập tin sao chép-ghi-ghi để lưu trữ phụ trợ. Bất cứ khi nào thay đổi được thực hiện cho một container, chỉ những thay đổi sẽ được ghi vào đĩa bằng cách sử dụng bản sao trên mô hình ghi. Ngoài ra, việc tạo một container bằng Docker chỉ mất chưa đến một giây.
Những điều bạn nên biết về Docker:
- Docker không phải là LXC
- Docker không phải là một giải pháp máy ảo.
- Docker không phải là một hệ thống quản lý cấu hình và không phải là sự thay thế cho chef, puppet, Ansible v.v.
- Docker không phải là platform as a service technology.
Thành phần Docker:
Docker bao gồm bốn thành phần sau đây
- Docker Client và Daemon.
- Image
- Docker registry
- Container
Docker hoạt động như thế nào?
Docker có kiến trúc máy khách-máy chủ. Docker Daemon hoặc máy chủ chịu trách nhiệm cho tất cả các hành động liên quan đến container. Trình nền nhận các lệnh từ máy khách Docker thông qua CLI hoặc REST API. Docker client có thể ở trên cùng một máy chủ với một daemon hoặc nó có thể có mặt trên bất kỳ máy chủ nào khác.
Image là các khối xây dựng cơ bản của Docker. Container được xây dựng từ Image. Image có thể được cấu hình với các ứng dụng và được sử dụng làm mẫu để tạo các container. Nó được tổ chức theo kiểu lớp. Mỗi thay đổi trong một Image được thêm vào như một lớp trên nó.
Docker registry là một registry cho Image Docker. Sử dụng registry Docker, bạn có thể xây dựng và chia sẻ Image với nhóm của mình. Một registry có thể là công khai hoặc riêng tư. Docker Inc cung cấp một dịch vụ registry được lưu trữ được gọi là Docker Hub. Nó cho phép bạn tải lên và tải xuống Image từ một vị trí trung tâm. Nếu registry của bạn là công khai, tất cả Image của bạn có thể được truy cập bởi những người dùng trung tâm Docker khác. Bạn cũng có thể tạo một sổ registry riêng trong Docker Hub. Docker hub hoạt động như git, nơi bạn có thể xây dựng Image cục bộ trên máy tính xách tay của mình, cam kết nó và sau đó có thể được đẩy đến trung tâm Docker.
Container là môi trường thực thi cho Docker. Container được tạo ra từ Image. Nó là một lớp có thể ghi của Image. Bạn có thể đóng gói các ứng dụng của mình trong một container, commit nó và biến nó thành một Image vàng để xây dựng nhiều container hơn từ nó. Hai hoặc nhiều container có thể được liên kết với nhau để tạo thành kiến trúc ứng dụng theo tầng. Các container có thể được started, stopped, commited và terminated. Nếu bạn terminate một container mà không commit nó, tất cả các thay đổi được thực hiện cho container sẽ bị mất.
Phần kết luận:
Tính năng tốt nhất của Docker là hợp tác. Image Docker có thể được đẩy vào một registry và có thể được kéo xuống bất kỳ máy chủ nào khác để chạy các container từ Image đó. Hơn nữa, trung tâm Docker có hàng ngàn Image được tạo bởi người dùng và bạn có thể kéo những Image đó xuống máy chủ của mình dựa trên yêu cầu ứng dụng của bạn. Tôi sẽ đề cập đến việc triển khai Docker thực tế hơn trong loạt bài viết sắp tới.
0 Nhận xét