如何直接在 Minikube 內構建容器映像檔
利用 Docker Machine 方式構建映像檔,加速開發不必費時 push & pull images
文章目錄
對於一般開發者來說要架設 Kubernetes 是件吃力不討好的事情,自從 minikube 推出後大幅減低進入門檻,讓任何人都可以輕易在電腦上執行本地端的 Kubernetes。minikube 原理是利用 Hyperviosr 在電腦上執行已經安裝好 Kubernetes 的虛擬機,再將 kubelet 的設定指向 minikube 內。
一般開發流程大概是:
- 修改程式
- 打包成映像檔,送到 remote registry
- 更新 pod spec
- docker daemon 從 registry 拉最新映像檔
但這陣子在開發時遇到幾個問題
- 無法直接從 google container registry 拉映像檔
- 程式改動頻繁時會花費許多時間在 push & pull 上,降低開發效率
後來發現可以利用 Docker Machine
的方式直接在遠端 docker-daemon 上打包映像檔來避免前述問題。
Docker 本身是主從式架構,從官方文件的圖可以看到 client 透過 RESTful API 和遠端的 server (docker daemon) 互相溝通。
因此只要在本地端設定好目標 server 相關資訊就能夠管理該 docker daemon,可以說執行 docker daemon 的機器就稱作 docker machine。
而 minikube 的虛擬機正好就是 docker machine 最好的範例,我們只要將目標位置指向 minikube,便可以利用 docker client 和其上執行的 daemon 溝通。
# bash shell
$ eval $(minikube docker-env)
# fish shell
$ eval (minikube docker-env)
只要這樣就指向完成了,此時接著執行 docker build 的話,整個流程會變成
docker client 會把 build context 送往 minikube 內的 docker daemon 進行打包。打包出來的映像檔是存在 minikube 虛擬機內,如此一來裡面的 K8S 就不必花時間重新拉容器映像檔摟!
eval (minikube docker-env) 指令有誤,(
前面少個 $
$ eval $(minikube docker-env)
bash 的 set
不支援 -g
參數,可以改直接執行下面的指令設定
set -x DOCKER_TLS_VERIFY "1";
set -x DOCKER_HOST "tcp://192.168.99.100:2376";
set -x DOCKER_CERT_PATH "$HOME/.minikube/certs";
set -x DOCKER_API_VERSION "1.23";
相關文章
- Adopting Container and Kubernetes in Production
- Fission 1.4 更新重點聚光燈
- Fission x Istio 迸出新滋味
- Kubernetes Service 深度剖析 - 標籤對於 Service 的影響
- 從 Google Kubernetes Engine 移除節點
文章內容的轉載、重製、發佈,請註明出處: https://tachingchen.com/tw/
Twitter
Google+
Facebook
Reddit
LinkedIn
StumbleUpon
Pinterest
Email