Docker Là Gì Những Chuyện Bạn Chưa Biết Về Docker

Tại Sao Docker Ngày Càng Phổ Biến?

Ví dụ: Khi bạn nhận được một Project mới. Bạn hí ha hí hửng bắt tay vào công việc. Nhưng bạn chợt nhận ra một điều là có quá nhiều thứ cơ bản bạn đã làm đi làm lại rất nhiều lần rồi.

Vậy vấn đề đặt ra là ước gì mình có sẵn những thứ đó. Như những miếng ghép lego. Bạn chỉ cần ráp lại là có thể phát triển mà không cần phải xây dựng lại từ đầu. Thì Docker sinh ra để giải quyết vấn đề đó.

Docker nói đơn giản là một môi trường ảo hóa chưa đầy đủ những cài đặt mà bạn cần để xây dựng Project.

Nói thì nghe đơn giản đúng không nào? Nhưng bài viết này chúng ta sẽ đi sâu vào những ứng dụng của Docker.

Lịch Sử Ra Đời Của Docker

Containerlization là gì?

Như các bạn cũng biết một máy tính muốn chạy được thì cần 3 thứ đó chính là:

  • Máy chủ vật lý.
  • Hệ điều hành(OS).
  • Application

Khi một máy tính có cấu hình khủng đến mức nào, thì khi bạn chỉ mở file word thì chỉ tốn nhiêu đó tài nguyên. Tài nguyên không sử dụng sẽ bị lãng phí. Vậy làm sao để tận dụng tối đa tài nguyên của máy tính bây giờ?

Vì vậy công nghệ ảo hóa Virtualization ra đời.

Công nghệ ảo hóa virtualization
Công nghệ ảo hóa virtualization

Bạn có thể đã nghe tới cái tên Virtualbox hay VMware rồi đúng không, đó đó chính nó đó. Với công nghệ này, trên một máy chủ vật lý mình có thể tạo được nhiều OS, tận dụng tài nguyên đã tốt hơn nhưng lại nảy sinh vấn đề tiếp.

Vấn đề đó là phải phải cung cấp cứng tài nguyên cho máy ảo đó ( cung cấp cứng nghĩa là bạn phải chia sẻ tài nguyên máy thật cho máy ảo, dù máy ảo không làm gì hết). Vì phải cung cấp cứng tài nguyên cho máy ảo nên việc khởi động máy lên rất lâu.

Vì vậy, công nghệ tiếp theo ra đời đó chính là Containerlization 

Công nghệ containerlization
Công nghệ containerlization

Công nghệ này có nhiều ưu điểm hơn Virtualization. 

Ưu điểm của công nghệ này chính là tài nguyên sẽ được chia sẻ với nhau. Và chia sẻ tài nguyên với máy chủ. Xài nhiêu lấy bấy nhiêu. Điểm nổi bật nhất của containerlization là nó sử dụng các container

Nếu các bạn còn nghi ngờ về công nghệ này thì đừng lo nhé. Vì ngay cả Google cũng đã, đang và sẽ sử dụng rộng rãi và phát triển mạnh mẽ.

Container là gì ?

Các phần mềm, chương trình sẽ được Container Engine ( là một công cụ ảo hóa tinh gọn được cài đặt trên host OS) đóng gói thành các container.

Thế Container là gì, nó là một giải pháp để chuyển giao phần mềm một cách đáng tin cậy giữa các môi trường máy tính khác nhau bằng cách:

  • Tạo ra một môi trường chứa mọi thứ mà phần mềm cần để có thể chạy được.
  • Không bị các yếu tố liên quan đến môi trường hệ thống làm ảnh hưởng tới.
  • Cũng như không làm ảnh hưởng tới các phần còn lại của hệ thống.

Bạn có thể hiểu là ruby, rails, mysql … kia được bỏ gọn vào một hoặc nhiều cái thùng (container), ứng dụng của bạn chạy trong những chiếc thùng đó, đã có sẵn mọi thứ cần thiết để hoạt động, không bị ảnh hưởng từ bên ngoài và cũng không gây ảnh hưởng ra ngoài.

Các tiến trình (process) trong một container bị cô lập với các tiến trình của các container khác trong cùng hệ thống tuy nhiên tất cả các container này đều chia sẻ kernel của host OS (dùng chung host OS).

Đây một nền tảng mở dành cho các lập trình viên, quản trị hệ thống dùng để xây dựng, chuyển giao và chạy các ứng dụng dễ dàng hơn. Ví dụ, bạn có một app java, bạn sẽ không cần cài đặt JDK vào máy thật để chạy app đó, chỉ cần kiếm container đã được setting tương ứng cho app về, bật nó lên, cho app chạy bên trong môi trường container đó, vậy là ok. Khi không sài nữa thì tắt hoặc xóa bỏ container đó đi, không ảnh hưởng gì tới máy thật của bạn.

Ưu điểm:

  • Linh động: Triển khai ở bất kỳ nơi đâu do sự phụ thuộc của ứng dụng vào tầng OS cũng như cơ sở hạ tầng được loại bỏ.
  • Nhanh: Do chia sẻ host OS nên container có thể được tạo gần như một cách tức thì. Điều này khác với vagrant – tạo môi trường ảo ở level phần cứng, nên khi khởi động mất nhiều thời gian hơn.
  • Nhẹ: Container cũng sử dụng chung các images nên cũng không tốn nhiều disks.
  • Đồng nhất :Khi nhiều người cùng phát triển trong cùng một dự án sẽ không bị sự sai khác về mặt môi trường.
  • Đóng gói: Có thể ẩn môi trường bao gồm cả app vào trong một gói được gọi là container. Có thể test được các container. Việc bỏ hay tạo lại container rất dễ dàng.

Nhược điểm:

Xét về tính an toàn:

  • Do dùng chung OS nên nếu có lỗ hổng nào đấy ở kernel của host OS thì nó sẽ ảnh hưởng tới toàn bộ container có trong host OS đấy.
  • Ngoài ra hãy thử tưởng tượng với host OS là Linux, nếu trong trường hợp ai đấy hoặc một ứng dụng nào đấy có trong container chiếm được quyền superuser, điều gì sẽ xảy ra? Về lý thuyết thì tầng OS sẽ bị crack và ảnh hưởng trực tiếp tới máy host bị hack cũng như các container khác trong máy đó (hacker sử dụng quyền chiếm được để lấy dữ liệu từ máy host cũng như từ các container khác trong cùng máy host bị hack chẳng hạn).

Docker ra đời

Công nghệ ảo hóa (virtualization) thì ta có thể dùng công cụ Virtualbox hay VMware thế còn đối với containerlization thì dùng gì đây ? Google họ dùng gì ?

Oh mình không biết được, mỗi một ông lớn có một cách để áp dụng công nghệ này và họ private source code.

Gần đây, mà cũng lâu rồi 😄 Có một công ty tiến hành public source code của họ về công nghệ này, họ tung ra sản phẩm mang tên là Docker và nhận được nhiều sự chú ý.

Sau đó công ty cũng đổi tên thành Docker luôn. Công ty này cung cấp công cụ Docker free nhưng họ kiếm được rất nhiều tiền từ những dịch vụ khác đi kèm với nó.

Với sự bùng nổ của việc sử dụng container cùng với những lợi ích lớn mà nó mang lại, gã khổng lồ phần mềm Microsoft không muốn bỏ qua cơ hội màu mỡ này với việc cho ra mắt tính năng mới có tên Windows Container.

  • Các bạn có thể tham khảo, áp dụng công cụ Windows Container của công ty Microsoft cho Windows tại đây.
  • Còn phạm vi bài viết này xin giới hạn lại áp dụng sản phẩm Docker của công ty Docker cho Linux.

Đó, dân ta phải biết sử Tây là thế đó, chứ cứ lao vào học Docker luôn rồi cũng chẳng biết nó sinh đẻ thế nào, từ đâu mà ra, có anh em họ hàng gì không ?

Leave a Reply

avatar