Bash Completion for Docker and Kubectl

有句話說的好:「工欲善其事,必先利其器」。使用 docker 或 kubectl 命令行工具的時候,往往會被很多子命令以及參數困擾。事先設定好 Completion 命令補齊完成功能,可以讓平日工作輕鬆些。

在之前幾篇文章有約略提到 Bash Completion ,但沒有詳細介紹,這篇文章專門說明在 Linux Bash Shell 環境下的設定方式。



一、關於 Docker 部分,可以進一步細分爲 docker 命令本身,docker-compose, docker-machine 三項,


(1)docker 命令本身


下載內容

https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker

並儲存在 /etc/bash_completion.d/docker

可用 curl 命令如下:
$ sudo curl -L https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker -o /etc/bash_completion.d/docker-completion

下次登入即可使用。

或是儲存在家目錄下 $HOME/bash_completion.d/docker ,
然後在家目錄下的 .bashrc 文件加入下面指令後,下次登入即可使用

# $HOME/.bashrc
# Docker client bash shell completion
. $HOME/bash_completion.d/docker


(2)docker-compose


專門針對 docker-compose 的命令補齊完成功能,是另外一段 bash 腳本,
可用 curl 命令下載:
$ sudo curl -L https://raw.githubusercontent.com/docker/compose/1.18.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

儲存在 /etc/bash_completion.d/docker-compose

或是儲存在家目錄下 $HOME/bash_completion.d/docker-compose ,
然後在家目錄下的 .bashrc 文件加入下面指令後,下次登入即可使用

# $HOME/.bashrc
# Docker compose bash shell completion
. $HOME/bash_completion.d/docker-compose


(3)docker-machine


專門針對 docker-machine 的命令補齊完成功能,是另外一段 bash 腳本,
可用 curl 命令下載:
$ sudo curl -L https://raw.githubusercontent.com/docker/machine/v0.13.0/contrib/completion/bash/docker-machine.bash -o /etc/bash_completion.d/docker-machine

儲存在 /etc/bash_completion.d/docker-machine

或是儲存在家目錄下 $HOME/bash_completion.d/docker-machine ,
然後在家目錄下的 .bashrc 文件加入下面指令後,下次登入即可使用

# $HOME/.bashrc
# Docker machine bash shell completion
. $HOME/bash_completion.d/docker-machine


需要注意的是,由於 docker CLI / API 隨着版本更新,必須視所使用的版本更新上述腳本。
另外,少數需要開啓 experiment 特性才能啓動的參數以及子命令在 completion 可能無法辨別。



二、關於 Kubectl 部分,

在家目錄下的 .bashrc 文件加入下面指令後下次登入即可使用,

# $HOME/.bashrc
# Kubernetes client (kubectl) bash shell completion
source <(kubectl completion bash)




結論:

磨刀不誤砍柴工。

如果有安裝好 bash completion,命令行中輸入
docker im<tab>

( 打字停在 im,還沒輸入完就直接打 TAB 鍵)
命令行會提示你
image images import
三個選項讓你參考,
Docker bash completion 除了解析自身子命令以及參數之外,
也能辨識當前主機下的 volume 名稱,image 名稱,(含 tag ),等等,
當你長時間在自己的主機內建置保存了很多 images 且每一個 image 有着不同的 tag , 這個功能將會變得非常實用!

如果有安裝 Kubernetes kubectl 的 bash completion,如果輸入如下
kubectl -n kube-system get po<tab>
( 打字停在 po,還沒輸入完就直接打 TAB 鍵,它會自動補齊完整的名字 pods )

最後補充一點,Kubernetes kubectl 的 bash completion 跟 Docker EE UCP client bundle 兩者也可以配合的很好!
趕快來試試吧!

留言

這個網誌中的熱門文章

Docker 環境下的 Proxy 配置