- vừa được xem lúc

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

0 0 16

Người đăng: Nguyễn Hữu Kim

Theo Viblo Asia

Hello hello, xin chào tất cả ae. 👋 👋 👋 Chào mừng ae đã quay lại với kênh Viblo của mình. Ae đã vào đây thì thả một comment chào nhau cái cho vui nhé.

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:

docker context create myvps --docker "host=ssh://nguyen.huu.kim@myvps"

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:

docker context use myvps myvps
Current context is now "myvps"

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.

docker context create minikube --default-stack-orchestrator=kubernetes --kubernetes config-file=/home/nguyen.huu.kim/.kube/config --docker host=tcp://172.17.0.2:2376

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
NAME DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
default Current DOCKER_HOST based configuration unix:///var/run/docker.sock swarm

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

Usage: docker context ls [OPTIONS] List contexts Aliases: ls, list Options: --format string Pretty-print contexts using a Go template -q, --quiet Only show context names

Ví dụ

NAME DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
default Current DOCKER_HOST based configuration unix:///var/run/docker.sock swarm

1. Thêm context mới

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

Command line

docker context create [OPTIONS] CONTEXT Create a context Docker endpoint config: NAME DESCRIPTION
from Copy named context's Docker endpoint configuration
host Docker endpoint on which to connect
ca Trust certs signed only by this CA
cert Path to TLS certificate file
key Path to TLS key file
skip-tls-verify Skip TLS certificate validation Kubernetes endpoint config: NAME DESCRIPTION
from Copy named context's Kubernetes endpoint configuration
config-file Path to a Kubernetes config file
context-override Overrides the context set in the kubernetes config file
namespace-override Overrides the namespace set in the kubernetes config file Example: $ docker context create my-context --description "some description" --docker "host=tcp://myserver:2376,ca=~/ca-file,cert=~/cert-file,key=~/key-file" Options: --default-stack-orchestrator string Default orchestrator for stack operations to use with this context (swarm|kubernetes|all) --description string Description of the context --docker stringToString set the docker endpoint (default []) --from string create context from a named context --kubernetes stringToString set the kubernetes endpoint (default [])

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

Usage: docker context update [OPTIONS] CONTEXT Update a context Docker endpoint config: NAME DESCRIPTION
from Copy named context's Docker endpoint configuration
host Docker endpoint on which to connect
ca Trust certs signed only by this CA
cert Path to TLS certificate file
key Path to TLS key file
skip-tls-verify Skip TLS certificate validation Kubernetes endpoint config: NAME DESCRIPTION
from Copy named context's Kubernetes endpoint configuration
config-file Path to a Kubernetes config file
context-override Overrides the context set in the kubernetes config file
namespace-override Overrides the namespace set in the kubernetes config file Example: $ docker context update my-context --description "some description" --docker "host=tcp://myserver:2376,ca=~/ca-file,cert=~/cert-file,key=~/key-file" Options: --default-stack-orchestrator string Default orchestrator for stack operations to use with this context (swarm|kubernetes|all) --description string Description of the context --docker stringToString set the docker endpoint (default []) --kubernetes stringToString set the kubernetes endpoint (default [])

Ví dụ

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

docker context update minikube --description "Docker Host for Minikube"

Output:

minikube
Successfully updated context "minikube"

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

Usage: docker context rm CONTEXT [CONTEXT...] Remove one or more contexts Aliases: rm, remove Options: -f, --force Force the removal of a context in use

Ví dụ

docker context rm minikube

Output:

minikube
Successfully deleted context "minikube"

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

Usage: docker context use CONTEXT Set the current docker context

Ví dụ

docker context use minikube

Output:

minikube
Current context is now "minikube"

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

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 397

- vừa được xem lúc

Phần 1: Giới thiệu về Kubernetes

Kubernetes là gì. Trang chủ: https://kubernetes.io/. Ai cần Kubernetes.

0 0 100

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 1- Lịch sử)

1. Vì sao nên sử dụng. . .

0 0 104

- vừa được xem lúc

Docker - những kiến thức cơ bản phần 1

Giới thiệu. Nếu bạn đang làm ở một công ty công nghệ thông tin, chắc rằng bạn đã được nghe nói về Docker.

0 0 78

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 2 - Dockerfile)

1. Mở đầu.

0 0 67

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 3: Docker-compose)

1. Mở đầu. . .

0 0 121