web-dev-qa-db-ja.com

Docker for Mac-Kubernetes-参照ローカルイメージ

私は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で動作させるにはどうすればよいですか?

14
user62058

imagePullPolicyNeverに設定することで、ローカルイメージを実行できました。

例えば:

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 このソリューションのクレジット)

24
Levi Blackstone

Dockerイメージを実稼働環境に出荷する場合は、最新のタグを無視する必要があるため、最新ではなくタグ付きバージョンのイメージを使用します。使用しないでください。それに誘惑されないでください。簡単に確認でき、展開スクリプトで「最新」を取得するだけで、ビルドプロセスで有効になります。

4
Prateek Jain

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を意味します。

そして、それだけです。あなたのバージョンが利用可能であり、命名はあなたとこのイメージのさらなるユーザーにとって理解しやすいです。

0
d0bry