miyazi888の覚え書き日記

学習したことを書き留めてます。

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