• Trang chủ
  • Bài viết
    CodeSchool - Make coding great againCodeSchool - Make coding great again
    • Trang chủ
    • Bài viết

      DevOps

      • Home
      • Blog
      • DevOps
      • So sánh Docker Container và Máy Ảo (Virtual Machine)

      So sánh Docker Container và Máy Ảo (Virtual Machine)

      • Date 21/06/2020

      Docker là một công nghệ mà những người làm Back-end có xu thế cần phải biết. Trong đó, khái niệm «Container» là cấp độ “sống ảo” nhẹ nhàng hơn Máy Ảo (Virtual Machine), bởi vì nó cùng thuộc về lĩnh vực ảo hóa (virtualization) nên nhiều người mới học thường lẫn lộn giữa «Container» và «Virtual Machine».

      Khái niệm Container và Virtual Machine

      «Virtual Machine» là công nghệ giả lập phần cứng (nên tên của nó mới có chữ «Machine»), Hệ điều hành (OS) bên trong Máy Ảo sẽ bị lừa rằng đây là phần cứng thật nên nó chỉ sử dụng được một phần tài nguyên mà Máy Ảo được cấp phát, ví dụ: Host Machine có 32GB RAM, nhưng chỉ cấp cho Virtual Machine 8GB RAM, thì OS sẽ nhìn thấy “phần cứng” 8GB RAM mà thôi.

      Poster phim Ma Trận

      Thế giới trong phim Ma Trận (The Matrix) là ví dụ điển hình nhất của «Virtual Machine». Giải thích dài dòng cũng không dễ hiểu bằng xem một bộ phim.

      Còn «Container» là gì? Nó là một kỹ thuật cách ly tài nguyên (isolation), nói ví von là OS lừa phần mềm của nó. Chúng ta đã biết một phần mềm được khởi động lên sẽ chiếm ít nhất một tiến trình (process) trong OS, và nó có thể truy cập được khá nhiều tài nguyên của máy tính. «Containerize» (động từ) là hành động mà OS cách ly process đó, cho nó một “vùng trời” riêng.

      Process bị cách ly sẽ nhìn thấy PID (Process ID) của nó là 1. Nó sẽ nghĩ rằng nó là đấng độc tôn. Nó được cấp một card mạng ảo riêng, một file system ảo riêng, trong đó nó *tưởng* rằng mình có thể truy cập, sửa, xóa mọi folder hệ thống. Chúng ta sẽ nói thêm ở bài viết về “Docker Image”.

      Poster phim Trại Súc Vật

      Một bộ phim minh họa cho kỹ thuật «Container» là phim hoạt hình Trại Súc Vật (Animal Farm [1954]), với câu nói kinh điển: “Mọi process đều được truy cập tài nguyên bình đẳng, nhưng có một số process bình đẳng hơn”.

      SO SÁNH CONTAINER [C] VÀ VIRTUAL MACHINE [VM]

      🔰 Tài nguyên (resource)

      [VM] Mọi thứ đều bị giới hạn bởi phần cứng ảo.

      [C] Process trong container sử dụng trực tiếp tài nguyên thật, nhưng HĐH có thể quy định mỗi process một mức giới hạn tài nguyên khác nhau (hoặc không giới hạn).

      🔰 Thực thi (execution)

      [VM] HĐH thật → HĐH ảo → HĐH ảo chạy phần mềm. (Đối với VPS, Hypervisor type 1 thay thế cho HĐH thật)

      [C] HĐH thật chạy phần mềm.

      🔰 Sự tối ưu (performance)

      [VM] Phần cứng thật phải gánh cả một HĐH ảo. Từ khi máy tính khởi động lên, cho tới khi sử dụng được phần mềm rất mất thời gian.

      [C] Phần mềm thật chạy trên phần cứng thật. Tốc độ khởi động gần như một phần mềm bình thường.

      🔰 Tính bảo mật (Security)

      [VM] Phần mềm có mã độc có thể ảnh hưởng tới tài nguyên của process khác trong cùng VM.

      [C] Process trong cùng container vẫn có thể ảnh hưởng tới nhau. Nhưng thông thường mỗi container chỉ nên chạy một process. Process khác container không thể gây ảnh hưởng cho nhau.

      [VM] và [C]: Process trong môi trường ảo không thể truy xuất tới môi trường của HĐH chủ.

      🔰 Phần mềm hỗ trợ

      [VM] VirtualBox, VMWare, Microsoft Hyper-V, Parallels, Linux KVM, Docker Machine…

      [C] Docker Engine, LXC Linux Container, Apache Mesos, CRI-O (Kubernetes)…

      🔰 Ứng dụng thực tế

      [VM] Dịch vụ máy chủ ảo (Virtual Private Server – VPS); Chạy phần mềm thuộc những hệ điều hành khác nhau.

      [C] Triển khai service Back-end trên máy chủ, các phần mềm phải thuộc cùng hệ điều hành.

      CODESCHOOL VN nhận thấy nhiều học viên cũng bối rối giữa Docker Machine và Docker Engine. Nhưng đó là chủ đề cho bài sau. Còn đây là cheatsheet của bài này, hãy Like page CodeSchool VN và chọn See First để không bỏ lỡ những bài viết mới nha!

      Cheat-sheet container vs virtual machine

      Facebook Comments

      Tag:docker, virtualization

      • Share:
      author avatar
      CodeSchool trainer

      Previous post

      Kiểm tra một điểm thuộc tam giác hay không
      21/06/2020

      Next post

      User Agent string – Di tích từ cuộc chiến trình duyệt "đẫm máu"
      23/06/2020

      Tìm kiếm

      Bài viết mới

      Routing với webapp React: Không dùng và có dùng thư viện
      12Jul2020
      Phân biệt kỹ thuật routing tại client-side và server-side
      11Jul2020
      Các thủ thuật với JSX trong React (phần 1)
      02Jul2020

      Giao lưu Facebook

      Facebook Pagelike Widget

      Giáo trình và bài viết được biên soạn và biên dịch bởi CodeSchool VN, bảo lưu mọi quyền.

      • Privacy
      • Terms
      • Sitemap