我有几个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 docker-env 再次构建相同的docker映像(使用minikube docker-env) 在部署中将imagePullPolicy更改为Never

实际上,你的Minikube不能识别你的docker守护进程,因为它是一个独立的服务。您必须首先设置您的minikube-docker环境使用下面的命令来检查

 "eval $(minikube docker-env)"

如果你运行下面的命令,它会显示你的minikube在哪里寻找docker。

~$ minikube docker-env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.37.192:2376"
export DOCKER_CERT_PATH="/home/ubuntu/.minikube/certs"
export MINIKUBE_ACTIVE_DOCKERD="minikube"

**# To point your shell to minikube's docker-daemon, run:**
# eval $(minikube -p minikube docker-env)

一旦你设置了minikube docker-env,你必须再次构建镜像,否则它会失败。

其他回答

一个想法是在本地保存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

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

注:

This Answer isnt limited to minikube! If wanting to create the registry on minikube's Docker then run eval $(minikube docker-env) first (to make docker available on the host machine's terminal). Otherwise enter in the virtual machine via minikube ssh, and then proceed with the following steps depending on your operative system, minikube will automatically mount your homepath onto the VM. as Eli stated, you'll need to add the local registry as insecure in order to use http (may not apply when using localhost but does apply if using the local hostname) Don't use http in production, make the effort for securing things up.


使用本地注册表:

docker run -d -p 5000:5000 --restart=always --name local-registry registry:2

现在正确地标记你的图像:

docker tag ubuntu localhost:5000/ubuntu

注意,localhost应该更改为运行注册表容器的机器的dns名称。

现在将您的映像推到本地注册表:

docker push localhost:5000/ubuntu

你应该可以把它拉回来:

docker pull localhost:5000/ubuntu

现在更改yaml文件以使用本地注册表。

考虑在适当的位置挂载卷,以便在注册表上持久化映像。

为了补充前面的答案,如果你有一个tarball映像,你可以简单地将它加载到你的本地docker映像集docker image load -i /path/image.tar .请记住在eval $(minikube docker-env)之后运行它,因为minikube不与本地安装的docker引擎共享映像。

除了接受的答案之外,您还可以使用以下命令实现您最初想要的(使用run命令创建部署):

kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 --generator=run-pod/v1 

我在Kubernetes-dev论坛上找到了关于生成器的信息:

如果您正在使用kubectl运行,它会为您生成一个清单,其中imagePullPolicy默认设置为Always。你可以使用这个命令来获取IfNotPresent的imagePullPolicy,这将适用于minikube: Kubectl run——image=<容器>——generator=run-pod/v1 丹Lorenc

https://groups.google.com/forum/ !主题/ kubernetes-dev / YfvWuFr_XOM

在之前的答案的基础上,使用eval $(minikube docker-env)来加载minikube的docker环境,为了更容易切换,在你的shell rc文件中添加以下函数:

dockube() {
  if [[ $1 = 'which' ]]; then
    if [[ $MINIKUBE_ACTIVE_DOCKERD = 'minikube' ]]; then
      echo $MINIKUBE_ACTIVE_DOCKERD
    else
      echo 'system'
    fi
    return
  fi

  if [[ $MINIKUBE_ACTIVE_DOCKERD = 'minikube' ]]; then
    eval $(minikube docker-env -u)
    echo "now using system docker"
  else
    eval $(minikube -p minikube docker-env)
    echo "now using minikube docker"
  fi
}

没有参数的Dockube将在系统和minikube docker环境之间切换,哪个Dockube将返回哪个Dockube正在使用。