[Lưu ý, câu trả lời này tập trung vào vùng chứa Linux và có thể không áp dụng đầy đủ cho các hệ điều hành khác. ]
Container là gì?
Đó là một Ứng dụng : Một vùng chứa là một cách để chạy các ứng dụng được tách biệt với nhau. Thay vì ảo hóa phần cứng để chạy nhiều hệ điều hành, bộ chứa dựa vào việc ảo hóa hệ điều hành để chạy nhiều ứng dụng. Điều này có nghĩa là bạn có thể chạy nhiều vùng chứa hơn trên cùng một phần cứng so với máy ảo vì bạn chỉ có một bản sao của HĐH đang chạy và bạn không cần phân bổ trước bộ nhớ và lõi CPU cho từng phiên bản ứng dụng của mình. Cũng giống như bất kỳ ứng dụng nào khác, khi một vùng chứa cần CPU hoặc Bộ nhớ, nó sẽ phân bổ chúng và sau đó giải phóng chúng khi hoàn tất, cho phép các ứng dụng khác sử dụng các tài nguyên giới hạn đó sau này.
Chúng tận dụng không gian tên hạt nhân : Theo mặc định, mỗi vùng chứa sẽ nhận được một môi trường nơi sau đây là không gian tên:
- Mount: filesystems,
/
trong container sẽ khác với /
trên host.
- PID: process id's, pid 1 trong container là ứng dụng đã khởi chạy của bạn, pid này sẽ khác khi xem từ máy chủ.
- Mạng: vùng chứa chạy với giao diện loopback riêng (127.0.0.1) và IP riêng theo mặc định. Docker sử dụng các công nghệ như mạng cầu nối Linux để kết nối nhiều vùng chứa với nhau trong mạng lan riêng của chúng.
- IPC: giao tiếp giữa các quy trình
- UTS: điều này bao gồm tên máy chủ
- Người dùng: bạn có thể tùy ý thay đổi tất cả id người dùng để được bù trừ từ id của máy chủ
Mỗi không gian tên này cũng ngăn một vùng chứa nhìn thấy những thứ như hệ thống tệp hoặc quy trình trên máy chủ lưu trữ hoặc trong các vùng chứa khác, trừ khi bạn loại bỏ rõ ràng sự cô lập đó.
Và các công cụ bảo mật linux khác : Các vùng chứa cũng sử dụng các tính năng bảo mật khác như SELinux, AppArmor, Capabilities và Seccomp để hạn chế người dùng bên trong vùng chứa, bao gồm cả người dùng root, có thể thoát khỏi vùng chứa hoặc tác động tiêu cực đến máy chủ.
Đóng gói ứng dụng của bạn với các phụ thuộc của chúng để có thể di động : Đóng gói ứng dụng vào một vùng chứa bao gồm việc lắp ráp không chỉ bản thân ứng dụng đó mà tất cả các phụ thuộc cần thiết để chạy ứng dụng đó, thành một hình ảnh di động. Hình ảnh này là hệ thống tệp cơ sở được sử dụng để tạo vùng chứa. Vì chúng tôi chỉ cô lập ứng dụng, hệ thống tệp này không bao gồm hạt nhân và các tiện ích hệ điều hành khác cần thiết để ảo hóa toàn bộ hệ điều hành. Do đó, hình ảnh cho một vùng chứa phải nhỏ hơn đáng kể so với hình ảnh cho một máy ảo tương đương, giúp việc triển khai tới các nút trên toàn mạng nhanh hơn. Do đó, các thùng chứa đã trở thành một lựa chọn phổ biến để triển khai các ứng dụng vào đám mây và các trung tâm dữ liệu từ xa.
Nó có thể thay thế một máy ảo dành riêng cho phát triển không?
Điều đó phụ thuộc : Nếu môi trường phát triển của bạn đang chạy Linux và bạn không cần quyền truy cập vào các thiết bị phần cứng hoặc có thể chấp nhận quyền truy cập trực tiếp vào phần cứng vật lý, thì bạn sẽ thấy việc chuyển đổi sang vùng chứa Linux khá dễ dàng. Mục tiêu lý tưởng cho vùng chứa docker là các ứng dụng như API dựa trên web (ví dụ: ứng dụng REST), mà bạn truy cập qua mạng.
Nói một cách đơn giản, mục đích của việc sử dụng Docker trong các công ty là gì? Lợi thế chính ?
Dev hoặc Ops : Docker thường được đưa vào môi trường theo một trong hai con đường. Các nhà phát triển đang tìm cách phát triển nhanh hơn và kiểm tra cục bộ ứng dụng của họ cũng như các hoạt động tìm cách chạy nhiều khối lượng công việc hơn trên ít phần cứng hơn so với khả năng có thể với máy ảo.
Hoặc Devops : Một trong những mục tiêu lý tưởng là tận dụng Docker ngay lập tức từ công cụ triển khai CI / CD, biên dịch ứng dụng và ngay lập tức xây dựng một hình ảnh được triển khai để phát triển, CI, prod, v.v. Các container thường giảm thời gian di chuyển ứng dụng từ khi đăng ký mã cho đến khi mã có sẵn để thử nghiệm, giúp các nhà phát triển hoạt động hiệu quả hơn. Và khi được thiết kế đúng cách, cùng một hình ảnh đã được kiểm tra và phê duyệt bởi các nhà phát triển và các công cụ CI có thể được triển khai trong sản xuất. Vì hình ảnh đó bao gồm tất cả các phụ thuộc của ứng dụng, nên nguy cơ xảy ra sự cố nào đó trong quá trình sản xuất đã hoạt động trong quá trình phát triển giảm đáng kể.
Khả năng mở rộng : Một lợi ích quan trọng cuối cùng của các thùng chứa mà tôi sẽ đề cập là chúng được thiết kế cho khả năng mở rộng theo chiều ngang. Khi bạn có các ứng dụng không trạng thái đang tải nặng, vùng chứa sẽ dễ dàng và nhanh hơn nhiều để mở rộng quy mô do kích thước hình ảnh nhỏ hơn và giảm chi phí. Vì lý do này, bạn thấy các vùng chứa đang được sử dụng bởi nhiều công ty dựa trên web lớn hơn, như Google và Netflix.