1.Khái niệm

Docker là một dự án mã nguồn mở trên Github, là một nền tảng phần mềm cho phép các lập trình viên thực hiện develop, deploy, run ứng dụng một cách nhanh chóng trên container. Khi cần deploy lên server nào chỉ cần run container thì ứng dụng của bạn sẽ được khởi chạy ngay lập tức.

2. Khẩu quyết của Docker

Build, ship and deploy any application, anywhere

Build: đóng gói ứng dụng trong một container.

Ship: vận chuyển container, từ máy này sang máy khác.

Deploy: triển khai, chạy container.

Any application: bất cứ ứng dụng nào chạy được trên môi trường Linux.

Anywhere: tất cả mọi nơi, laptop, máy chủ, máy ảo, cloud instance.

“Batteries included but replaceable”

Một component có thể được thay thế dễ dàng bằng một component khác bằng cách implement cùng một interface có sẵn.

Docker tạo ra một framework được phân chia thành các module có khả năng mở rộng cao, chính vì thế nên các component có thể được thay thế bằng các component tương tự.

3. Các thuật ngữ khi tìm hiểu Docker

IMAGE: là một khuôn mẫu, một lớp chứa các file cần thiết để tạo nên một container. Image chứa những nguồn tài nguyên có sẵn, nhưng không được tiếp cận vào CPU, Memory, Storage,…

CONTAINER: tồn tại trên host với một địa chỉ IP, được deploy, chạy, xóa bỏ thông qua remote client.

Có thể coi sự khác biệt giữa Image và Container giống như Class và Object trong mô hình hướng đối tượng (OOP).

DOCKER ENGINE: là một phần của docker, có nhiệm vụ tạo và chạy container từ image, chạy các lệnh trong chế độ Deamon.

Docker layer

ở hình trên chúng ta thấy Docker Engine nằm trên layer hệ điều hành, và nằm dưới layer các thư viện và ứng dụng, mỗi một thư viện/ứng dụng đại diện cho một container mà Docker Engine quản lý.

Luồng trong Docker

DOCKER DEAMON: là tiến trình chạy ngầm quản lý các container.

DOCKER CLIENT: kiểm soát workflow của Docker và giao tiếp với các máy chủ Docker thông qua Deamon.

DOCKER HUB (Registry): là nơi để chứa các component Docker, cho phép lưu, sử dụng, tìm kiếm image. Đóng vai trò “Ship” trong khẩu quyết phía trên.

4. Điểm mạnh của Docker

  1. Deploy nhanh hơn: docker image được build sử dụng hệ thống augmented file system, việc tạo ra một container mới rất nhanh chóng và tiện lợi.
  2. Độc lập: các container độc lập với nhau, khi có lỗi xảy ra ở một container A thì cũng không ảnh hưởng gì đến container B.
  3. Cơ động: giúp tránh conflict môi trường, trao đổi giữa các máy dễ dàng, kết quả chạy giữa các máy là như nhau.
  4. Chụp ảnh hệ thống (snapshot): khi docker container được triển khai, thì có thể lưu lại trạng thái bất cứ lúc nào, lưu thành container hoặc image. Hiểu đơn giản là tại bất kì thời điểm nào thì đều có thể tạo một container mới y hệt từ snapshot.
  5. Kiểm soát việc sử dụng tài nguyên (Cpu, Ram, Storage): có thể điều chỉnh việc sử dụng tài nguyên cho mỗi container.
  6. Đơn giản hóa sự phụ thuộc lẫn nhau giữa các ứng dụng(dependence).
  7. Thuận tiện cho việc chia sẻ: chia sẻ image lên Docker Hub là có thể sử dụng ở nơi khác.

5. Một số sai lầm cơ bản khi nhắc về Docker

  • Docker KHÔNG phải là một giải pháp ảo hóa phần cứng (VMWare, KVM,..).
  • Docker KHÔNG phải là một nền tảng điện toán đám mây (CloudStack,…).
  • Docker KHÔNG phải là một công cụ quản lý thiết lập hay thiết lập tự động (Puppet, Chef,…).
  • Docker KHÔNG phải là một deployment framework (Capistrano, Fabric,…).
  • Docker KHÔNG phải là một công cụ quản lý workload (Mesos, Fleet,…).
  • Docker KHÔNG phải là một môi trường phát triển (Vagrant,…)

6. So sánh Docker và Virtual Machine

so sánh Virtual Machines vs Docker

Virtual Machines: trên phần cứng vật lý là hệ điều hành chủ, tiếp theo là Hypervisor (một hệ thống quản lý VM), trên đó là các hệ điều hành giả lập, trên mỗi hệ điều hành giả lập có file và ứng dụng riêng.

Docker: trên phần cứng vật lý là hệ điều hành chủ, tiếp theo là Docker Engine, trên là các ứng dụng và file hệ thống, cho thấy Docker đơn giản hơn VM.

VMDocker
Công nghệ ảo hóaCông nghệ container hóa
Chạy hệ điều hành riêng bên trong một môi trường phần cứng giả lập được cung cấp bởi Hypervisor chạy trên phần cứng vật lýContainer hóa cho phép nhiều ứng dụng chạy trên các partition độc lập trên Linux kernel, và chạy trực tiếp trên phần cứng vật lý
Kernel riêngKernel chung với hệ điều hành
Khởi động cả hệ điều hànhKhởi động một số process
Tốc độ chậmTốc độ nhanh
Cần nhiều tài nguyênTiết kiệm tài nguyên
so sánh Docker và VM

Một số bài viết liên quan: