Container là gì và tại sao bạn cần chúng?
Containers là một giải pháp cho vấn đề làm thế nào để phần mềm chạy một cách đáng tin cậy khi được chuyển từ môi trường máy tính này sang môi trường máy tính khác.
Docker đã bùng nổ vào năm 2013 và nó đã gây ra sự phấn khích trong giới CNTT kể từ đó.
Công nghệ container do Docker cung cấp hứa hẹn sẽ thay đổi cách thức hoạt động của CNTT giống như cái cách mà công nghệ ảo hóa đã làm một vài năm trước đây.
1. Container là gì và tại sao bạn cần chúng?
Containers là một giải pháp cho vấn đề làm thế nào để phần mềm chạy một cách đáng tin cậy khi được chuyển từ môi trường máy tính này sang môi trường máy tính khác. Điều này có thể là từ máy tính xách tay của nhà phát triển đến môi trường thử nghiệm, từ môi trường tiền sản xuất đến môi trường sản xuất và có thể từ máy vật lý trong trung tâm dữ liệu đến máy ảo trên cloud.
Các vấn đề phát sinh khi môi trường phần mềm hỗ trợ là không giống nhau, nhà sáng tạo Docker, Solomon Hykes nói. “Bạn sẽ thử nghiệm bằng Python 2.7, và sau đó nó sẽ chạy trên Python 3 trong môi trường production và điều gì đó kỳ lạ sẽ xảy ra. Hoặc bạn sẽ dựa vào hành vi của một phiên bản nhất định của thư viện SSL nhưng thay vào đó, trên thực tế một phiên bản khác sẽ được cài đặt . Bạn sẽ chạy thử nghiệm trên Debian và chạy trên môi trường production là Red Hat và tất cả những điều kỳ lạ xảy ra. “
2. Làm thế nào để container giải quyết vấn đề này?
Nói một cách đơn giản, một container bao gồm toàn bộ môi trường trong thời gian chạy: một ứng dụng với tất cả các thư viện, các tệp tin nhị phân, các tệp tin cấu hình cần thiết để chạy ứng dụng đó sẽ được gói vào một gói. Bằng cách này, vấn đề về sự khác biệt trong các hệ điều hành và cơ sở hạ tầng cơ bản được khắc phục và loại bỏ.
3. Sự khác biệt giữa container và ảo hóa là gì?
Với công nghệ ảo hóa, các gói là một máy ảo và nó bao gồm toàn bộ hệ điều hành cũng như ứng dụng. Một máy chủ vật lý chạy ba máy ảo sẽ có một trình ảo hóa và ba hệ điều hành riêng biệt chạy trên nó.
Ngược lại, một máy chủ chạy ba ứng dụng được đóng gói với Docker chạy một hệ điều hành và mỗi container chia sẻ nhân hệ điều hành với các container khác. Các phần được chia sẻ của hệ điều hành có chức năng chỉ cho phép được đọc, trong khi mỗi container có các phân vùng riêng (nghĩa là cách truy cập vào bộ chứa) cho quá trình ghi. Điều đó có nghĩa là các container nhẹ hơn nhiều và sử dụng ít tài nguyên hơn nhiều so với máy ảo.
4. Những lợi ích của containers là gì?
Một container có thể chỉ có kích thước hàng chục megabyte, trong khi đó một máy ảo với toàn bộ hệ điều hành của nó có thể có kích thước vài gigabyte. Bởi vì điều này, một máy chủ duy nhất có thể lưu trữ nhiều container hơn nhiều so với máy ảo.
Một lợi ích lớn khác là các máy ảo có thể mất vài phút để khởi động hệ điều hành của chúng và bắt đầu chạy các ứng dụng mà chúng lưu trữ, trong khi các ứng dụng được đóng gói trong 1 container có thể được khởi động gần như ngay lập tức. Điều đó có nghĩa là các container có thể được khởi tạo theo kiểu “just in time” khi chúng cần thiết và có thể biến mất khi không còn cần thiết nữa, theo đó tài nguyên được giải phóng trên máy chủ của chúng.
Một lợi ích thứ ba là container hóa cho phép mô đun hóa lớn hơn. Thay vì chạy toàn bộ một ứng dụng phức tạp bên trong một container, ứng dụng có thể được chia thành các mô-đun (chẳng hạn như cơ sở dữ liệu, giao diện người dùng, v.v.). Đây là cách tiếp cận được gọi là microservice. Các ứng dụng được xây dựng theo cách này dễ quản lý hơn vì mỗi mô-đun tương đối đơn giản và các thay đổi có thể được thực hiện cho các mô-đun mà không phải xây dựng lại toàn bộ ứng dụng. Vì các thùng chứa rất nhẹ, các mô-đun riêng lẻ (hoặc microservice) chỉ có thể được khởi tạo khi chúng cần thiết và có sẵn gần như ngay lập tức.