Cách sử dụng Docker một cách thực tế (phần 1 - Giới thiệu)

theanh

Administrator
Nhân viên

Phần 1: Giới thiệu về thuật ngữ​

Lời nói đầu​

Không phải là tình huống hiếm gặp, đối với những người áp dụng sớm các khái niệm và công nghệ mới được giới thiệu, hoàn toàn bối rối khi chúng có thể thay đổi cơ bản cách phát triển và cung cấp dịch vụ. Đặc biệt là khi mọi người đều nói về thứ gì đó như Docker và nó tuyệt vời và thay đổi cuộc chơi như thế nào. Sự nhầm lẫn này xảy ra khi chúng ta thử nghiệm mọi thứ ngay từ đầu và vội vàng kiểm tra chúng mà không nắm được toàn bộ khái niệm và bối cảnh của công nghệ mới được giới thiệu này.

Đây là lý do tại sao bạn có thể đã từ bỏ toàn bộ xu hướng sử dụng container Linux hoặc vì bạn đã đọc một số bài viết gây tranh cãi từ những người đồng tình và phản đối. Trong phần đầu tiên này, trong loạt bài viết, chúng tôi sẽ cố gắng hết sức để làm rõ mọi thứ và đưa mọi thứ vào đúng góc nhìn cho bất kỳ nhà phát triển, quản trị viên hệ thống, kỹ sư Q/A hoặc thậm chí là những người đam mê chỉ cần nguồn cảm hứng phù hợp để sử dụng các container Linux và giải quyết các vấn đề CNTT đặc biệt của họ.

Chúng ta sẽ bắt đầu từ đầu, với một số mô tả cần thiết về các sự kiện và khái niệm lịch sử, sau đó tôi sẽ trình bày cách chúng ta có thể bắt đầu làm việc với các container Docker. Theo cách này, bạn sẽ có thể hiểu được "điều gì dẫn đến việc tạo ra các container", "các khối xây dựng là gì" và "chúng hoạt động như thế nào".


Các container ra đời như thế nào​

Trong nhiều năm, các máy chủ đã được sử dụng như hiện tại, với một cấu hình phần cứng duy nhất, chứa một hệ điều hành duy nhất (gọi tắt là HĐH), để cung cấp hàng nghìn trang web và một số phiên bản đầu tiên của phần mềm doanh nghiệp trên cùng một máy.

Để đạt được khả năng mở rộng cần thiết, các công ty cần mua phần cứng mới và lập kế hoạch cẩn thận các bước cho bất kỳ triển khai mới nào. Trong giai đoạn này, tự động hóa đang ở giai đoạn đầu và hầu hết các cấu hình được thực hiện thủ công.

Ảo hóa​

Sau đó, ảo hóa xuất hiện, cho phép mọi người sử dụng cùng một máy chủ phần cứng để họ có thể tạo ra nhiều máy chủ ảo cho các mục đích khác nhau và bán chúng riêng lẻ. Điều này không chỉ giúp giảm đáng kể chi phí sở hữu phần cứng máy chủ mà còn cung cấp phương tiện để tự động hóa và dễ dàng quản lý hàng trăm phiên bản máy chủ.

Ảo hóa thực chất là lắp ráp các thành phần phần cứng như CPU, RAM, Đĩa, Card mạng, v.v. được mô phỏng bằng một phần mềm đặc biệt. Nó giống như việc xây dựng một chiếc PC, với các thành phần cốt lõi được đề cập ở trên, trong một hệ điều hành và lắp ráp chúng để hoạt động như thể đó là một chiếc PC thực sự. Theo cách này, PC ảo trở thành "khách" bên trong PC thực tế, được gọi là máy chủ với hệ điều hành của nó.



Mặc dù ảo hóa phần cứng đã được giới thiệu cách đây khoảng 10 năm, nhưng nó đã được sử dụng rộng rãi trên nhiều loại máy chủ khác nhau bởi các nhà phát triển và quản trị viên hệ thống, sử dụng tính năng KVM (Máy ảo dựa trên nhân) được tích hợp trong Nhân Linux kể từ năm 2007. Với tiện ích mở rộng "VT-x" của Intel và "AMD-V" của AMD giúp tạo ra bất kỳ số lượng hệ điều hành ảo hóa nào (chỉ giới hạn bởi tài nguyên phần cứng), mọi nhà phát triển đều có thể tạo nhiều máy ảo (gọi tắt là VM) với hệ điều hành, thậm chí với các phiên bản khác nhau của chúng. Theo cách này, họ có thể kiểm tra các ứng dụng của mình mà không cần phải mua toàn bộ giàn máy mới hoặc nhiều giàn máy mới, tùy thuộc vào hệ điều hành họ cần.

Một trong những lợi thế lớn của Ảo hóa là khả năng tạo ảnh chụp nhanh. Ảnh chụp nhanh là trạng thái của máy ảo tại một thời điểm chính xác. Bạn có thể nghĩ về nó như trạng thái "đông cứng" của máy ảo tại một thời điểm cụ thể. Theo cách này, nhà phát triển hoặc quản trị viên hệ thống có thể tạo máy ảo, cài đặt hệ điều hành cụ thể và các công cụ cần thiết, sau đó tạo ảnh chụp nhanh từ toàn bộ máy. Sau đó, anh ta có thể bắt đầu thử nghiệm, cấu hình hoặc bất kỳ tác vụ nào cần hoàn thành, sau đó quay lại ảnh chụp nhanh trước đó ngay lập tức, tại bất kỳ thời điểm nào.

Ngoài ra, Máy ảo có thể được di chuyển từ máy chủ này sang máy chủ khác và tiếp tục trạng thái hoạt động của chúng mà không cần bất kỳ cấu hình đặc biệt nào. Điều này là do toàn bộ máy ảo thực sự là một số tệp lớn thường được gọi là hình ảnh. Bạn có thể nghĩ về hình ảnh, giống như tệp ISO của bản phân phối Linux yêu thích của bạn. Vì tệp ISO chứa tất cả các thành phần thiết yếu để thực sự chạy toàn bộ hệ điều hành từ USB/DVD trực tiếp, giống như cách ảnh máy ảo chứa hệ điều hành và các thành phần phần cứng ảo.

Tất cả những điều trên đã tạo ra toàn bộ ngành công nghiệp lưu trữ Máy chủ riêng ảo (VPS) nơi khách hàng có thể ngay lập tức khởi chạy các hình ảnh được cấu hình sẵn của máy chủ cho bất kỳ mục đích nào. Các nhà cung cấp VPS này thường có 10 hoặc 20 ảnh chụp nhanh của VM trên máy chủ lưu trữ chính được sao chép nhiều lần theo yêu cầu của khách hàng để cung cấp cho họ các máy chủ ảo mà họ cần

Containers​

Như bạn có thể tưởng tượng, Máy ảo là toàn bộ hệ điều hành chạy bên trong hệ điều hành lưu trữ. Các hệ điều hành khách, mặc dù bị cô lập, nhưng chúng chia sẻ và sử dụng các tài nguyên phần cứng của máy chủ lưu trữ. Đôi khi, có nhiều hệ điều hành khách đang chạy cùng một ngăn xếp toàn bộ của một hệ điều hành cụ thể.



Tình huống này đã tạo cơ hội cho các nhà phát triển hạt nhân Linux và tin tặc đưa ra một ý tưởng được gọi là ảo hóa quy trình nhẹ. Vì vậy, thay vì sử dụng toàn bộ hệ điều hành, họ có thể cắt giảm các thành phần "không cần thiết" của hệ điều hành ảo để tạo ra phiên bản tối giản của nó. Điều này dẫn đến việc tạo ra LXC (Linux Container).

Trước khi đào sâu hơn, chúng ta nên đề cập rằng ảo hóa quy trình nhẹ không phải là điều mới mẻ. Solaris có Zones, BSD có jails và còn nhiều công nghệ tương tự khác như OpenVZ. Vấn đề là chúng thường xuyên thay đổi tên hoặc mục đích khi cùng một khái niệm cơ sở được sử dụng trên các dự án khác. Đúng là không phải tất cả đều giống nhau, nhưng các nguyên tắc cơ bản thì khá giống nhau. Tất cả đều muốn cô lập, triển khai và tạo ra một cách dùng một lần để cung cấp các dịch vụ phần mềm mà không phải mất công xây dựng lại mọi thứ và mọi lúc từ dưới lên.

Dự án LXC khác với các Máy ảo đã đề cập ở trên ở chỗ nó là môi trường ảo hóa cấp hệ điều hành chứ không phải môi trường ảo hóa phần cứng. Cả hai đều thực hiện cùng một việc, nhưng LXC cung cấp ảo hóa cấp hệ điều hành thông qua một môi trường ảo có quy trình và không gian mạng riêng, thay vì tạo ra một máy ảo hoàn chỉnh. Do đó, HĐH ảo LXC có yêu cầu tài nguyên tối thiểu và khởi động chỉ trong vài giây.

Như bạn có thể thấy trong hình ảnh sau, Ubuntu ảo LXC ở bên trái sử dụng 11MB trong cài đặt mặc định.


Docker​

Như thường lệ, mọi thứ không dừng lại chỉ bằng cách loại bỏ các phần không cần thiết của HĐH. Nhiều công nghệ khác nhau đã ra đời bằng cách đẩy ranh giới của ảo hóa quy trình nhẹ lên xa hơn nữa. Vào năm 2013, các nhà phát triển của dotCloud (một công ty sau này đổi tên thành Docker Inc.) đã giới thiệu Docker.

Docker là một công cụ mã nguồn mở có trọng tâm chính là tự động hóa việc triển khai các ứng dụng bên trong các vùng chứa phần mềm và tự động hóa ảo hóa cấp hệ điều hành trên Linux. Một vùng chứa docker, không giống như máy ảo và lxc, không yêu cầu hoặc bao gồm một hệ điều hành riêng biệt. Thay vào đó, nó dựa vào chức năng của hạt nhân Linux và sử dụng tính năng cô lập tài nguyên.

Các vùng chứa docker được tạo từ các hình ảnh docker (hãy nhớ các ảnh chụp nhanh). Bạn có thể tưởng tượng một container docker là trạng thái trực tiếp của một ứng dụng web chạy từ một tệp iso. Nhưng lần này, iso, trong ví dụ của chúng ta là tương đương với hình ảnh docker, chỉ chứa ứng dụng và các phụ thuộc của nó.



Một tính năng tuyệt vời của docker, mà chúng ta sẽ thảo luận trong phần thứ hai, là tệp docker. Tệp docker là công thức chứa tất cả các bước cần thiết để tạo một hình ảnh docker. Có rất nhiều tệp docker "sẵn sàng sử dụng" mà bạn có thể tùy chỉnh hoặc sử dụng chúng như hiện tại.

Tóm tắt​

Như bạn có thể tưởng tượng, phạm vi chuyển từ máy chủ hoàn chỉnh sang ảo hóa hệ điều hành và sau đó là container là loại bỏ gánh nặng xây dựng, triển khai và duy trì toàn bộ hệ điều hành khi những gì chúng cần chỉ là lớp ứng dụng.

Với phần giới thiệu này, chúng tôi đã cố gắng trình bày cho bạn một số sự kiện cơ bản dẫn chúng tôi đến việc tạo ra các container Docker. Tôi cũng đã cố gắng đơn giản hóa một số khái niệm để bạn có thể hiểu được sự khác biệt giữa các công nghệ ảo hóa khác nhau và nơi chúng có thể áp dụng.

Phần thứ hai sẽ được xuất bản vào tuần tới, sẽ trình bày chính xác cách chúng ta có thể cài đặt và sử dụng các container Docker theo cách thực tế, vì vậy hãy theo dõi nhé.
 
Back
Bên trên