Docker là gì và tại sao developer phải biết

0
118
views
docker logo

Docker là gì ?

Docker là một phần mềm ảo hóa ở mức hệ điều hành, giúp tạo ra các môi trường phát triển hoặc các hệ điều hành khác với hệ điều hành đang chạy trên máy chủ.

Mức hệ điều hành có nghĩa là Docker được cài đặt trên nền một hệ điều hành, phụ thuộc vào hệ điều hành, khác hẳn với XEN vốn là một phần mềm ảo hóa nằm ngoài hệ điều hành. Nói đến công nghệ ảo hóa hay thân thuộc hơn gọi là máy ảo thì chắc chúng ta đều sẽ bật ra các phần mềm như VMWare hay Vagrant, vốn đã rất thân thuộc. Với VMWare ta có thể chạy một hệ điều hành Ubuntu trên một máy Windows hay ngược lại với giao diện UI dễ dùng, dễ hiểu. Vagrant thì cho phép chạy song song nhiều hệ điều hành con(guest OS) trên một hệ điều hành cha(host OS) với giao diện console, phù hợp hơn với việc phát triển các hệ thống phần mềm. Vậy tại sao Docker lại trở nên phổ biến và không thể thiếu đối với các developer như vậy ? Docker có gì vượt trội so với các giải pháp khác ?

Nguyên lý hoạt động và các khái niệm cơ bản của Docker

Image là một gói phần mềm, có khả năng chạy được, bao gồm tất cả cả thành phần cần thiết để khởi động một ứng dụng: mã nguồn (source code), các thư viện, biến môi trường, các file cấu hình …Tuy nhiên bản thân các image lại không thể tự chạy được, có thể hiểu nôm na Image là các chỉ dẫn kỹ thuật, cách kết nối, lắp ghép các bộ phận nhằm tạo ra và chạy một ứng dụng nào đó. Một image thường được xây dựng dựa trên một image gốc nào đó, ví dụ bạn có thể xây dựng một image dựa trên image gốc ubuntu nhưng có thêm Apache, PHP và MySQL để chạy một trang WordPress. Để tạo ra một image riêng ta cần tạo ra một file Dockerfile gồm các lệnh theo một cú pháp khá đơn giản nhằm chỉ dẫn cách cài đặt các phần mềm, cấu hình các phần mềm, cách chạy chúng. Mỗi dòng lệnh trong Dockerfile đều tạo ra một lớp (layer) bao ngoài image gốc, mỗi khi ta build lại image thì chỉ những layer nào thay đổi mới được build lại, khiến cho quá trình build rất nhanh chóng.

Để có thể sử dụng một image ta cần đến các container. Container là bản sao của image nhưng ở trạng thái hoạt động(activated instance). Một image có thể được dùng để tạo ra nhiều container. Tất cả các ứng dụng, đơn giản hay phức tạp, đều có thể chia nhỏ ra các container. Container có cấu trúc lưu trữ đơn giản, có thể chỉnh sửa dễ dàng ngay cả khi đang chạy, dễ dàng chia sẻ giữa các máy với nhau, dễ dàng nhân bản để tạo ra các mạng phức tạp, giao tiếp với nhau thông qua một hệ thống kênh được định nghĩa trước. Container sử dụng tài nguyên của host OS hiệu quả hơn các giải pháp khác vì nó chạy trực tiếp trên host OS và chia sẻ kernel của host OS cùng với các container khác.

vm versus container

Các container chạy trên các process riêng biệt, giống như bất cứ một ứng dụng nào khác được cài trên hệ điều hành, vì vậy nó chạy rất nhanh và tiêu tốn ít tài nguyên, giống như phần mềm đó được cài trực tiếp trên hệ điều hành vậy. Bạn có thể tưởng tượng Docker giúp ta có thể cài đặt Libre Office của Ubuntu trên Windows không khác gì so với Microsoft Office, không khác gì ở đây nghĩa là về mặt hiệu năng và mức sử dụng tài nguyên. Ngược lại, các VM được đóng gói và chạy một các riêng biệt và sử dụng tài nguyên của host OS thông qua một ứng dụng gọi là hypervisor, monitor của các monitor. Các VM được cấp phát cố định các tài nguyên (CPUs, RAM, đĩa cứng…) trước khi được khởi động, thường sẽ không sử dụng hết các tài nguyên mà nó được cấp phát gây ra tình trạng lãng phí tài nguyên.

Cài đặt Docker

Docker có 2 phiên bản chính là Enterprise Edition (EE) dành cho doanh nghiệp và mất phí, Community Edition (CE) dành cho developer và hoàn toàn miễn phí. Ta sẽ thực hiện cài đặt phiên bản CE. Để cài đặt phiên bản này ta cần Ubuntu phiên bản 64 bit từ 14.04 trở lên. Trước hết ta tiến hành gỡ các phiên bản cũ nếu có trên máy, các phiên bản cũ có tên là dockerdocker-engine :

$ sudo apt-get remove docker docker-engine docker.io

Gói docker hiện tại có tên là docker-ce, đầu tiên ta cần phải update repository:

$ sudo apt-get update

Cho phép apt tải các gói qua giao thức HTTPS:

$ sudo apt-get install \
   apt-transport-https \
   ca-certificates \
   curl \
   software-properties-common

Thêm Docker GPG key:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88    

Cập nhật lại repository và cài đặt:

$ sudo apt-get update
$ sudo apt-get install docker-ce

Để kiếm tra xem Docker đã được cài đặt chuẩn xác chưa ta chạy lệnh sau :

$ sudo docker run hello-world

Lệnh này sẽ download và chạy image test có tên là hello-world. Sau khi download xong image được chạy sẽ in ra một mẩu thông tin và tự động thoát.

Sau khi cài dặt Docker

Docker daemon – service chạy ngầm của Docker – được gắn với một socket chứ không phải một TCP port và socket này được sở hữu bởi tài khoản root, các tài khoản khác muốn sử dụng đều phải kèm theo lệnh sudo. Do đó để không phải lần nào cũng gõ sudo ta tạo một group với tên docker, thêm tài khoản hiện tại vào group này, khi Docker deamon khởi động nó sẽ tạo ra một socket có thể truy cập được bởi tất cả thành viên của group docker:

$ sudo groupadd docker # tạo nhóm
$ sudo usermod -aG docker $USER # thêm tài khoản hiện tại

Logout tài khoản và login lại để được thêm vào group, check lại xem đã có thể chạy docker mà không cần sudo:

$ docker run hello-world

Ở bài sau chúng ta sẽ thực hiện một số thao tác cơ bản của Docker và cài đặt các ứng dụng đơn giản như apache, mysql …

BÌNH LUẬN

Please enter your comment!
Please enter your name here