首页 文章

如何使用Minikube本地docker图像?

提问于
浏览
95

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

我试过的东西:
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,构建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

7 回答

  • 2

    This Answer isnt limited to minikube!

    使用本地注册表:

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

    现在正确标记您的图像:

    docker tag ubuntu localhost:5000/ubuntu
    

    请注意,localhost应更改为运行注册表容器的计算机的DNS名称 .

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

    docker push localhost:5000/ubuntu
    

    你应该能够把它拉回来:

    docker pull localhost:5000/ubuntu
    

    现在更改您的yaml文件以使用本地注册表 .

    考虑在适当的位置安装卷以将图像保留在注册表中 .

  • 60

    一种方法是在本地构建映像,然后执行:

    docker save imageNameGoesHere | pv | (eval $(minikube docker-env) && docker load)
    

    minikube docker-env 可能无法返回在其他用户/ sudo下运行的正确信息 . 相反,你可以运行 sudo -u yourUsername minikube docker-env .

    它应该返回类似的东西:

    export DOCKER_TLS_VERIFY="1"
    export DOCKER_HOST="tcp://192.168.99.100:2376"
    export DOCKER_CERT_PATH="/home/chris/.minikube/certs"
    export DOCKER_API_VERSION="1.23"
    # Run this command to configure your shell:
    # eval $(minikube docker-env)
    
  • 52

    要添加到先前的答案,如果你有一个tarball图像,你只需将它加载到本地docker图像集 docker image load -i /path/image.tar . 请记得运行它 after eval $(minikube docker-env) ,因为minikube不与本地安装的docker引擎共享图像 .

  • 6

    来自kubernetes文档:

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

    默认的拉取策略是IfNotPresent,它会导致Kubelet跳过拉动图像(如果已存在) . 如果您想总是强制拉动,可以执行以下操作之一:将容器的imagePullPolicy设置为Always; use:latest作为要使用的图像的标记;启用AlwaysPullImages准入控制器 .

    或者阅读另一种方式:使用:latest标签强制始终拉动图像 . 如果你使用上面提到的 eval $(minikube docker-env) ,那么要么不使用任何标签,要么为你的本 Map 像分配标签,你可以避免Kubernetes试图强行拉动它 .

  • 156

    正如README描述的那样,您可以使用 eval $(minikube docker-env) 重用Minikube中的Docker守护程序 .

    因此,要使用图像而不上传图像,您可以按照以下步骤操作:

    • eval $(minikube docker-env) 设置环境变量

    • 使用Minukube的Docker守护程序构建映像(例如 docker build -t my-image .

    • 在pod规范中设置图像,如构建标记(例如 my-image

    • imagePullPolicy设置为 Never ,否则Kubernetes将尝试下载图像 .

    Important note: 您必须在要使用的每个终端上运行 eval $(minikube docker-env) ,因为它只为当前shell会话设置环境变量 .

  • 5

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

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

    我在Kubernetes-dev论坛上找到了关于发电机的信息:

    如果您正在使用kubectl run,它会为您生成一个清单,其默认情况下将imagePullPolicy设置为Always . 您可以使用此命令获取IfNotPresent的imagePullPolicy,这将适用于minikube:kubectl run --image = <container> --generator = run-pod / v1 Dan Lorenc

    https://groups.google.com/forum/#!topic/kubernetes-dev/YfvWuFr_XOM

  • 2

    根据@svenwltr的解决方案,对我有用的是:

    # Start minikube
    minikube start
    
    # Set docker env
    eval $(minikube docker-env)
    
    # Build image
    docker build -t foo:0.0.1 .
    
    # Run in minikube
    kubectl run hello-foo --image=foo:0.0.1 --image-pull-policy=Never
    
    # Check that it's running
    kubectl get pods
    

相关问题