Docker là gì? Tìm hiểu Docker từ chưa biết gì tới biết dùng

1

Trong một lần mình tham gia dự án cloud, mình được một tiền bối bắt tìm hiểu Docker. Quả thật lúc đó mình chỉ nghĩ Docker giống như một máy ảo mà thôi. Nhưng có vẻ không đơn giản như thế. Vậy Docker là gì? Tại sao lại nên sử dụng Docker?  Chúng ta cùng nhau tìm hiểu trong bài viết này nhé.

Docker là gì?

Docker là một nền tảng phần mềm ảo hóa hệ điều hành. Nó cho phép bạn dễ dàng tạo, triển khai và chạy ứng dụng trong các Docker container.

Docker là gì

Docker tạo các môi trường độc lập để chạy và phát triển ứng dụng. Môi trường này gọi là container.

Đọc định nghĩa Docker có vẻ hơi lăng nhằng và khó hiểu đúng không?

Để mình lấy một ví dụ cho dễ hiểu hơn. Giả sử bạn đang phát triển một ứng dụng bằng Node.js kết nối đồng thời 4 loại database: mongo, postgresql, redis, mysql.

Lúc này, trên máy tính của bạn, môi trường để chạy ứng dụng đã sẵn sàng (bạn đã cài đặt Node.js, PM2, MongoDB, postgresql, redis, mysql). Khi triển khai dự án, bạn cũng phải cài đặt đầy đủ các phần mềm như lúc phát triển dự án.

Quả thật hơi mất công đúng không?

Thay vào đó, bạn đóng gói tất cả với Docker và chỉ cần chạy lệnh: docker-compose up trên server thật là được.

Tại sao phải sử dụng Docker?

Trong vòng đời phát triển của phần mềm, lúc triển khai dự án ra môi trường thực tế luôn tiềm ẩn nhiều rủi ro. Tại sao lại như vậy?

Bởi vì môi trường để phát triển ứng dụng luôn khác so với môi trường chạy ứng dụng trên thực tế. Do đó, người ta cố gắng xây dựng giải pháp để hai môi trường này càng giống nhau càng tốt. Đó là lý do ra đời Docker.

Trong giai đoạn phát triển ứng dụng, việc có một môi trường giống với thực tế để test thì quả thật quá tuyệt vời. Bạn sẽ hạn chế được rất nhiều lỗi mà chỉ lúc chạy thật mới gặp.

Đấy là chưa kể việc, bạn phát triển một ứng dụng và bán cho rất nhiều khách hàng. Thay vì cứ mỗi khách hàng, bạn lại phải “cài cắm” môi trường trên server khách hàng, lúc này bạn chỉ việc mang container docker đi cài một phát là xong.

Lợi ích của Docker là gì?

Không phải tự nhiên Docker lại phổ biến và được các devOps ưu thích đến thế. Mình có thể kể một số lợi ích khi sử dụng Docker như sau:

  • Tốc độ start và Stop một Docker rất nhanh. Nhanh hơn rất nhiều nếu dùng máy ảo.
  • Dễ dàng cài đặt môi trường phát triển phần mềm. Chỉ cần bỏ công cấu hình một lần và không cần phải quan tâm cài đặt các dependencies sau này nữa. Sau này, khi handover dự án thì chỉ cần lấy config ra và đưa cho họ.
  • Docker giữ máy tính làm việc được sạch sẽ. Bởi mỗi khi kết thúc một dự án, bạn có thể xóa nó đi mà không ảnh hưởng đến các phần khác.

Trên đây chỉ là một vài lợi ích mà mình nghĩ ra đợi lúc này. Còn thực tế thì Docker nó còn nhiều lợi ích không thể cân đo đong đếm được, bạn cứ dùng là sẽ biết.

Cơ chế hoạt động của Docker

Để hiểu chi tiết cơ chế hoạt động của Docker cũng khá phức tạp, vì đây là cả một công nghệ đồ sộ. Tuy nhiên, mình tóm gọn lại được như sau: Docker hoạt động thông qua một Docker engine, kết hợp 2 yếu tố:

  • 1 server và 1 client.
  • Giao tiếp giữa server và client thông qua REST API.

Trên hệ thống Window/Mac cũ, bạn có thể tận dụng Docker toolbox, nó cho phép điều khiển Docker engine bằng cách sử dụng Compose và Kitematic.

👌 Dành cho bạn: Tài liệu machine learning cơ bản nhưng chất (update 2020)

Một số thành phần của Docker

docker là gì? Kiến trúc Docker
Kiến trúc Docker

Khi nhìn vào sơ đồ cấu trúc của Docker, bạn sẽ cần quan tâm tới một số thành phần sau:

1. Docker Client
Là thành phần mà bạn sẽ tương tác với Docker thông qua command line. Docker client sẽ gửi lệnh tới Docker Deamon thông qua REST API (như mình đã đề cập ở mục cơ chế hoạt động của Docker).

2. Docker Image

Docker image được hiểu như là một snapshot của một môi trường phát triển. Nó giống như file .GHO mà mấy bạn cài win dạo hay dùng.

Một Docker image bao gồm:

  • Hệ điều hành (Windows, CentOS, Ubuntu, …)
  • Các môi trường phát triển cho dự án được cài sẵn. Ví dụ: httpd, mysqld, nginx, python, git…

3. Docker Registry

Là nơi lưu trữ các Docker Image. Tức là khi bạn tạo các Docker Image và muốn chia sẻ cho ai thì có thể dùng USB copy cho, hoặc upload nên đâu đó trên Internet ( hay nói cách khác là upload lên Docker Registtry).

Có thể sử dụng registry của riêng bạn hoặc registry của nhà cung cấp như : AWS, Google Cloud, Microsoft Azure. Trong số này, bạn có thể nghe nói tới Docker Hub.

Docker Hub là registry lớn nhất, tương tự như github hay npmjs vậy.

Như vậy là phần lý thuyết tìm hiểu cơ bản Docker đã xong. Phần tiếp theo, chúng ta cùng nhau thực hành thao tác trên Docker:

  • Cách cài đặt Docker
  • Hướng dẫn cách sử dụng Docker Images.
  • Cách tạo Docker Image dùng để triển khai dự án.
  • Hướng dẫn triển khai dự án với docker compose

Cài đặt Docker

Ban đầu, Docker được phát triển cho nền tảng Linux, bởi vì docker cần thiệp sâu vào phần kernel. Tuy nhiên, sau này thì Microsoft thấy docker hay quá nên ngỏ ý muốn hợp tác.

Nhưng vì Window là hệ điều hành đóng, nên phần kernel của window không thể public được. Do đó, Docker phải chạy một máy ảo Linux trên window.

Ngoài ra, Docker có 2 phiên bản là:

  • CE là bản dành cho nhà phát triển, các nhóm có số lượng thành viên nhỏ.
  • EE là bản dành cho doanh nghiệp.

Trong bài viết này, mình sẽ hướng dẫn các bạn cài đặt bản CE trên cả Linux (Ubuntu) và Window.

#Cài đặt Docker trên Ubuntu

Đầu tiên, cần update các packages:

sudo apt update

Cài đặt package cho phép apt sử dụng các packages qua HTTPS:

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

Thêm GPG của Docker  repository vào hệ thống:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

Tiếp theo, bạn update lại các packages với các package docker từ repository vừa mới thêm vào:

sudo apt update

Cuối cùng là gõ lệnh cài đặt docker CE

sudo apt install docker-ce

Quá trình cài đặt sẽ mất khoảng vài phút. Khi kết thúc, bạn gõ lệnh sau để kiểm tra xem đã cài đặt thành công rồi hay chưa.

sudo docker run hello-world

Nếu kết quả như hình dưới đây là OK

Cài đặt docker
Cài đặt docker thành công

#Cài đặt Docker trên Window 10

Việc cài đặt docker trên window cũng khá đơn giản, giống như bao phần mềm khác thôi. Mình chỉ lưu ý một điểm như sau:

  • Trên window 10, để docker có thể chạy được, bạn cần phải enable Hyper-V.
  • Docker chỉ chạy trên máy thật, không chạy được trên các máy ảo VMware Workstation hay Virtual Box
  • Docker ngốn khá nhiều RAM. Mình thử nghiệm trên laptop 8GB RAM, nó chạy khá ì ạch. Vì vậy, mình nghĩ nên chạy trên máy có RAM tầm khoảng 16GB thì mới mượt được.

Để tải Docker, bạn có 2 cách:

  • Một là vào Docker Store để tải. Với cách này thì chỉ dành cho Window 8 trở lên.
  • Hai là vào trang chủ để tải Docker.
Tải Docker
Tải Docker từ trang chủ

Bạn được chuyển sang trang để tải Docker cho tất cả OS. Bạn chọn bản stable docker cho window.

Sau khi tải xong, bạn click đúp vào bộ cài và tiến hành cài như trình hướng dẫn của docker. Khi cài đặt hoản tất, bạn sẽ được yêu cầu khởi động lại máy tính. Cứ làm theo lời nó nói 🙂

Để chạy docker, bạn click vào icon trên màn hình desktop hoặc trên taskbar. Nếu bạn thấy cảnh báo yêu cầu cấp quyền để có thể start service của docker thì bạn cứ click vào start nhé.

Yêu cầu cấp quyền để start docker service
Yêu cầu cấp quyền để start docker service

Tắt tính năng khởi động cùng window

Mặc định, Docker sẽ khởi động cùng window mỗi khi bạn restart hay login máy tính. Như mình đã đề cập ở trên, Docker ngốn khá nhiều RAM, nên mình không recommend bật tính năng khởi động cùng window này.  Mình chỉ nên bật docker khi nào thực sự cần dùng tới thôi.

Cách làm như sau: Settings -> General Tab. Bỏ check ở mục “Start Docker when you login”.

Cấu hình Docker

Click “Apply & Restart”. Ở đây chỉ khởi động lại service docker thôi, chứ không phải khởi động lại máy tính nhé.

Vậy là chúng ta đã hoàn thành việc cài đặt docker rồi đấy. Giờ tới phần sử dụng Docker nhé.

👉 Đọc tiếp: Sử dụng Docker – những câu lệnh cơ bản (phần 2)

Dịch vụ phát triển ứng dụng mobile giá rẻ - chất lượng

1
Bình luận. Cùng nhau thảo luận nhé!

avatar
  Theo dõi bình luận  
Mới nhất Cũ nhất Nhiều voted nhất
Thông báo
Thảo Nguyễn
Guest
Thảo Nguyễn

Đang tìm hiểu docker là gì thì gặp bài viết này. Admin viết thêm về Docker nữa đi ạ