Docker là gì và làm gì?
Chắc các bạn đã nghe rất nhiều cụm từr này gần đây, vậy thực ra docker là gì? Một định nghĩa mà mình tìm hiểu thấy dễ hiểu là: 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 ...
Chắc các bạn đã nghe rất nhiều cụm từr này gần đây, vậy thực ra docker là gì?
Một định nghĩa mà mình tìm hiểu thấy dễ hiểu là:
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òn theo ý hiểu đơn thuần của mình khi sử dụng, thì docker đóng gói và cài đặt môi trường cho chương trình rất là nhanh. Giả sử như trước đây mình cần setup một môi trường cho hệ thống yêu cầu phải dùng cùng lúc 4 loại database mongo, postgresql, redis, mysql, thay vì phải cài và chạy cho từng con, mình chỉ cần chạy một lệnh docker-compose up vậy là xong =))
Vậy docker có những ưu điểm gì?
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ì ngon vãi nhưng khi deploy lên server thì sập vỡ mặt, mà nguyên nhân cơ bản liên quan đến vụ nè là do môi trường của server khác với môi trường của local, ví dụ local mình đang xài 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 phang 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 Đơn giản thôi, không cần phải dùng virtua studio làm gì cả docker là đủ rùi =))
Lưu trữ và chia sẻ setup môi trường dự án cho nhóm Cái nè hay nè, trước đây khi handover dự án, phần setup môi trường cho dự án rất lằng nhằng 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, mình chỉ cần share container của docker là đã giảm được quá nửa document setup môi trường rùi, 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 (hoặc của máy mình).
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ôi khỏi, chạy docker cho nhanh =))
Trên đây là một số điều hữu ích khi sử dụng docker mà mình thấy được, và còn rất nhiều rất nhiều nữa. Các bạn có thể comment bổ sung bên dưới giúp mình để chúng ta có thể buôn dưa lê bán táo tàu về vấn đề này ^_^ (thankyou)
Tiếp theo đây sẽ là các thành phần cơ bản của docker
https://vi.wikipedia.org/wiki/Docker_(phần_mềm) sau khi ngồi ngó qua con wiki (lằng nhằng quá trời lun) mình tóm lại vài thứ: 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, ....., vô vàn vô vàn
Docker Hub Là 1 trang chia sẻ các image, nó như kiểu github hay bitbucket vậy.
Cài đặt docker
Link hướng dẫn bên dưới sẵn rùi nha, đỡ cop ra cho chật đất =)) Link hướng dẫn cài đặt cho Linux
Mình mới chỉ sử dụng trên Ubuntu thôi, chưa có điều kiện xài Mac, với lại window cũng nghỉ chơi, nên các anh em nào xài 2 món còn lại thì góp ý cho mình ^_^
Kết luận:
Bài viết trên mới chỉ dừng ở mức sơ khai, rất mong nhận góp ý và suggest của các anh em