minikubeでローカルのdockerイメージを使う
きっかけ
kubernetesの学習目的でminikubeをインストール。 学習中、minikubeでもローカルのdocker imageを使用したくなった。
ネットで検索するとだいたい、下記のような方法が記載されていた。
eval $(minikube docker-env)
ところが、自分の環境では、これではローカルのdocker imageを使うことが出来なかった。
minikubeのruntimeにcontainerdを使っていることが原因ではないかと推測。 なぜなら初回のminikube start時にruntimeにcontainerdを強制されたから。
そこで他に方法はないかとネットを検索するとminikubeの公式にimageなるサブコマンドがあることに気づいた。 これを使えばどうにかローカルのイメージを使えるのでは・・・ と思い実験してみた。 https://minikube.sigs.k8s.io/docs/commands/image/
結論
minikube image loadを使うことでminikube上でもホスト側のイメージを取り込んで使用することが出来た。
minikube image load <image-name>:<image-tag>
動作確認
以下、本当にローカルのイメージをminikubeで使うことができるのか実験してみた。
前提
動作確認した環境は以下のとおり。 上にも記述したようにminikubeのruntimeはcontainerd。
- ubuntu 20.04
- minikube v1.24.0
- kubectl v1.20.8-dispatcher
動作確認用のdockerイメージ作成
htmlファイル作成
まずは動作確認用に下記のようなHTMLを表示するイメージを作成。
mkdir html touch html/index.html
html/index.html
<html> <h1>sample page</h1> </html>
dockerイメージ作成
次に以下のようにDockerFileとdocker-compose.ymlを作成。
touch Dockerfile
Dockerfile
FROM 'nginx:latest'
COPY html/index.html /usr/share/nginx/html/index.html
RUN service nginx start
touch docker-compose.yaml
docker-compose.yaml
version: '3' services: nginx: build: ./ image: nginx-sample ports: - 80:80
dockerイメージの動作確認
ここで一旦、dockerイメージの作成と動作確認を行う。
docker-compose up -d
起動したら、ブラウザでlocalhostにアクセスする。 「sample page」と表示されれば、成功。
イメージにタグ付けする
最後に作成したイメージにタグ付けする。 この段階ですでにイメージそのものは作成されているけど、タグはlatestとなっていると思う。 なぜかminikubeではlatestタグのイメージは扱えなさそうなのでlatest以外のタグを付ける(latestが使えない理由はわからなかった・・・) ここでv1タグを付ける。
docker tag <docker image id> nginx-sample:v1
minikubeに作成したdockerイメージを起動できることを確認
起動
まずはminikubeそのものを起動
minikube start
イメージを取り込む
ここでminikubeにローカルのイメージを取り込み。
minikube image load nginx-sample:v1
minikubeで扱うことができるイメージの一覧は以下のコマンドで確認できた。
minikube image ls
取り込んだイメージを使う
以下のコマンドで取り込んだイメージのdeploymentの作成と公開を行う。
kubectl create deployment test --image=nginx-sample:v1 kubectl expose deployment test --type=NodePort --port=80 minikube service test --url
画面に表示されたURLにブラウザでアクセスし、sample pageが出たらアクセスOK。 自分の環境ではこれで動作した。
後片付け
動作確認が済んだので以下のような後片付けをして完了。
minikube stop kubectl delete svc test kubectl delete deploy test minikube image rm nginx-sample:v1 docker-compose down docker rmi nginx-sample:latest docker rmi nginx-sample:v1