Công nghệ phát triển, hàng loạt các ứng dụng được tạo ra, nhiều ngôn ngữ lập trình mới hình thành nhằm đáp ứng nhu cầu cụ thể nào đó. Những ngôn ngữ lập trình khác nhau lại yêu cầu các phần mềm hỗ trợ, gói thư viện và môi trường khác nhau. Ví dụ bạn là lập trình Android, bạn muốn làm việc với IOS bạn phải cài thêm OS hoặc để deploy được các ứng dụng Python, Java, Scala…. bạn phải tiến hành cài đặt nhiều môi trường. Chưa kể xung đột phần mềm, port… Cài thôi đã mệt, nhựng sẽ thật kinh khủng nếu xảy ra xung đột phần mềm và làm ảnh hưởng đến hoạt động của các ứng dụng đang hoạt động trên máy của bạn. Chính vì thế Docker ra đời. Trong bài nay, mình sẽ giới thiệu các nội dung chính về Docker. Docker là gì, Docker giúp ích được gì cho bạn và cách thức hoặt động như thế nào.
I. Quá trình hình thành Docker #
1. Containerlization #
- Một mô khá quen thuộc với chúng ta và nó cũng có từ rất lâu rồi : Máy chủ vật lý + hệ điều hành(OS) + Application
Với mô hình này, mỗi máy chỉ cài được 1 OS cho dù ổ cứng của bạn có khủng thế nào đi nữa. Điều này gây lãng phí tài nguyên. - Chính vì thế công nghệ ảo hóa vitualization ra đờiVới công nghệ này, mỗi máy chủ vật lý chúng ta có thể tạo được nhiều OS khác nhau thông qua các VM ware hoặc Virtual Box. Mô hình này đã khắc phục được nhược điểm của mô hình đầu tiên nhưng chính bản thân nó lại có 2 nhược điểm lớn:
Tài nguyên: Khi bạn tạo 1 máy ảo, bạn phải cấp cho nó 1 dung lượng ổ cứng nhất định, ví dụ là 2Gb Ram, 50Gb ổ cứng và khi bạn chỉ cần bật nó lên thậm chí không làm gì thì nó vẫn ngốn 2Gb Ram và 50Gb ổ cứng của máy chủ vật lý.
Thời gian: Thời gian để khởi động hay tắt 1 máy ảo như thế là khá lâu và có thể lên đến vài phút. - Chính vì thế người ta lại sinh ra công nghệ containerlicationVới công nghệ này chúng ta cũng tạo ra được nhiều máy con giống như công nghệ ảo hóa nhưng vấn đề là các máy con này dùng chung phần nhân của máy mẹ(OS kernel) và chia sẻ tài nguyên của máy mẹ. Chính vì thế tránh được việc lãng phí tài nguyên. Điểm nổi bật của công nghệ này đó là Container.
2. Vậy Container là gì ? #
- Container hay Docker Container là một. Hoạt động giống như một thư mục (directory), chứa tất cả những thứ cần thiết để một ứng dụng có thể chạy được. Mỗi một docker container được tạo ra từ một docker image. Các thao tác với một container : chạy, bật, dừng, di chuyển, và xóa. Không bị các yếu tố liên quan đến môi trường hệ thống làm ảnh hưởng tới, cũng như không làm ảnh hưởng tới các phần còn lại của hệ thống.
- Cách thức hoạt động:
Ví dụ 1 ứng dụng web được dev A nào đó đóng gói bằng Docker Engine, cái đóng gói được gọi là Docker Image. Trong Docker Image chứa ubuntu đã cài đặt sẵn apache và ứng dụng web. Docker Image được đưa lên Docker Hub. Sau đó Docker Image được chia sẽ cho các dev B,C,D,E. Từ Docker Image, dev B,C,D,E có thể tạo ra Docker Container, run Docker Container này là có thể thao tác với ứng dụng web mà không cần phải cài đặt môi trường hay các phần mềm liên quan. Các từ in đậm là gì thì bên dưới mình sẽ giải thích rõ hơn. - Ưu điểm của Container:
- Có thể triển khai bất cứ nơi đâu do không phụ thuộc vào OS và cơ sở hạ tầng
- Thời gian khởi động cực nhanh
- Khi nhiều người cùng phát triển một dự án sẽ không sợ sai khác về môi trường
II. Docker là gì ? #
1. Tìm hiểu docker là gì ? #
a. Định nghĩa #
Docker là một nền tảng mở dành cho các lập trình viên, quản trị hệ thống dùng để xây dựng, vận chuyển và chạy các ứng dụng phân tán. Ban đầu viết bằng Python, hiện tại đã chuyển sang Go-lang.
b. Các thành phần chính #
- Docker engine: là phần chính của docker, chứa các tool cho phép người dùng đóng gói ứng dụng, tạo và khởi chạy docker container từ các docker image
- Docker image: tương tự file .gho để ghost win. Một docker image thường chứa OS(Windows, ubuntu, CentOS)và các môi trường lập trình được cài sẵn (httpd, mysqld, nginx, python, git, …). Bạn có thể tải các image từ người khác
- Docker hub: là nơi để mọi người upload, chia sẽ các images Docker của mình (hiện có khoảng 300.000 images)
c. Một số khái niệm #
- Docker images : là một “read-only template”. Chẳng hạn, một image chứa hệ điều hành Ubuntu đã cài đặt sẵn Apache và ứng dụng web
- Docker registries : Là kho chứa images. Người dùng có thể tạo ra các images của mình và tải lên đây hoặc tải về các images được chia sẻ
- Docker container : hoạt động giống như một thư mục (directory), chứa tất cả những thứ cần thiết để một ứng dụng có thể chạy được. Mỗi một docker container được tạo ra từ một docker image. Các thao tác với một container : chạy, bật, dừng, di chuyển, và xóa
- Dockerfile : là một file chứa tập hợp các lệnh để Docker có thể đọc và thực hiện để đóng gói một image theo yêu cầu người dùng
- Orchestration : là các công cụ, dịch vụ dùng để điều phối và quản lý nhiều containers sao cho chúng làm việc hiệu quả nhất
Xem thêm : Docker là gì ?
2. Quy trình của một hệ thống sử dụng Docker #
Hệ thống Docker bao gồm 3 bước chính:
Build -> Push -> Pull,Run
-
Build #
Đầu tiên chúng ta tạo ra docker image
Docker image được build với 1 máy tính có docker engine.
Sau khi build ta có được docker container, docker container chứa toàn bộ môi trường, thư viện và ứng dụng của chúng ta.
-
Push #
Sau khi có được container, chúng ta sẽ push container này lên đám mây thông qua docker hub.
-
Pull/ Run #
Nếu 1 member khác trong team muốn dùng container này, họ buộc phải cài đặt docker engine. Sau đó pull container về máy và run container này. Như vậy member này có được môi trường , thư viện và ứng dụng của chúng ta để có thể phát triển thêm mà không cần cài đặt những thứ liên quan.
Vậy bạn đã biết câu trả lời cho câu hỏi “docker là gì ?” chưa.
Link tham khảo:
Đào tạo docker: https://tel4vn.edu.vn/course/hoc-docker/
Docker Document: https://docs.docker.com/get-started/