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

当前回答

注:

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上的minikube:

选项1:使用minikube注册表

检查你的minikube端口 码头工人ps

您将看到如下内容:127.0.0.1:32769->5000/tcp 这意味着您的minikube注册表对外使用的是32769端口,但对内使用的是5000端口。

构建你的docker图像标记它: Docker build -t 127.0.0.1:32769/hello。 将映像推到minikube注册表: Docker push 127.0.0.1:32769/hello 检查是否有: curl http://localhost: 32769 / v2 / _catalog 使用内部端口构建一些部署: Kubectl创建部署hello——image=127.0.0.1:5000/hello

你的图像现在在minikube容器中,要看到它写:

eval $(minikube -p <PROFILE> docker-env)
docker images

注意:如果只使用一个名为“minikube”的配置文件,那么“-p”部分是多余的,但如果使用更多则不要忘记它;就我个人而言,我删除了标准的(minikube),以免出错。

选项2:不使用注册表

切换到minikube容器Docker: $(minikube -p <配置> docker-env) 塑造你的形象: Docker build -t hello。 创建一些部署: Kubectl创建部署hello——image=hello

最后,将部署ImagePullPolicy从Always更改为IfNotPresent:

Kubectl编辑部署你好

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

安装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,你必须再次构建镜像,否则它会失败。

如果有人在设置minikube env后希望回到本地环境,请使用以下命令。

eval $(docker-machine env -u)

加上@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,努力确保安全。