Một container là gì?


23

Có một số câu hỏi về container , chẳng hạn như:

Câu hỏi của tôi :

  • Cái gì thực sự là một "container" (trong bối cảnh của DevOps)?
  • Tại sao chúng được sử dụng?

Câu trả lời:


18

Điều đầu tiên cần biết về một container là:

Đó là, đầu tiên và quan trọng nhất, một quá trình.

Khi đã hiểu, người ta có thể bắt đầu hiểu cách các container so sánh và tương phản với các máy ảo. Các container và VM đều chia sẻ sự cô lập khỏi máy chủ của chúng. Phương pháp cách ly là sự khác biệt quan trọng.

Các quy trình chứa sử dụng các phần mở rộng cho máy chủ nhân hệ điều hành mà chúng chạy để tự cô lập với các quy trình khác. Các phần mở rộng khác cũng cung cấp cách ly đĩa và tài nguyên. Các container chia sẻ kernel và bộ nhớ của chúng với HĐH máy chủ.

Máy ảo sử dụng một trình ảo hóa để cô lập máy ảo khỏi máy chủ của chúng. Đây là một lớp phần mềm chuyển tiếp yêu cầu tài nguyên từ "khách" (VM) đến phần cứng. Cách ly đĩa được cung cấp bởi ảo hóa đĩa. Máy ảo không chia sẻ kernel với máy chủ - chúng tải hạt nhân của riêng chúng vào không gian bộ nhớ dành riêng cho VM.

Một tác động quan trọng của sự khác biệt này là một container phải tương thích kernel với máy chủ của nó. Ví dụ: không thể chạy bộ chứa Windows Nano Server trên máy chủ Linux hoặc bộ chứa Ubuntu trực tiếp trên máy chủ Windows. Ngược lại, Virtual Machines có thể chạy bất kỳ kernel nào bất kể HĐH máy chủ. Khi chạy bộ chứa Linux trên máy chủ Windows, Docker chạy bộ chứa trong máy ảo Linux.

Sự khác biệt trong vận hành là ở sự nhanh nhẹn: các container bắt đầu và dừng lại nhanh như một quy trình thông thường. Máy ảo "nặng hơn", đòi hỏi các tài nguyên chuyên dụng dành riêng cho chúng và mất nhiều thời gian hơn để bắt đầu và tắt.

Các container cung cấp rất nhiều tính linh hoạt cho mô hình vận hành DevOps:

  • Các container cách ly phụ thuộc thành phần phần mềm. Các nhà phát triển có thể sử dụng các thùng chứa để đảm bảo rằng một mô-đun ứng dụng sẽ hoạt động tốt trên các máy phát triển của họ như trong QA / UA / Sản xuất
  • Các container sử dụng mạng được xác định bằng phần mềm để liên lạc
  • Các định nghĩa về container là khai báo và có thể được kiểm soát nguồn
  • Các hệ thống quản lý vùng chứa (Kubernetes, DC / OS, Swarm) có thể quản lý các nhóm tài nguyên phần cứng (tính toán / RAM / lưu trữ) và các thùng chứa quy mô động

1
Tôi cũng thực hiện 3
gạch

8

Container từ dùng để chỉ một công nghệ ảo hóa nhẹ có sẵn trên các nhân Linux hiện đại, công nghệ này rất giống với các nhà tù FreeBSD.

Một hạt nhân Linux cũ hơn, không chứa được, có thể chạy các tiến trình đồng thời. Một số thuộc tính của hệ thống là riêng tư để xử lý, như môi trường quy trình hoặc bộ nhớ quy trình: chỉ có quá trình sở hữu các thuộc tính này và chính hệ điều hành mới có thể truy cập vào dữ liệu này. (Có rất nhiều sơ hở, như một số triển khai ps , nhưng về cơ bản là đúng!) Một số thuộc tính khác được chia sẻ giữa các quy trình, như hệ thống tệp và giao diện mạng chẳng hạn.

Một hạt nhân Linux hiện đại, có khả năng chứa, có thể xử lý nhiều thuộc tính của hệ thống dưới dạng dữ liệu riêng liên quan đến một quy trình hoặc một nhóm các quy trình. Bối cảnh kết quả là một thùng chứa và thay vì chạy một chương trình trong các thùng chứa ban đầu của Cameron, sử dụng hệ thống tệp và giao diện mạng được khởi tạo bởi hệ điều hành, có thể chạy các quy trình trong các thùng chứa khác, để chúng thấy một hệ thống tệp khác và danh sách khác nhau của các giao diện mạng. Do đó, hai quá trình chạy trong các thùng chứa riêng biệt chỉ thực sự chia sẻ kernel. Bạn có thể quen thuộc với lệnh chroot có thể chạy một quy trình trong hệ thống phân cấp tệp riêng biệt, các thùng chứa đưa ý tưởng đi thêm một vài bước.

Tất nhiên, đây chỉ là một lời giải thích rất thô thiển, nhưng tôi hy vọng nó sẽ giúp làm rõ ý tưởng về các container là gì. Bây giờ, chúng tốt cho cái gì?

Một giao diện phổ biến cho các khả năng chứa của các nhân Linux được triển khai bởi docker, một tiện ích dòng lệnh có thể được sử dụng để tạo ra các vật phẩm đại diện cho các hệ thống tệp ( hình ảnh docker ) và chạy các quy trình trong các thùng chứa nơi các hệ thống tệp này có thể truy cập được. Bộ phần mềm này cũng có thể xây dựng các hệ thống mạng ảo đặc biệt để cho phép một số container giao tiếp trên một mạng riêng.

Các công nghệ dựa trên container thuận tiện để:

  • Mô tả triển khai phức tạp có thể mở rộng .
  • Cung cấp cho các nhà phát triển ứng dụng một môi trường rất giống với môi trường sản xuất.
  • Triển khai mẫu máy chủ bất biến, vì các tạo phẩm phần mềm thường mô tả một hệ điều hành đầy đủ, không chỉ là một gói ứng dụng.

(Như bạn có vẻ quen thuộc với các công nghệ ảo hóa khác như Virtual Box, bạn có thể nhận xét rằng các công nghệ này cũng có thể giải quyết thuận tiện ba điểm trên. Ngày nay, có khá nhiều công nghệ ảo hóa Một số bối cảnh nhất định với sự phổ biến của ngôn ngữ máy tính: có thể phụ thuộc vào giá trị kỹ thuật của từng giải pháp riêng lẻ, nhưng cũng phụ thuộc vào rất nhiều yếu tố mà tôi sẽ chỉ gắn nhãn cơ hội xác thực.


1
Không còn giới hạn với Linux nữa, windows 16 có cùng khả năng
Tensibai

1
Liên kết để hỗ trợ yêu cầu của tôi docs.microsoft.com/en-us/virtualization/windowscontainers/ Đổi
Tensibai

7

Thông thường các container đề cập đến một cái gì đó giống như các container docker đã phổ biến tên

Tôi trích dẫn từ định nghĩa docker:

Sử dụng các thùng chứa, mọi thứ cần thiết để tạo ra một phần mềm chạy được đóng gói vào các thùng chứa bị cô lập. Không giống như VM, các bộ chứa không chứa một hệ điều hành đầy đủ - chỉ cần các thư viện và cài đặt cần thiết để làm cho phần mềm hoạt động là cần thiết.

Việc đặt tên gốc là các thùng chứa linux (lxc) với mục tiêu là cô lập một quy trình khỏi hệ thống máy chủ của nó, mục tiêu đầu tiên là để tránh sự xâm phạm của quá trình chiếm lấy hệ thống máy chủ.

Bây giờ chúng được sử dụng trong một phạm vi rộng hơn. Theo định nghĩa 'container' hiện đại, bạn sẽ ít nhiều phát hành gói cho thời gian chạy đã bao gồm ứng dụng của bạn, nó nằm dưới kho trung gian nếu cần và tất cả các thư viện cần thiết và chắc chắn rằng nó sẽ chạy trên bất kỳ hệ thống tương thích nào.

Ưu điểm thứ hai là nó cho phép sử dụng nhiều ứng dụng có cùng phụ thuộc ở các phiên bản khác nhau mà không phải điều chỉnh nhiều biến môi trường để nó tải đúng ứng dụng.

Không thể đối với hệ thống VM như máy ảo hộp ảo hoặc phiên bản EC2 trên AWS, các thùng chứa chỉ ảo ở cấp hệ thống tệp và chỉ được cách ly trên ngăn xếp bộ nhớ. Họ vẫn chia sẻ cùng một máy chủ và hệ điều hành bên dưới họ sẽ phân xử các cpu tick.

Một máy ảo là ảo ở cấp độ phần cứng và bạn chạy một hệ điều hành bên trong, một container là ảo ở cấp HĐH và bạn chạy một tiến trình bên trong.


1
Hừm, vì vậy một cái gì đó giống như hình ảnh VirtualBox (hoặc bất cứ thứ gì được gọi trong VirtualBox) cũng có thể đủ điều kiện là "thùng chứa", hoặc tôi không hiểu nó?
Pierre.Vriens

Tôi đã quên một phần của câu hỏi, thêm vào sự khác biệt trong khi mở rộng câu trả lời.
Tensibai

3

Từ định nghĩa của AWS :

Các thùng chứa là một phương pháp ảo hóa hệ điều hành cho phép bạn chạy một ứng dụng và các phụ thuộc của nó trong các quy trình phân tách tài nguyên. Các thùng chứa cho phép bạn dễ dàng đóng gói mã, cấu hình và các phụ thuộc của ứng dụng thành các khối xây dựng dễ sử dụng, mang lại sự nhất quán về môi trường, hiệu quả hoạt động, năng suất của nhà phát triển và kiểm soát phiên bản. Các container có thể giúp đảm bảo các ứng dụng triển khai nhanh chóng, đáng tin cậy và nhất quán bất kể môi trường triển khai. Các container cũng cung cấp cho bạn quyền kiểm soát chi tiết hơn đối với các tài nguyên giúp cơ sở hạ tầng của bạn được cải thiện hiệu quả.

Containerizing là đóng gói tất cả các nhu cầu thiết yếu cần thiết để thực hiện một nhiệm vụ / môi trường cụ thể để nó tự cung cấp và có thể chạy trên bất kỳ nền tảng nào, điều này làm mất rất nhiều đau đớn, khi thiết lập và cài đặt công cụ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.