私はDocker for MacをKubernetesのサポートとともに使用しており、ローカルに構築されたイメージを参照するKubernetes Deploymentの作成に苦労しています。
docker images
の出力:
REPOSITORY TAG IMAGE
test latest 2c3bdb36a5ed
私のdeployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: helloworld-deployment
spec:
selector:
matchLabels:
app: helloworld
replicas: 1
template:
metadata:
labels:
app: helloworld
spec:
containers:
- name: aaa
image: test:latest
ports:
- containerPort: 8080
kubectl apply -f deplyment.yaml
を実行すると、ポッドが作成されますが、
helloworld-deployment-764b8b85d8-2c4kl 0/1 ImagePullBackOff 0
helloworld-deployment-764b8b85d8-rzq7l 0/1 ImagePullBackOff 0
これらのポッドのいずれかのkubectl describe
は以下を提供します。
Normal Scheduled 20s default-scheduler Successfully assigned helloworld-deployment-79f66d97c6-7tj2x to docker-for-desktop
Normal SuccessfulMountVolume 19s kubelet, docker-for-desktop MountVolume.SetUp succeeded for volume "default-token-72f44"
Normal BackOff 16s kubelet, docker-for-desktop Back-off pulling image "test:latest"
Warning Failed 16s kubelet, docker-for-desktop Error: ImagePullBackOff
Normal Pulling 4s (x2 over 19s) kubelet, docker-for-desktop pulling image "test:latest"
Warning Failed 2s (x2 over 17s) kubelet, docker-for-desktop Failed to pull image "test:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for test, repository does not exist or may require 'docker login'
Warning Failed 2s (x2 over 17s) kubelet, docker-for-desktop Error: ErrImagePull
おもしろいのは、dockerhubでホストされているイメージを実行しようとすると、すべてがうまくいくということです。 skaffold も使用しようとしましたが、チャーム...
解決策は、minikubeドッカーデーモンを使用してイメージを作成し、Kubernetesクラスターから参照できるようにすることです。
ローカルリポジトリを設定しないようにしたいので、DockerのKubernetesで動作させるにはどうすればよいですか?
imagePullPolicy
をNever
に設定することで、ローカルイメージを実行できました。
例えば:
apiVersion: v1
kind: Pod
metadata:
name: local-image-test
spec:
containers:
- name: local-image-container
image: local-image:latest
imagePullPolicy: Never
( https://github.com/kubernetes/kubernetes/issues/1293#issuecomment-357326426 このソリューションのクレジット)
Dockerイメージを実稼働環境に出荷する場合は、最新のタグを無視する必要があるため、最新ではなくタグ付きバージョンのイメージを使用します。使用しないでください。それに誘惑されないでください。簡単に確認でき、展開スクリプトで「最新」を取得するだけで、ビルドプロセスで有効になります。
techtrainer のコメントと回答に加えて、その方法の例をいくつか示したいと思います。
原則。 latest
ではなく、タグバージョンの画像を使用する必要があります。 Dockerタグを使用すると、取得できる具体性が高いほど優れています。間違った画像の使用を避けるために特定してください。同僚や他のDockerユーザーが画像をプルダウンしたり、それらがどれだけ最近のものかわからないようにしたくない場合は、これを考慮してください。そのような問題を避けるために具体的になってください。
docker tag IMAGE ID image/TAG:version.d.m.y
画像の管理を改善するために、スマートな命名規則が必要です。イメージの作成の段階、バージョン、および日付を使用することを好みます。例えば:
docker tag 113a43faa138 ubuntu/prod:v1.8.6.2018
2018年6月8日に作成された生産段階、バージョン1を意味します。
そして、それだけです。あなたのバージョンが利用可能であり、命名はあなたとこのイメージのさらなるユーザーにとって理解しやすいです。