Nếu bạn đang theo dõi các xu hướng trong điện toán “đám mây”, thì có lẽ bạn đã nghe nói về Docker. Trong bài viết này dành cho bạn nếu bạn đang thắc mắc Docker là gì và tại sao bạn nên biết về công cụ này.
Theo định nghĩa của team Docker thì nó là “một dự án mã nguồn mở để đóng gói, vận chuyển và chạy bất kỳ ứng dụng nào”. Ý tưởng của nó là cung cấp một công cụ cho phép bạn “đóng gói” hoặc “đóng gói” bất kỳ ứng dụng nào chung với hệ điều hành và các thư viện nó cần. Sau khi “đóng gói”, bạn có một cái “gói” được gọi là “thùng Docker” (Docker container). Cái thùng này có thể được tải lên và vận hành bởi bất kỳ cơ sở hạ tầng nào. Việc sử dụng thùng chứa này giống như là bạn đi thư giãn mát xa và được tặng thêm bao cao su vậy. Rất tiện lợn.
Vậy các công nghệ cơ bản tạo nên Docker là gì?
- Docker tận dụng LXC (thùng Linux), bao gồm các tính năng của hệ điều hành Linux như cgroups và namespaces để phân luồng chạy các phép tính toán và kiểm soát tài nguyên. Mặc dù Docker hiện đang tận dụng LXC, nhưng kiến trúc Docker không nhất thiết phải giới hạn ở LXC. Về lý thuyết, Docker có thể tận dụng KVM (một dạng máy ảo, virtual machine, hay dùng để giả lập các hệ điều hành) để làm những việc tương tự như hiện nay với LXC. (Cập nhật: giả lập HĐH chậm hơn nhiều)
- Công nghệ chép-khi-ghi (Copy-on-write) cho phép Docker khởi tạo các thùng chứa rất nhanh, nó nhưng một hệ thống các con trỏ vào các tập tin của một HĐH. Ví dụ bạn có 2 thùng chứa: Ubuntu và SQL, vậy bạn có thể tạo thùng SQL dựa trên nền tảng có sẵn của thùng Ubuntu. Khi khởi động, thay vì phải khởi động cả hai thùng từ đầu, thì những tập tin mà thùng SQL cần đã được trỏ vào thùng Ubuntu. Tôi hy vọng bạn đủ ngầu để hiểu câu này, nếu không thì chỉ cần biết là nó nhanh hơn công nghệ giả lập HĐH
Dùng thử Docker
Trước tiên, nếu bạn chưa cài đặt Docker, hãy làm theo hướng dẫn trên trang chủ Docker để cài đặt Docker Desktop cho hệ điều hành của bạn.
Một khi nó đã cài đặt, bạn sẽ có sẵn lệnh docker trên dòng lệnh của mình. Bạn có thể chạy hình ảnh Docker cục bộ bằng lệnh docker run, có cú pháp sau:
docker run <IMAGE> [COMMAND]
là một tập tin miêu tả thùng Docker của bạn. Nói cách khác, thùng Docker là một khái niệm, ảnh Docker là tập tin của khái niệm đó.
[COMMAND] là một số tuỳ chọn bạn có thể thêm vào, khi bạn cần thì bạn sẽ tìm nó trên doc, ko cần quan tâm bây giờ.
Bạn có thể thử mệnh sau :
$ docker run -it ubuntu:20.04 bash
Unable to find image ‘ubuntu:20.04’ locally
20.04: Pulling from library/ubuntu
Digest: sha256:669e010b58baf5beb2836b253c1fd5768333f0d1dbcb83 (...)
Status: Downloaded newer image for ubuntu:20.04
root@d96ad3779966:/#
Nếu bạn có kinh nghiệm nhiều năm như tôi, bạn sẽ hết hồn khi thấy một máy Linux khởi động nhanh như vậy.
Bạn có thể thử mệnh sau :
root@d96ad3779966:/# ls -al
Đó là lệnh để hiển thị các tập tin trong hệ thống và bạn sẽ thấy một thế thông tập tin khác với máy của bạn. Đó là bởi vì ảnh Docker chạy trong các thùng được phân chia theo người dùng: khi bạn ở trong một cái thùng Docker, bạn chỉ có thể thấy hệ thống tệp, bộ nhớ, mạng, v.v. trong đó. Bạn không thể truy cập bất kỳ dữ liệu nào trong các vùng chứa khác hoặc trên hệ điều hành chủ (HĐH đang chạy Docker). Đây điểm mạnh khi dùng ảnh Docker để chạy ứng dụng: tính tự lập.
Các ảnh Docker chạy như nhau cho dù bạn chạy chúng ở đâu và nó không quan tâm máy chủ đang làm cái gì, được tuỳ chỉnh như thế nào.
Kết luận
Bây giờ bạn đã hiểu tại sao dùng Docker là ngầu. Công cụ này hoạt động tốt khi bạn chạy vài thùng Docker trên máy tính cá nhân. Khi chạy vùng chứa Docker trong Production có thể cần có nhiều thùng trên nhiều máy chủ, khi đó bạn sẽ muốn sử dụng công cụ điều phối (chọn máy chủ nào chạy việc nào),tự động sửa chữa (tự động triển khai lại các thùng chứa bị lỗi khởi động), tự động thay đổi quy mô (tăng và giảm số lượng thùng), cân bằng tải (phân phối lưu lượng theo các thùng)…Công cụ thông dụng nhất hiện nay là Kubernetes.