Khái niệm, định nghĩa Docker là gì?

Docker là một open platform cung cấp cho người sử dụng những công cụ và service để người sử dụng có thể đóng gói và chạy chương trình của mình trên các môi trường khác nhau một cách nhanh nhất.

ĐẶC ĐIỂM CHÍNH

Giả lập môi trường trên server ở dưới máy local

Bình thường, khi một dự án run dưới local chạy demo thì ổn nhưng khi deploy lên server thì sập, mà nguyên nhân cơ bản liên quan đến điều này là do môi trường của server khác với môi trường của local, ví dụ local bạn đang dùng Ubuntu mà server lại chơi CenOS, không thì cũng kiểu, chơi ruby 2.3 còn server thì lại dùng ruby 2.2.3

Vậy với docker ta có thể giả lập hoàn toàn môi trường server dưới local một cách hoàn hảo.

Trải nghiệm và dùng thử một hệ điều hành mới

Không cần phải dùng virtua studio chỉ cần sử dụng docker là đủ.

Lưu trữ và chia sẻ setup môi trường dự án cho nhóm

Trước đây khi handover dự án, phần setup môi trường cho dự án rất khó và phải lưu lại nhiều doc hướng dẫn là lưu ý khi cài đặt môi trường, nhưng giờ đây, chỉ cần share container của docker là đã giảm được quá nửa document setup môi trường, không chỉ vậy, nó còn thuận tiện và đơn giản cho các thành viên trong team trong việc tìm hiểu về môi trường hệ thống khi join vào dự án.

Test song song

Có những automation test khá là nặng và tốn thời gian (như việc tương tác mạng, upload, download chẳng hạn), nếu chạy test trên 1 máy thì sẽ rất tốn thời gian.

Ta tạo ra nhiều Container giống nhau (việc tạo này cực kỳ đơn giản vì nó dùng chung 1 file gốc – Image), sau đó chi task ra cho chúng thực hiện cùng 1 lúc => tiết kiệm được thời gian và tận dụng được tài nguyên của server.

Test app trên một hệ điều hành khác

Khi app của bạn đã chạy ngon trên Ubuntu, bạn muốn xem thử tình trạng của nó trên CentOS thì làm thế nào? không lẽ lại phải setup máy ảo . Thì bạn chỉ cần dùng chạy docker là được.

CÁC THÀNH PHẦN CƠ BẢN

Docker có 4 thành phần cơ bản

  • Image
  • Container
  • Docker Engine
  • Docker Hub

Image Là file ảnh, file nền của một hệ điều hành, một nền tảng, một ngôn ngữ (vd: ubuntu image, ruby image, rails image, mysql image…)

Từ các image này, bạn sẽ dùng nó để tạo ra các container.

Các image là dạng file-chỉ-đọc (read only file).

Tự bạn cũng có thể tạo image cho riêng mình.

Một image có thể được tạo từ nhiều image khác (vd: bạn tạo 1 image chạy ubuntu, có cài sẵn ruby 2.3 và rails 5, image này của bạn được tạo nên bởi 3 image khác).

Container Là một máy ảo, được cấu thành từ 1 image và được đắp thêm 1 lớp “trang trí” writable-file-layer. Các thay đổi trong máy ảo này (cài thêm phần mềm, tạo thêm file…) sẽ được lưu ở lớp trang trí này.

Các container này sẽ dùng chung tài nguyên của hệ thống (RAM, Disk, Network…), chính nhờ vậy, những container của bạn sẽ rất nhẹ, việc khởi động, kết nối, tương tác sẽ rất nhanh gọn.

Nếu ánh xạ sang hướng đối tượng, thì image chính là class, còn container chính là instance-1 thể hiện của class đó. Từ 1 class ta có thể tạo ra nhiều instance, tương tự, từ 1 image ta cũng có thể tạo ra được nhiều container hoàn toàn giống nhau.

Docker Engine quản lý việc bạn tạo image, chạy container, dùng image có sẵn hay tải image chưa có về, kết nối vào container, thêm, sửa, xóa image và container, …..

Docker Hub Là 1 trang chia sẻ các image, nó như kiểu github hay bitbucket.