Docker là gì? Giới thiệu về Docker (Phần 1)

08 June, 2022

Chắc hẳn bạn người đọc bài viết này rất muốn biết Docker là gì? Nó có điều gì đặc biệt mà mọi người trong thời gian qua lại tập trung vào nó nhiều như vậy? Bài viết này sẽ giúp các bạn hiểu rõ được nó.

Tôi nhớ cách đây khoảng từ 6 đến 7 năm, khi nói về vấn đề thiết lập môi trường DEV chúng ta biết nhiều hơn về Virtual Machines (VMs), để dùng VMs người dùng cần phải cài trên máy chính (Host) và nó sẽ tạo ra các máy ảo để chúng ta có thể cài đặt hệ điều hành cho hệ thống. Khi đó việc chạy một VMs sẽ tốn rất nhiều tài nguyên trên Host, làm tăng chi phí phần cứng cho các hệ thống ứng dụng nó.

Bạn có biết cảm giác khi một máy bật 1 máy VMs với một cái PC RAM 4GB nó trở nên cồng kềnh và nặng nề thế nào không, lúc đó thực sự là một trải nghiệm tệ hại.

Và lúc đó khái niệm về Docker bắt đầu xuất hiện nhiều hơn (Docker xuất bản lần đầu là 2013, phiên bản ổn định là 2016). Ở công ty tôi làm thời điểm đó có một anh bạn trình bày trước đội Team Lead về Docker, lúc đó trong tôi khá mơ hồ về những khái nhiệm như Docker-File, Docker-Image, Docker-Container… nghe sao còn lạ lẫm lắm.

Nhưng đến thời điểm hiện tại thì khái niệm về Docker đã trở nên phổ biến, rất nhiều các công ty, đội nhóm áp dụng, nên chắc hẳn không còn xa lạ với mọi người.

Docker là gì?

Có rất nhiều những khái niệm về Docker, như ở trang chủ định nghĩa: “Docker là một nền tảng mở để phát triển, vận chuyển và chạy các ứng dụng”.

Hay ở những trang mạng khác “Docker là một nền tảng để Develop, Deploy và Run application với container. Nó cho phép tạo các môi trường độc lập và tách biệt để khởi chạy và phát triển ứng dụng và môi trường này được gọi là container.

docker-la-gi

Nói tóm lại có một điểm tựu chung ở các định nghĩa đó là Docker cung cấp một môi trường độc lập có thể chạy trên mọi hệ điều hành, giúp các nhà phát triển dễ dàng đóng gói và triển khai các ứng dụng của mình

Lợi ích và ứng dụng của Docker

Trước kia khi chưa biết đến Docker, mình thấy các Dev “cực khổ” mỗi lần Build hay Setup môi trường, rồi cả Deploy lên hệ thống. Có những lúc tương thích với môi trường trên máy này nhưng lại không tương thích trên máy kia, khi đó lại phải quay qua hỏi “chị Google”.

Và từ khi có Docker mọi chuyện đã đơn giản hơn rất nhiều, việc thiết lập môi trường build chỉ trong vài câu lệnh, không còn phải lo lắng về câu chuyện tương thích, hay mò mẫm setup từng package. Giờ đây chỉ với file Docker-file được bạn Team Lead dựng lên, các Dev có thể dễ dàng thiết lập môi trường cho mình một cách nhanh chóng, tiết kiệm cũng được kha khá thời gian.

Đó là một số điểm lợi ích của nó, ngoài ra còn có những lợi ích gì mà các Dev “mê” vậy, mình sẽ tóm lược các lợi ích ngay sau đây nhé:

  • Để khởi động môi trường nhanh, đơn giản, chỉ cần start/stop, không mất thời gian như máy ảo
  • Có thể chạy Container ở bất kỳ hệ thống mà bạn muốn
  • Việc build và loại bỏ nhanh hơn máy ảo rất nhiều
  • Dễ dàng thiết lập môi trường
  • Một điểm mình rất thích là khi muốn loại bỏ, thì nó thực sự “sạch sẽ”, không còn rác như khi mình loại bỏ máy ảo, vì tất cả môi trường thiết lập đã được đóng gói sẵn.

Những khái niệm cơ bản

Qua những điều mình nêu ở trên, chắc các bạn cũng mường tượng được Docker làm được những gì và lợi ích nó như thế nào rồi. Để tiếp cận được dễ dàng với hơn, mình sẽ gửi các bạn một số khái niệm cơ bản.

docker-image: Đây là một rất khái niệm quan trọng, bạn đừng vội nhầm lẫn đó là ảnh nhé, docker-image là một file bất biến – không thay đổi, chứa các source code, libraries, dependencies, tools và các file khác cần thiết cho một ứng dụng để chạy. Từ các thành phần trong docker-Image sẽ tạo ra được các container. VD:  Ubuntu image, Ruby image, Rails image, Mysql image… Đây là những hệ điều hành, tools, ngôn ngữ hoặc thậm chí là các môi trường để chạy ứng dụng.

docker-file: Bình thường chúng ta hay thấy docker-file được gửi kèm với Source Code của dự án, đây chính là config để build ra một Image. Nó sẽ dùng một image cơ bản để xây dựng thành lớp image ban đầu.

docker-container: là một run-time environment mà ở đó người dùng có thể chạy một ứng dụng độc lập. Những container này rất gọn nhẹ và cho phép bạn chạy ứng dụng trong đó rất nhanh chóng và dễ dàng.

Docker Client: là cách mà bạn tương tác với docker thông qua command trong terminal. Docker Client sẽ sử dụng API gửi lệnh tới Docker Daemon.

Docker Demon: là server Docker cho yêu cầu từ Docker API. Nó quản lý images, containers, networks và volume.

Docker Volumes: là cách tốt nhất để lưu trữ dữ liệu liên tục cho việc sử dụng và tạo apps.

Docker Registry: là nơi lưu trữ riêng của Docker Images. Images được push vào registry và client sẽ pull images từ registry. 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.

Docker Hub: là Registry lớn nhất của Docker Images ( mặc định). Có thể tìm thấy images và lưu trữ images của riêng bạn trên Docker Hub ( miễn phí).

Docker Repository: là tập hợp các Docker Images cùng tên nhưng khác tags. VD: golang:1.11-alpine.

Docker Networking: cho phép kết nối các container lại với nhau. Kết nối này có thể trên 1 host hoặc nhiều host.

Docker Swarm: để phối hợp triển khai container.

Docker Services: là các containers trong production. 1 service chỉ run 1 image nhưng nó mã hoá cách thức để run image — sử dụng port nào, bao nhiêu bản sao container run để service có hiệu năng cần thiết và ngay lập tức.

Trên đây mình đã giới thiệu cơ bản các bạn về Docker, hi vọng sẽ giúp các bạn dễ dàng hơn khi bắt đầu tiếp cận với nó. Mình sẽ giới thiệu tiếp các bạn về các câu lệnh và Demo, để qua đó các bạn có thể “vọc” một cách dễ dàng hơn. Hẹn gặp các bạn ở bài tiếp theo.


Công ty TNHH Giải pháp công nghệ GCode
Địa chỉ: số 45 ngõ 196 Hồ Tùng Mậu, phường Phúc Diễn, quận Bắc Từ Liêm, Hà Nội
SDT+84-914-999-668 (08:00 – 17:00)
Emailinfo@gcode.jp
FacebookGCode Solutions Co.,LTD
Linkedin: GCode Solutions Co.,LTD

Useful information

BLOG

Download our eBook!

Get to know us ebook download!

Preparing