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

当前回答

对于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

其他回答

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

在kubernetes中运行本地docker映像的步骤 1. Eval $(minikube -p minikube docker-env) 2. 在工件文件中,在规范部分->容器添加 imagePullPolicy: IfNotPresent或imagePullPolicy: Never

apiVersion: "v1"
kind: Pod
metadata:
    name: web
    labels:
        name: web
        app: demo
spec:
    containers:
        - name: web
          image: web:latest
          imagePullPolicy: IfNotPresent
          ports:
              - containerPort: 5000
                name: http
                protocol: TCP

3.然后执行kubectl create -f <filename>

注:

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文件以使用本地注册表。

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

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

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)

正如手册所描述的,你可以使用eval $(Minikube Docker -env)重用Minikube中的Docker守护进程。

所以要使用图片而不上传,你可以按照以下步骤:

使用eval $(minikube docker-env)设置环境变量 使用Minikube的Docker守护进程构建映像(例如Docker Build -t my-image)。 在pod规范中设置像build标签一样的图像(例如my-image) 将imagePullPolicy设置为Never,否则Kubernetes将尝试下载映像。

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