我有几个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           

当前回答

如果你可以在docker的vm中运行k8s呢?在docker desktop的最新版本中有对这个功能的本地支持…您只需要启用这种支持。

https://www.docker.com/blog/kubernetes-is-now-available-in-docker-desktop-stable-channel/ https://www.docker.com/blog/docker-windows-desktop-now-kubernetes/

我是怎么发现的:

在阅读helm的文档时,他们会给你一个如何安装minikube的简短教程。 该教程将minikube安装在不同于docker的vm中。

所以当安装我的头盔图表时,我无法让helm/k8s拉出我使用docker构建的图像。这就是我提出这个问题的原因。

所以…如果你能适应docker桌面附带的任何版本的k8s,并且你能适应docker在任何虚拟机中运行,那么这个解决方案可能比其他一些解决方案更容易一些。

免责声明:不确定在windows/linux容器之间切换会产生什么影响。

其他回答

其他答案假设你使用minikube和VM,所以你的本地映像不能从minikube VM访问。

如果你使用minikube——vm-driver=none,你可以通过设置image_pull_policy为Never轻松重用本地映像:

kubectl run hello-foo --image=foo --image-pull-policy=Never

或者在相应的.yaml清单中为容器设置imagePullPolicy字段。

回答最初的问题“如何在Minikube中使用本地docker映像?”的一个更简单的方法是将映像保存到tar文件中并将其加载到Minikube中:

# export the docker image to a tar file
docker save --output my-image.tar the.full.path.to/the/docker/image:the-tag
# set local environment variables so that docker commands go to the docker in minikube
eval $(minikube docker-env)
# or if on windows: @FOR /f "tokens=*" %i IN ('minikube docker-env') DO @%i
# import the docker image from the tar file into minikube
docker load --input my-image.tar
# cleanup - put docker back to normal
eval $(minikube docker-env -u)
# or if on windows: @FOR /f "tokens=*" %i IN ('minikube docker-env -u') DO @%i

然后运行映像需要执行如下命令。确保包含"——image-pull-policy=Never"参数。

kubectl run my-image --image=the.full.path.to/the/docker/image:the-tag --image-pull-policy=Never --port=80

对于Windows用户来说,我是这么做的。

我使用docker桌面托管MiniKube映像,并使用PowerShell作为控制台。

首先,我创建我的MiniKube集群:

minikube start --bootstrapper=kubeadm --vm-driver=docker --profile "cluster1"

例如,假设我有一个Dockerfile包含:

FROM nginx

2步方法,建立一个图像,并上传图像到minikube

docker build -t mynginximage .
minikube image load mynginximage

或1步的方式,构建直接在MiniKube

minikube image build -t mynginximage .

在MiniKube中运行我的图像

kubectl run myweb --image=mynginximage --image-pull-policy=Never

或者通过mynginxpod。yaml文件:

apiVersion: v1
kind: Pod
metadata:
  name: myweb
spec:
  containers:
    - name: myweb
      image: mynginximage
      imagePullPolicy: Never
      ports:
        - containerPort: 80

kubectl应用-f .\mynginxpod.yaml

现在要测试它,运行:

kubectl get pods myweb
NAME    READY   STATUS    RESTARTS   AGE
myweb   1/1     Running   0          25s

要访问它:

kubectl exec --stdin --tty myweb -- /bin/bash

暴露它:

kubectl port-forward nginx 3333:80

我从ClickHouse操作符中找到了这个方法 它帮助并拯救了我的生命!

docker save altinity/clickhouse-operator | (eval $(minikube docker-env) && 
docker load)

加上@Farhad基于这个答案的回答,

这是设置本地注册表的步骤。

在本地机器中设置

本地机器中的安装主机名:编辑/etc/hosts添加这一行

docker.local 127.0.0.1

现在启动本地注册表(删除-d以运行非守护进程模式):

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

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

docker tag ubuntu docker.local:5000/ubuntu

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

docker push docker.local:5000/ubuntu

验证图片是否被推送:

curl -X GET http://docker.local:5000/v2/ubuntu/tags/list

在minikube中设置

SSH进入minikube使用:minukube SSH

编辑/etc/hosts添加该行

docker.local <your host machine's ip>

验证访问:

curl -X GET http://docker.local:5000/v2/ubuntu/tags/list

现在如果你尝试拉,你可能会得到一个http访问错误。

启用不安全访问:

如果你总是打算在这个本地设置中使用minkube,那么在默认情况下创建一个minikube来使用不安全的注册表(不会在现有集群上工作)。

minikube start --insecure-registry="docker.local:5000"

否则按照以下步骤:

systemctl stop docker

编辑docker服务文件:get path from systemctl status docker

它可能是:

/etc/systemd/system/docker.service.d / 10-machine.conf或 /usr/lib/systemd/system/docker.service

附加此文本(将192.168.1.4替换为您的ip)

——insecure-registry码头工人。Local:5000——insecure-registry 192.168.1.4:5000

到这条线

ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2376 -H . exe unix: / / / var /运行/码头工人。Sock——tlsverify——tlscacert /etc/docker/ca.pem ——tlscert /etc/docker/server.tlskey /etc/docker/server-key。Pem——label provider=virtualbox——insecure-registry 10.0.0.0/24

systemctl daemon-reload
systemctl start docker

试着拉:

docker pull docker.local:5000/ubuntu

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

容器: - name: mamp -django 图片:dockerhub / ubuntu

to

容器: - name: mamp -django 图片:docker.local: 5000 / nymbleup

不要在生产环境中使用http,努力确保安全。