Kap*_*pta 227 linux docker kubernetes docker-compose
我有几个我想要使用的docker图像minikube.我不想首先上传然后下载相同的图像,而不是直接使用本地图像.我该怎么做呢?
我试过的东西:
1.我尝试运行这些命令(单独,两次删除minikube的实例并重新开始)
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 imagePullPolicy=Never
Run Code Online (Sandbox Code Playgroud)
输出:
NAME READY STATUS RESTARTS AGE
hdfs-2425930030-q0sdl 0/1 ContainerCreating 0 10m
Run Code Online (Sandbox Code Playgroud)
它只是陷入某种状态但从未达到就绪状态.
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"}
Run Code Online (Sandbox Code Playgroud)
如果有人可以帮助我找到一个使用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
Run Code Online (Sandbox Code Playgroud)
sve*_*ltr 310
正如README描述的那样,您可以重用Minikube中的Docker守护进程eval $(minikube docker-env).
因此,要使用图像而不上传图像,您可以按照以下步骤操作:
eval $(minikube docker-env)docker build -t my-image .)my-image)imagePullPolicy为Never,否则Kubernetes将尝试下载图像.重要说明:您必须eval $(minikube docker-env)在要使用的每个终端上运行,因为它只为当前shell会话设置环境变量.
jji*_*ing 147
根据@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
Run Code Online (Sandbox Code Playgroud)
Far*_*ahi 101
这个答案不仅限于minikube!
使用本地注册表:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
Run Code Online (Sandbox Code Playgroud)
现在正确标记您的图像:
docker tag ubuntu localhost:5000/ubuntu
Run Code Online (Sandbox Code Playgroud)
请注意,localhost应更改为运行注册表容器的计算机的DNS名称.
现在将您的图像推送到本地注册表:
docker push localhost:5000/ubuntu
Run Code Online (Sandbox Code Playgroud)
你应该能够把它拉回来:
docker pull localhost:5000/ubuntu
Run Code Online (Sandbox Code Playgroud)
现在更改您的yaml文件以使用本地注册表.
考虑在适当的位置安装卷以将图像保留在注册表中.
Nit*_*hin 21
这是设置本地注册表的步骤。
在本地机器上设置
在本地机器中设置主机名:编辑/etc/hosts以添加这一行
docker.local 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
现在启动本地注册表(删除 -d 以运行非守护进程模式):
docker run -d -p 5000:5000 --restart=always --name registry registry:2
Run Code Online (Sandbox Code Playgroud)
现在正确标记您的图像:
docker tag ubuntu docker.local:5000/ubuntu
Run Code Online (Sandbox Code Playgroud)
现在将您的图像推送到本地注册表:
docker push docker.local:5000/ubuntu
Run Code Online (Sandbox Code Playgroud)
验证图像是否被推送:
curl -X GET http://docker.local:5000/v2/ubuntu/tags/list
Run Code Online (Sandbox Code Playgroud)
在 minikube 中设置
ssh 进入 minikube: minukube ssh
编辑/etc/hosts以添加此行
docker.local <your host machine's ip>
Run Code Online (Sandbox Code Playgroud)
验证访问:
curl -X GET http://docker.local:5000/v2/ubuntu/tags/list
Run Code Online (Sandbox Code Playgroud)
现在,如果您尝试拉取,您可能会收到 http 访问错误。
启用不安全访问:
如果您一直计划在此本地设置中使用 minkube,那么默认情况下创建一个 minikube 以使用不安全的注册表(不适用于现有集群)。
minikube start --insecure-registry="docker.local:5000"
Run Code Online (Sandbox Code Playgroud)
否则请按照以下步骤操作:
systemctl stop docker
Run Code Online (Sandbox Code Playgroud)
编辑 docker 服务文件:从 systemctl status docker
有可能 :
/etc/systemd/system/docker.service.d/10-machine.conf 或 /usr/lib/systemd/system/docker.service
附加此文本(用您的 IP 替换 192.168.1.4)
--insecure-registry docker.local:5000 --insecure-registry 192.168.1.4:5000
到这一行
ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --tlsverify --tlscacert /etc/docker/ca.pem -- tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=virtualbox --insecure-registry 10.0.0.0/24
systemctl daemon-reload
systemctl start docker
Run Code Online (Sandbox Code Playgroud)
尝试拉:
docker pull docker.local:5000/ubuntu
Run Code Online (Sandbox Code Playgroud)
现在更改您的 yaml 文件以使用本地注册表。
Run Code Online (Sandbox Code Playgroud)containers: - name: ampl-django image: dockerhub/ubuntu
到
Run Code Online (Sandbox Code Playgroud)containers: - name: ampl-django image: docker.local:5000/nymbleup
不要在生产中使用 http,努力确保安全。
Kru*_*hna 16
There is one essay and effective way to push your local Docker image directly to minikube, which will save time from building the images in minikube again.
minikube cache add <Image name>
Run Code Online (Sandbox Code Playgroud)
More details here
All possible method to push images to minikube are mention here: https://minikube.sigs.k8s.io/docs/handbook/pushing/
小智 9
除了接受的答案,您还可以使用run以下命令实现您最初想要的(使用该命令创建部署):
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 --generator=run-pod/v1
Run Code Online (Sandbox Code Playgroud)
我在Kubernetes-dev论坛上找到了关于发电机的信息:
如果您正在使用
kubectl run,它会为您生成一个默认情况下imagePullPolicy设置为的清单Always.您可以使用此命令来查看imagePullPolicy的IfNotPresent,这将为工作minikube:
kubectl run --image=<container> --generator=run-pod/v1丹洛伦茨
https://groups.google.com/forum/#!topic/kubernetes-dev/YfvWuFr_XOM
如果有人想在设置 minikube env 后返回本地环境,请使用以下命令。
eval $(docker-machine env -u)
Run Code Online (Sandbox Code Playgroud)
一种方法是在本地构建映像,然后执行:
docker save imageNameGoesHere | pv | (eval $(minikube docker-env) && docker load)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
回答原始问题“How to use local docker images with Minikube?”的一个更简单的方法是将图像保存到 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
Run Code Online (Sandbox Code Playgroud)
然后运行图像涉及如下命令。确保包含“--image-pull-policy=Never”参数。
kubectl run my-image --image=the.full.path.to/the/docker/image:the-tag --image-pull-policy=Never --port=80
Run Code Online (Sandbox Code Playgroud)
一种想法是将 Docker 镜像保存在本地,然后将其加载到 Minikube 中,如下所示:
\n例如,假设\xe2\x80\x99s 已经有puckel/docker-airflow镜像。
\n将该图像保存到本地磁盘 -
\ndocker save puckel/docker-airflow > puckel_docker_airflow.tar
现在进入Minikube Docker环境 -
\neval $(minikube docker-env)
加载本地保存的图像 -
\ndocker load < puckel_docker_airflow.tar
就是这么简单,而且就像一种魅力。
\n对于 Windows 用户,我就是这样做的。
我使用Docker Desktop来托管 Minikube 映像,并使用 PowerShell 作为控制台。
首先我创建我的 Minikube 集群:
minikube start --bootstrapper=kubeadm --vm-driver=docker --profile "cluster1"
Run Code Online (Sandbox Code Playgroud)
例如,假设我有一个Dockerfile包含:
FROM nginx
Run Code Online (Sandbox Code Playgroud)
两步法:构建镜像并将镜像上传到 Minikube
docker build -t mynginximage .
minikube image load mynginximage
Run Code Online (Sandbox Code Playgroud)
或者采用一步法,直接在 Minikube 中构建:
minikube image build -t mynginximage .
Run Code Online (Sandbox Code Playgroud)
要在 Minikube 中运行我的图像:
kubectl run myweb --image=mynginximage --image-pull-policy=Never
Run Code Online (Sandbox Code Playgroud)
或者通过mynginxpod.yaml文件:
apiVersion: v1
kind: Pod
metadata:
name: myweb
spec:
containers:
- name: myweb
image: mynginximage
imagePullPolicy: Never
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
和kubectl apply -f .\mynginxpod.yaml
现在要测试它,请运行:
kubectl get pods myweb
NAME READY STATUS RESTARTS AGE
myweb 1/1 Running 0 25s
Run Code Online (Sandbox Code Playgroud)
要访问它:
kubectl exec --stdin --tty myweb -- /bin/bash
Run Code Online (Sandbox Code Playgroud)
暴露它:
kubectl port-forward nginx 3333:80
Run Code Online (Sandbox Code Playgroud)
来自 kubernetes 文档:
https://kubernetes.io/docs/concepts/containers/images/#updating-images
默认的拉取策略是 IfNotPresent,这会导致 Kubelet 跳过拉取已经存在的图像。如果您想始终强制拉动,您可以执行以下操作之一:
- 将容器的 imagePullPolicy 设置为 Always;
- 使用 :latest 作为要使用的图像的标签;
- 启用 AlwaysPullImages 准入控制器。
或者换一种方式阅读:使用 :latest 标签强制图像总是被拉取。如果你使用eval $(minikube docker-env)上面提到的,那么要么不使用任何标签,要么为你的本地镜像分配一个标签,你可以避免 Kubernetes 试图强行拉取它。
关于“minikube”要记住的一件事是,minikube 的主机与您的本地主机不同,因此,我意识到,为了使用本地映像对 minikube 进行测试,您必须首先在本地构建 docker 映像或将其拉到本地然后使用下面的命令将它添加到 minikube 上下文中,这就是另一个 linux 实例。
minikube cache add <image>:<tag>
Run Code Online (Sandbox Code Playgroud)
但是,不要忘记imagePullPolicy: Never在您的 kubernetes 部署 yaml 中设置 ,因为它将确保使用本地添加的图像,而不是尝试从注册表远程拉取它。
小智 5
使用:
minikube addons enable registry -p minikube
Run Code Online (Sandbox Code Playgroud)
输出:
Registry addon on with docker uses 32769 please use that instead
of default 5000 <br>
For more information see:
https://minikube.sigs.k8s.io/docs/drivers/docker
Run Code Online (Sandbox Code Playgroud)
和:
docker tag ubuntu $(minikube ip -p minikube):32769/ubuntu
docker push $(minikube ip -p minikube):32769/ubuntu
Run Code Online (Sandbox Code Playgroud)
或者
minikube addons enable registry
docker tag ubuntu $(minikube ip):32769/ubuntu
docker push $(minikube ip):32769/ubuntu
Run Code Online (Sandbox Code Playgroud)
以上对于开发目的来说已经足够了。我正在Arch Linux上执行此操作。
较新版本的 minikube 允许您通过运行从本地 docker 实例加载图像
minikube image rm image <imagename>:<version>
minikube image load <imagename>:<version> --daemon
Run Code Online (Sandbox Code Playgroud)
load 命令可能会显示错误,但图像仍会加载到您的 minikube 实例
| 归档时间: |
|
| 查看次数: |
113250 次 |
| 最近记录: |