fbpx

Docker là gì? Docker compose, docker swarm là gì? và những điều bạn chưa biết về Docker

Đăng lúc: 4:48 24/10/2019 -

Docker, thuật ngữ khá quen thuộc với dân Developer (lập trình viên) nhưng với những người mới đặt chân vào thế giới IT mà người ta hay gọi với cái tên “gà mờ công nghệ” tì chắc hẳn Docker vẫn còn là thuật ngữ khá mới mẻ, thậm chí còn chưa được nghe đến bao giờ. Vậy Docker là gì, nó có ý nghĩa như thế nào đối với một Developer? Nếu đây là những câu hỏi cần tìm lời đáp của các bạn thì đừng bỏ qua bài viết dưới đây nhé. Nó sẽ cho bạn câu trả lời chính xác nhất đấy!

Docker là gì?

Theo wikipedia (bách khoa toàn thư hay tiến sĩ biết tuốt như mọi người vẫn hay gọi) thì Docker là một dự án mã nguồn mở giúp tự động triển khai các ứng dụng Linux và Windows vào trong các container ảo hóa. Docker sẽ cung cấp một lớp trừu tượng và tự động ảo hóa dựa trên Linux, sử dụng những tài nguyên cô lập của Linux như kernel, cgroups, quản lý tệp để cho phép các container chạy độc lập bên trong một thực thể Linux.

Nghe thì có vẻ khá trừu tượng nhỉ, nhưng hiểu một cách đơn giản thì Docker là một nền tảng mở dành cho các Developer, 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.

Thành phần của Docker

Để hiểu rõ hơn Docker là gì, chúng ta cùng đi sâu vào tìm hiểu thêm các khái niệm các thành phần của Docker nhé!

Docker Engine là gì?

Docker Engine là một thành phần chính của Docker được sử dụng để tạo ra Docker Image và chạy Docker Container.

Docker Hub là gì?

Docker Hub (Registry) là một kho chứa các Image được Publish bởi cộng đồng Docker. Docker Hub giống như GitHub cho phép bạn có thể tìm những Image cần thiết và pull về sử dụng.

Docker Machine là gì?

Docker Machine là một provisioning tool giúp người sử dụng dễ dàng tiếp cận từ “Zero to Docker”. Docker Machine đóng vai trò tạo Docker Engine trên máy chủ của bạn hoặc trên bất cứ dịch vụ cloud phổ biến nào như Azure, AWS, Google Cloud, Softlayer hoặc trên hệ thống data center như OpenStack, Vmware. Cách thức hoạt động của Docker Machine là tạo các máy ảo và cài Docker Engine lên chúng, cuối cùng nó sẽ cấu hình Docker Client để giao tiếp với Docker Engine một cách bảo mật.

Docker Compose là gì?

Docker Compose là một orchestration tool giúp ta tạo multi-container một cách dễ dàng (chú ý đối tượng ở đây là container chứ không phải engine hay host nhé). Và tất nhiên Docker Compose cũng có thể hoạt động với Swarm để tạo ra multi-container. Mặc định, Docker Compose sẽ tạo một single-network cho các ứng dụng của bạn, trong đó các container cũng có thể truy cập lẫn nhau thông qua mạng này.

Docker Images là gì?

Hiểu một cách đơn giản, Docker Images là một khuôn mẫu để tạo một Container. Thông thường, Images sẽ base (đặt cơ sở) trên 1 Images khác với những tùy chỉnh thêm. Chẳng hạn như bạn Build (xây dựng) dựa trên Image Ubuntu để chạy Apache Web Service, ứng dụng của bạn cùng những tùy chỉnh, cấu hình để ứng dụng của bạn có thể chạy được. Bạn có thể tự Build một Image riêng cho mình hoặc sử dụng những Image được Publish (công bố) từ cộng đồng Docker Hub. Một Image sẽ được Build dựa trên những chỉ dẫn của Dockerfile.

Container Docker là gì?

Container Docker là một dạng runtime của các Docker Image, được sử dụng để làm môi trường chạy ứng dụng.

Một số khái niệm liên quan khác

Docker Client là gì?

Docker Client là một công cụ được xây dựng để giúp người dùng giao tiếp với các Docker Host.

Docker Daemon là gì?

Docker Daemon lắng nghe các yêu cầu từ Docker Client để quản lý các đối tượng như Container, Image, Volumes và Network. Ngoài ra, các Docker Daemon cũng giao tiếp với nhau để quản lý các Docker Service.

Dockerfile là gì?

Dockerfile là một tập tin bao gồm các chỉ dẫn giúp Build một Image.

Docker Swarm là gì?

Docker Swarm là một công cụ giúp tạo ra một clustering Docker, gom nhiều Docker Engine lại với nhau và người sử dụng có thể “nhìn” nó như duy nhất một virtual Docker Engine.

Thực thế thì bất cứ công cụ nào có thể giao tiếp với Docker Engine thì cũng sẽ có thể giao tiếp với Docker Swarm như bình thường theo đúng chuẩn Docker API, và tất nhiên là trong suốt. Thông thường, một cụm Swarm có thể được cấu hình và deploy thông qua Docker Machine. Theo như bài test của Docker thì chỉ với một Swarm Manager, họ đã có thể scale ra 30.000 container trên 1000 node AWS. Bạn cũng có thể xem Swarm tương tự như Kubernetes. Tuy nhiên theo giới thiệu của Docker thì công cụ Swarm của họ lightweight và nhanh hơn gấp 5 lần so với Kubernetes.

Volumes là gì?

Volumes là phần dữ liệu được tạo ra khi container được khởi tạo.

Ưu và nhược điểm của Docker là gì?

Ưu điểm của Docker là gì?

Tính đồng nhất

Đây cũng chính là ưu điểm nổi bật nhất khi sử dụng Docker. Trong trường hợp nhiều người cùng phát triển một dự án trong môi trường, việc sử dụng Docker sẽ giúp hạn chế được sự sai khác nhất định giữa thành viên.

Tính nhất quán

Vơi Docker, bạn có thể test container được dùng để phát triển bằng CI. Dễ dàng deploy container đã được test bằng CI lên server. Ngoài ra, bạn cũng có thể thực hiện scale container đã được deploy.

Đóng gói

Với Docker, bạn có thể ẩn môi trường bao gồm cả App vào Container, có thể test được Container đồng thời cũng có thể dễ dàng bỏ hạy tạo Container.

Nhược điểm của Docker là gì?

Thời gian đầu, khi chạy 1 container, bạn sẽ thấy khá thoải mái, thậm chí cảm giác như làm chủ cả thế giới vậy. Tuy nhiên một thời gian ngắn sau đó thôi, bạn sẽ nhanh chóng gặp khá nhiều vấn đề khi áp dụng nó vào môi trường phát triển, thường xuyên xuất hiện những câu hỏi như “đoạn này phải làm thế nào nhỉ?”, hay “nên cài đặt bằng cách nào thì tốt hơn nhỉ?”…, đòi hỏi bạn phải nắm rõ những kiến thức chuyên sâu để có thể thực hiện một cách trơn tru nhất. Thực tế, trong một đội phát triển không cần tất cả mọi người đều phải có kiến thức chuyên sâu về Docker, tuy nhiên ít nhất cũng cần một người nắm vững những kiến thức đảm bảo có thể giải quyết được những vấn đề phát sinh trong quá trình sử dụng Docker. Ngoài ra, bạn cũng cần viết code trong môi trường này, gần không kém hơn so với phát triển trên local.

Khi nào cần sử dụng Docker

Các trường hợp sử dụng Docker phổ biến hiện nay:

– Khi cần triển khai kiến trúc Mircoservices.

– Khi cần build 1 lần và chạy ở nhiều máy khác nhau mà không cần quan tâm đến config.

– Khi bạn cần scale ứng dụng một cách linh hoạt.

– Khi cần một cách tiếp cận mới về building, running, shipping ứng dụng một cách nhanh chóng, dễ dàng.

Trên đây là một số khái niệm cơ bản về Docker là gì. Mong rằng những thông tin chia sẻ trong bài viết hôm nay có thể góp phần nhỏ bé giúp các bạn hiểu rõ về Docker là gì cũng như ưu nhược điểm mà nó mang đến cho người sử dụng. Tạm biệt và hẹn gặp lại các bạn trong các bài viết tiếp theo của mình nhé!

Bình luận