Docker Context: Tính năng cực kỳ hữu ích nhưng 90% anh em thường bị bỏ qua

Tram Ho

Overview

Hồi mới dùng Docker, mình muốn thao tác gì đó trên server đều phải chạy lệnh SSH để access vào server. Mình để ý thấy rất rất nhiều anh em dev cũng giống như mình! Dù đã tìm hiểu, biết cách sử dụng Docker để dựng môi trường phát triển nhưng lại vô tình bỏ qua một tính năng cực kỳ hữu ích. Đó chính là docker context.

Case study

Trước hết hãy xem qua một số ví dụ sử dụng docker context phổ biến nhé.

1. Remote Docker Context qua SSH

Mình sẽ tạo context có tên myvps như sau:

Sau đó, sử dụng context trên để chạy lệnh Docker CLI ngay dưới local mà không phải truy cập vào server nữa:

2. Remote Docker Context với Kubernetes

Thí dụ mình sẽ tạo Context để kết nối Docker CLI tới Docker Host là K8s Node chạy Docker. Ở đây mình sử dụng Minikube làm ví dụ minh họa.

Sử dụng context vừa tạo trên sẽ giúp mình chạy lệnh Docker CLI trên máy local mà không phải truy cập SSH vào server nữa. Vậy Docker Context là gì? Hãy cùng mình tìm hiểu nhé!

Docker Context là gì?

image.png

Ảnh 1: Docker Architecture – Nguồn: Docker

Chúng ta thao tác với Docker bằng cách lệnh chạy trên terminal thông qua bộ command gọi là Docker CLI. Docker CLI sẽ chuyển đổi command lại thành các lời gọi API tương ứng tới Docker daemon. Tất cả những thông tin mô tả về cách kết nối tới tới API (hay docker host) được tập hợp lại trong một thành phần gọi là Docker Context.

Thông tin được lưu trữ

Các thông tin được nắm giữ bởi một Docker Context gồm:

  • Name: Tên của context
  • Description: Mô tả về context
  • Docker Endpoint: URL để kết nối tới Docker daemon (bao gồm cả thông tin về TLS)
  • Kubernetes Endpoint: URL để kết nối tới Kubernetes cluster (trong trường hợp dùng k8s)
  • Orchestrator: Loại kiến trúc đang chạy trên nền Docker, có 2 giá trị lựa chọn: swarmkubernetes

Mặc định, sau khi cài đặt Docker trên Linux. Một cấu hình context có tên là default sẽ được thiết lập. Docker CLI sẽ đọc thông tin từ context để có thông tin kết nối.

Nếu không được add thêm các context khác, thì ngầm hiểu Docker CLI sẽ chỉ tương tác được với Docker daemon trên cùng một máy chủ. Tức Docker máy nào thì chỉ máy đó truy cập được theo context default.

Câu lệnh thường dùng

Liệt kê context đang có

  • Dùng để xem tất cả các context đã được lưu trên máy
  • Các tham số thường ít cần dùng đến, chỉ cần nhớ docker context ls là được

Command line

Ví dụ

1. Thêm context mới

  • Dùng để tạo mới một context trên máy

Command line

Trong đó có 2 phần cấu hình endpoint khác nhau tùy theo orchestrator mà chúng ta đang cấu hình:

  • Docker endpoint config – Các thông tin cần khi cấu hình theo Swarm
  • Kubernetes endpoint config – Các thông tin cần khi cấu hình theo Kubernetes

Ví dụ

Mình sẽ để cập cụ thể cách tạo context với mỗi loại trong phần tiếp theo (bên dưới).

2. Sửa một context

  • Dùng để chỉnh sửa, cập nhật thông tin cho một context đã tồn tại trên máy
  • Các tham số giống hệt với lệnh docker context create

Command line

Ví dụ

Cập nhật lại description cho context có tên là minikube:

Output:

3. Xóa một context

  • Dùng để xóa bỏ một context đã tồn tại trên máy
  • Cách tham số đi kèm thường ít cần dùng, chỉ cần nhờ docker context rm là được

Command line

Ví dụ

Output:

4. Chuyển context

  • Dùng để kích hoạt context từ inactive -> active (không dùng -> đang dùng)
  • Tại một thời điểm chỉ một context được sử dụng

Command line

Ví dụ

Output:

5. Others

Ngoài ra còn có một số command khác nhưng ít khi phải dùng, các bạn có thể nghiên cứu thêm:

  • docker context import
  • docker context export
  • docker context inspect
Chia sẻ bài viết ngay

Nguồn bài viết : Viblo