我有几个docker映像,我想使用minikube。我不想先上传然后再下载相同的图像,而不是直接使用本地图像。我怎么做呢?

我尝试过的东西: 1. 我试着运行这些命令(分别删除minikube的实例并重新开始)

kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 imagePullPolicy=Never

输出:

NAME                    READY     STATUS              RESTARTS   AGE
hdfs-2425930030-q0sdl   0/1       ContainerCreating   0          10m

它只是停留在某个状态,但从未达到就绪状态。

2. 我试着创建一个注册表,然后将图像放入其中,但这也不起作用。我可能做错了,但我找不到正确的说明来做这个任务。

请提供在本地kubernetes实例中使用本地docker映像的说明。 操作系统:ubuntu 16.04 Docker: Docker版本1.13.1,build 092cba3 Kubernetes:

Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.3", GitCommit:"029c3a408176b55c30846f0faedf56aae5992e9b", GitTreeState:"clean", BuildDate:"2017-02-15T06:40:50Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"1970-01-01T00:00:00Z", GoVersion:"go1.7.1", Compiler:"gc", Platform:"linux/amd64"}

如果有人能帮我找到一个解决方案,使用docker-compose来做到这一点,那就太棒了。

编辑:

在eval $(minikube docker-env)中加载的图像:

REPOSITORY                                            TAG                 IMAGE ID            CREATED             SIZE
fluxcapacitor/jupyterhub                              latest              e5175fb26522        4 weeks ago         9.59 GB
fluxcapacitor/zeppelin                                latest              fe4bc823e57d        4 weeks ago         4.12 GB
fluxcapacitor/prediction-pmml                         latest              cae5b2d9835b        4 weeks ago         973 MB
fluxcapacitor/scheduler-airflow                       latest              95adfd56f656        4 weeks ago         8.89 GB
fluxcapacitor/loadtest                                latest              6a777ab6167c        5 weeks ago         899 MB
fluxcapacitor/hdfs                                    latest              00fa0ed0064b        6 weeks ago         1.16 GB
fluxcapacitor/sql-mysql                               latest              804137671a8c        7 weeks ago         679 MB
fluxcapacitor/metastore-1.2.1                         latest              ea7ce8c5048f        7 weeks ago         1.35 GB
fluxcapacitor/cassandra                               latest              3cb5ff117283        7 weeks ago         953 MB
fluxcapacitor/apachespark-worker-2.0.1                latest              14ee3e4e337c        7 weeks ago         3.74 GB
fluxcapacitor/apachespark-master-2.0.1                latest              fe60b42d54e5        7 weeks ago         3.72 GB
fluxcapacitor/package-java-openjdk-1.8                latest              1db08965289d        7 weeks ago         841 MB
gcr.io/google_containers/kubernetes-dashboard-amd64   v1.5.1              1180413103fd        7 weeks ago         104 MB
fluxcapacitor/stream-kafka-0.10                       latest              f67750239f4d        2 months ago        1.14 GB
fluxcapacitor/pipeline                                latest              f6afd6c5745b        2 months ago        11.2 GB
gcr.io/google-containers/kube-addon-manager           v6.1                59e1315aa5ff        3 months ago        59.4 MB
gcr.io/google_containers/kubedns-amd64                1.9                 26cf1ed9b144        3 months ago        47 MB
gcr.io/google_containers/kube-dnsmasq-amd64           1.4                 3ec65756a89b        5 months ago        5.13 MB
gcr.io/google_containers/exechealthz-amd64            1.2                 93a43bfb39bf        5 months ago        8.37 MB
gcr.io/google_containers/pause-amd64           

当前回答

有两种简单的方法将本地图像加载到Minikube。

始终确保在部署yaml中设置imagePullPolicy: Never。

Eg:

spec:
  containers:
    - name: myapp
      image: pz/demo
      imagePullPolicy: Never
      ports:
        - containerPort: 8080

幸运的是,有两个简单的命令可以帮助解决这个问题。

第一个是图像加载命令。您可以使用以下命令将Docker映像从本地机器加载到Minikube集群中。

一般

minikube图像加载<IMAGE_NAME>

例子

Minikube图像加载pz/demo

将映像加载到Minikube集群后,可以重新启动上述部署的Pods,并注意到它们启动正常。

使用前一种方法,您总是在本地机器上构建Docker映像,然后将其移动到Minikube容器,这同样需要一些时间,尽管不是很多。

使用Minikube的映像构建命令,我们可以直接在Minikube容器中构建映像。

一般

minikube image build -t <IMAGE_NAME> <PATH_TO_DOCKERFILE>

例子

minikube image build -t pz/demo /New APP/Dockerfile

使用minikube image build命令,映像可以立即用于Minikkube,而不需要通过minikube image load命令进行第二步显式加载。

使用这两种方法中的一种,将我们的应用程序Docker镜像导入Minikube并重新启动Pods,我们可以重新检查部署的日志:

此外,为了验证端到端一切都按预期工作,我们可以使用以下命令将本地端口8080移植到部署的8080:

Kubectl端口转发部署/myapp 8080:8080

重新检查浏览器,我们看到本地构建的应用程序在Minikube集群上运行良好。

裁判:https://levelup.gitconnected.com/two-easy-ways-to-use-local-docker-images-in-minikube-cd4dcb1a5379

其他回答

新版本的minikube允许您通过运行本地docker实例加载映像

 minikube image rm image <imagename>:<version>  
 minikube image load <imagename>:<version> --daemon

load命令可能会显示错误,但图像仍然会加载到minikube实例中

现在有一个Minikube注册表插件,这可能是最简单的方法。以下是如何使用它:https://minikube.sigs.k8s.io/docs/tasks/registry/insecure/

注意,我有DNS问题,可能是一个bug。

kubernetes文档:

https://kubernetes.io/docs/concepts/containers/images/#updating-images

默认的拉取策略是IfNotPresent,它会导致Kubelet跳过已经存在的图像的拉取。如果你想一直用力拉,你可以做以下其中一种: 将容器的imagePullPolicy设置为Always; 使用:最新作为标签的图像使用; 启用AlwaysPullImages准入控制器。

或者换一种方式阅读:使用:latest标记强制始终拉取图像。如果你像上面提到的那样使用eval $(minikube docker-env),那么要么不使用任何标签,要么给你的本地映像分配一个标签,你可以避免Kubernetes试图强制拉出它。

一个想法是在本地保存docker映像,然后将它加载到minikube中,如下所示:

比方说,你已经有了puckel/docker气流图像。

将映像保存到本地磁盘- Docker save puckel/ Docker -气流> puckel_docker_airflow.tar 现在进入minikube docker env - Eval $(minikube docker-env) 加载本地保存的图像- Docker load < puckel_docker_airflow.tar

就是这么简单,它就像一个魅力。

大多数答案已经很棒了。 但我面临的一个重要问题是,如果你使用BuildKit

(DOCKER_BUILDKIT = 1)

然后,执行eval $(minkube docker-env)后创建的映像将不会进入minikube docker引擎。相反,它会到本地的docker引擎。

因此,如果您正在使用下面的任何引用

-mount = =缓存类型,target = / root /平方米。