@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

minikubeでローカルのdocker imageやDockerfileを利用する

tl;dr

$ env $(minikube docker-env)
$ cd path/to/build
$ docker build -t local/myapp:1.0.0
$ minikube kubectl -- create deployment test-app --image=local/myapp:1.0.0

ドキュメントを一通り読めばよかった

minikube.sigs.k8s.io

minikubeはproduction useに適さないらしいしkubernetesの練習にと試しているところだったのでdockerイメージもお試しのオレオレイメージを使いたかった。

でもkubectlでイメージ指定するときはローカルで普段使っているdockerイメージが参照できなかった。

さらっとググっただけではビルドしてタグ付けてpushしましょうという記事が出てくる。ググり方が悪かった。

前提はminikubeのエンジンをdockerにしている

minikubeが用意したdockerエンジンを参照して、そのエンジンが見るイメージ置き場にイメージを用意すればよい

minikubeが用意したdockerエンジンを使うにはminikubeに聞けばよい

minikube.sigs.k8s.io

podmanを使っている場合は podman-envでよいはず

minikube.sigs.k8s.io

$ minikube docker-env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://127.0.0.1:495156"
export DOCKER_CERT_PATH="path/to/.minikube/certs"
export MINIKUBE_EXISTING_DOCKER_HOST="original/docker/host"
export MINIKUBE_ACTIVE_DOCKERD="minikube"

これをbashからenvで読み込めば今使ってるセッションはminikubeが用意したdockerエンジンを参照するようになる (環境変数DOCKER_HOSTによる)

$ env $(minikube docker-env)

その状態で使いたいDockerfileをいつも通りビルドしてタグ付けしてあげれば、minikubeのkubectlで利用できるイメージになる。

docker build -t myimages/some-cool-image:latest .