Khác nhau giữa Vagrant và Docker và Virtual Machine
Virtual Machine: Virtual machine hay còn gọi là phần mềm tạo máy ảo. Phần mềm này cho phép tạo lập và chạy một hệ điều hành (hay máy ảo) trên máy chủ (host machine). Ví dụ máy tính bạn chạy Windows nhưng cần dev app chạy trên Linux thì bạn có thể sử dụng VirtualBox hoặc VMware để tạo một máy ảo Linux trên Windows. VirtualBox là phần mềm để tạo máy ảo phổ biến hiện nay.
Vagrant: Là một công nghệ dựa trên nền ảng của Virtual Machine tuy nhiên cung cấp thêm tính năng để cấu hình và thiết lập môi trường cho các máy ảo (hay các box). Ví dụ team của bạn có 15 người đang sử dụng máy Windows nhưng cần phát triển ứng dụng chạy trên server Linux. Server này cần cài đặt Apache web server, PHP, MySQL... Sử dụng Vagrant bạn có thể tạo một box có sẵn các phần mềm trên (và cấu hình cần thiết nếu có) để khi 15 team member muốn tạo môi trường giả lậ họ chỉ cần sử dụng box bạn đã cấu hình mà không cần tạo box và cài lại từng phần mềm một (tưởng tương team có 100 nhân viên thì việc này sẽ giảm thiểu được nhiều thời gian đáng kể).
Docker: Đây là công nghệ đang được đánh giá là tương lai của công nghệ ảo hoá (future of virtualization). Khác biệt lớn của Docker và Vagrant (hay Virtual Machine nói chung) đó là tiết kiệm đáng kể resource sử dụng. Với docker bạn có thể chạy 20 container (tương tự như một hệ điều hành nhỏ) trên cùng một máy host (host machine) điều mà nếu sử dụng Vagrant sẽ cần một máy chủ với cấu hình cực khủng. Docker làm được điều này là bởi vì khác với Virtual Machine ở chỗ thay vì tách biệt giữa hai môi trường guest và host, thì các container của Docker chia sẻ các resource với host machine.
-
Ngày lâu lâu rồi, mô hình máy chủ thường là
máy chủ vật lý
+hệ điều hành(OS)
+application
.Vấn đề gặp phải ở đây là lãng phí tài nguyên, một máy chủ chỉ cài được một OS, cho dù có ổ cứng khủng, ram khủng thì cũng không tận dụng hết lợi thế.
-
Sau đó ra đời công nghệ ảo hóa
vitualization
.Bạn có thể đã nghe tới cái tên Vitualbox 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ề tài nguyên
: Khi bạn chạy máy ảo, bạn phải cung cấp "cứng"dung lượng ổ cứng
cũng nhưram
cho máy ảo đó, bật máy ảo lên để đó không làm gì thì máy thật cũng phải phân phát tài nguyên.
Ví dụ khi tạo một máy ảo ram 2GB trên máy thật ram 4GB, lúc này máy thật sẽ mất 2GB ram cho máy ảo, kể cả khi máy ảo không dùng hết 2GB ram, đó là một sự lãng phí.
Về thời gian
: Việc khởi động, shutdown khá lâu, có thể lên tới hàng phút.
-
Ở bước tiến hóa tiếp theo, người ta sinh ra công nghệ
containerlization
Với công nghệ này, trên một máy chủ vật lý, ta sẽ sinh ra được nhiều máy con (giống với công nghệ ảo hóa
vitualization
), nhưng tốt hơn ở chỗ là các máy con này (Guess OS) đềudùng chung
phần nhân của máy mẹ (Host OS) và chia sẻ với nhau tài nguyên máy mẹ.Có thể nói là khi nào cần tài nguyên thì được cấp, cần bao nhiêu thì cấp bấy nhiêu, như vậy việc tận dụng tài nguyên đã tối ưu hơn. Điểm nổi bật nhất của
containerlization
là nó sử dụng cáccontainer
.
2.2 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).
(DVMS tổng hợp)
Có thể bạn quan tâm:
- Cá tính của bạn phù hợp với ngôn ngữ nào?
- Java vs. Node.js: Chị -Em tương tàn?
- Tự tạo plugin jQuery, tại sao không?
- Bao lâu thì nên cập nhật app 1 lần?
- 3 câu lệnh hữu ích trong Javascript mà bạn nên biết
- AWD với RWD
- Java đang giãy chết?
- Quy tắc đầu tiên trong lập trình: Nó luôn là lỗi của bạn
- 3 điều bạn chưa biết về JavaScript Arrays
- WordPress 4.6 có gì mới?
- Test ứng dụng ( mobile apps ) không cần mua thiết bị
- Tăng tốc mysql
DVMS chuyên:
- Tư vấn, xây dựng, chuyển giao công nghệ Blockchain, mạng xã hội,...
- Tư vấn ứng dụng cho smartphone và máy tính bảng, tư vấn ứng dụng vận tải thông minh, thực tế ảo, game mobile,...
- Tư vấn các hệ thống theo mô hình kinh tế chia sẻ như Uber, Grab, ứng dụng giúp việc,...
- Xây dựng các giải pháp quản lý vận tải, quản lý xe công vụ, quản lý xe doanh nghiệp, phần mềm và ứng dụng logistics, kho vận, vé xe điện tử,...
- Tư vấn và xây dựng mạng xã hội, tư vấn giải pháp CNTT cho doanh nghiệp, startup,...
Vì sao chọn DVMS?
- DVMS nắm vững nhiều công nghệ phần mềm, mạng và viễn thông. Như Payment gateway, SMS gateway, GIS, VOIP, iOS, Android, Blackberry, Windows Phone, cloud computing,…
- DVMS có kinh nghiệm triển khai các hệ thống trên các nền tảng điện toán đám mây nổi tiếng như Google, Amazon, Microsoft,…
- DVMS có kinh nghiệm thực tế tư vấn, xây dựng, triển khai, chuyển giao, gia công các giải pháp phần mềm cho khách hàng Việt Nam, USA, Singapore, Germany, France, các tập đoàn của nước ngoài tại Việt Nam,…
Quý khách xem Hồ sơ năng lực của DVMS tại đây >>
Quý khách gửi yêu cầu tư vấn và báo giá tại đây >>