Các thành phần chính của docker

Bài trước mình đã giới thiệu về ý tưởng của docker và lợi ích của docker trong quá trình phát triển và testing. Bài này mình sẽ giới thiệu về các thành phần chính và kiến trúc của docker, các bài sau sẽ là việc áp dụng docker vào để thực hiện automation test, bao gồm: selenium, serenity bdd, rest-assured…

I. Key concept của docker:

1. Image là tập hợp những layer của file system và metadata (có tác dụng xây dựng cấu trúc: môi trường và các thứ cần thiết để run application)

2. Container là running system được xác định bởi image.

Bạn có thể cảm thấy hơi “bối rối” vì sau khi đọc định nghĩa mình ghi ở trên. =))) mình cũng thế, khi đọc lần đầu tiên.

Imagecontainer, bạn có thể hiểu theo cách của OOP. Image được ví như Class, còn container là Object. Với 1 class, bạn có thể khởi tạo rất nhiều Object khác nhau, các Object này hoạt động riêng rẽ, không phụ thuộc lẫn nhau và khi Object có sự thay đổi thì cũng không hề thay đổi Class. Nói tóm lại, Image giống như 1 bản hướng dẫn, còn container là “thực thi” theo hướng dẫn.

Nhìn ở ảnh trên, ta có thể thấy là với 1 Image: Ubuntu, ta có thể tạo ra 3 containers, run 3 thứ khác nhau: nodejs, mysql và apache. Để làm được như vậy thì mỗi container có những điểm khác nhau về file system và metadata, nhưng chúng sẽ không cần copy thành 3 bản mà chỉ cần giữ những phần khác nhau. Cái đó dựa trên cơ chế copy-on-write, các bạn có thể tự tìm hiểu thêm.

II. Kiến trúc của docker

Docker được xây dựng theo cấu trúc client-server, giao tiếp với nhau thông qua Restful API.

  • Client là nơi bạn tạo ra các requests, có thể là terminal, powershell, cmd …
  • Servers là nơi tiếp nhận request, thực thi hành động và trả response lại cho client, có tên gọi là “daemon
  • Ngoài ra, trong docker còn có 1 thành phần nữa tên là “registry” đóng vai trò lưu giữ các phiên bản docker images. Nó giống hệt như git, có github/gitlab/bitbucket lưu trữ những version của code.

Nói về Registry thì nó cũng có 2 loại: 1 là public (ai vào cũng được), điển hình là docker hub; 2 là private là chỉ phục vụ riêng, không chia sẻ cho những user khác.

III. Flow làm việc:

  • Step 1: Bạn gõ lệnh vào terminal
  • Step 2: Docker daemon sẽ nhận request và xử lý request. (Nó có thể pull image từ Registry)
  • Step 3: Bạn nhận response trên terminal

Bài tới mình sẽ demo chạy test api bằng rest-assured có sử dụng docker. Nếu bạn nào chưa biết về rest-assured thì có thể xem ở đây.

Leave a Reply

Your email address will not be published. Required fields are marked *