如何在 windows 10 上拉取本地构建的 docker 图像?
how to pull locally built docker image on windows 10?
我的 os 是 windows 10 pro,我用 spring 启动开发。首先,我使用以下 Dockerfile 构建 docker 图像。
FROM openjdk:11-jdk
ADD target/Spring-Blog-Jpa-0.0.1-SNAPSHOT.jar blog-app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Dfile.encoding=UTF8","-jar","blog-app.jar"]
使用 docker 命令成功构建了 docker 映像。
> docker image build -t blog-app:latest .
然后我从 docker 代表os 中提取 mysql:latest 图片。并且mysql拉取也成功
> docker image pull mysql:latest .
我尝试用 ose docker 图像生成 kubernetes pod。对于 mysql:latest 图像,mysql pod 生成时没有错误。但是在生成 blog-app pod 的时候,blog-app:latest image 拉不出来,报错。下面是配置yaml文件。
apiVersion: apps/v1
kind: Pod
metadata:
name: blog-system
spec:
containers:
- name: blog-app
image: blog-app:latest
args: ["-t", "-i"]
不知道为什么本地构建的镜像在生成pod时无法拉取。有没有push local docker repository的流程?本地构建的 docker 镜像如何拉取到 Kuberetes 上?
您可以重用 Minikube 中的 Docker 守护进程。这是 Powershell 上的命令。
PS C:\minikube> minikube docker-env
PS C:\minikube> minikube docker-环境 |调用表达式
docker image build -t blog-app:latest
像构建标签一样在 pod 规范中设置图像
将 imagePullPolicy 设置为 Never,否则 Kubernetes 将尝试下载镜像。
apiVersion: apps/v1
kind: Pod
metadata:
name: blog-system
spec:
containers:
- name: blog-app
image: blog-app:latest
imagePullPolicy: Never
args: ["-t", "-i"]
同时检查这个 guide
这是 Docker 的一个令人困惑的方面。本质上,Kubernetes 试图从容器注册表中拉取镜像,并且(通常)在将镜像推送到注册表之前,无法拉取它。
当您 docker [push|pull] ...
与(远程)容器注册表交互时。默认情况下(如果您未指定),您正在与 DockerHub 交互,并且可能假设图像(除非另有标记)以 DockerHub 的 https://docker.io
为前缀。如果你使用,例如Google Container Registry,您会更频繁地使用它的主机前缀,例如https://gcr.io
.
当您在主机上构建容器时,在您 docker push ...
映像之前,它不在注册表中。
当您在 Kubernetes 规范|配置中引用图像时,Kubernetes 期望从注册表中提取图像。在您的情况下,blob-app
不在注册表中,因此失败。
您可以 运行 本地注册表来解决这个问题。您可以这样做的一种方法是根据@arghya-sadhu 的回答使用 Minikube。但您也可以 运行 Docker Docker 自己实现其注册表规范的图像,请参阅 registry。
或者您可以将图像推送到 public 可以访问的注册表,例如DockerHub, Google Container Registry, Quay,然后像您对 mysql
所做的那样从注册表中引用图像。 DockerHub 有一个非常常用的免费层,并允许 public 和(数量有限的)私有存储库。
我的 os 是 windows 10 pro,我用 spring 启动开发。首先,我使用以下 Dockerfile 构建 docker 图像。
FROM openjdk:11-jdk
ADD target/Spring-Blog-Jpa-0.0.1-SNAPSHOT.jar blog-app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Dfile.encoding=UTF8","-jar","blog-app.jar"]
使用 docker 命令成功构建了 docker 映像。
> docker image build -t blog-app:latest .
然后我从 docker 代表os 中提取 mysql:latest 图片。并且mysql拉取也成功
> docker image pull mysql:latest .
我尝试用 ose docker 图像生成 kubernetes pod。对于 mysql:latest 图像,mysql pod 生成时没有错误。但是在生成 blog-app pod 的时候,blog-app:latest image 拉不出来,报错。下面是配置yaml文件。
apiVersion: apps/v1
kind: Pod
metadata:
name: blog-system
spec:
containers:
- name: blog-app
image: blog-app:latest
args: ["-t", "-i"]
不知道为什么本地构建的镜像在生成pod时无法拉取。有没有push local docker repository的流程?本地构建的 docker 镜像如何拉取到 Kuberetes 上?
您可以重用 Minikube 中的 Docker 守护进程。这是 Powershell 上的命令。
PS C:\minikube> minikube docker-env
PS C:\minikube> minikube docker-环境 |调用表达式
docker image build -t blog-app:latest
像构建标签一样在 pod 规范中设置图像
将 imagePullPolicy 设置为 Never,否则 Kubernetes 将尝试下载镜像。
apiVersion: apps/v1
kind: Pod
metadata:
name: blog-system
spec:
containers:
- name: blog-app
image: blog-app:latest
imagePullPolicy: Never
args: ["-t", "-i"]
同时检查这个 guide
这是 Docker 的一个令人困惑的方面。本质上,Kubernetes 试图从容器注册表中拉取镜像,并且(通常)在将镜像推送到注册表之前,无法拉取它。
当您 docker [push|pull] ...
与(远程)容器注册表交互时。默认情况下(如果您未指定),您正在与 DockerHub 交互,并且可能假设图像(除非另有标记)以 DockerHub 的 https://docker.io
为前缀。如果你使用,例如Google Container Registry,您会更频繁地使用它的主机前缀,例如https://gcr.io
.
当您在主机上构建容器时,在您 docker push ...
映像之前,它不在注册表中。
当您在 Kubernetes 规范|配置中引用图像时,Kubernetes 期望从注册表中提取图像。在您的情况下,blob-app
不在注册表中,因此失败。
您可以 运行 本地注册表来解决这个问题。您可以这样做的一种方法是根据@arghya-sadhu 的回答使用 Minikube。但您也可以 运行 Docker Docker 自己实现其注册表规范的图像,请参阅 registry。
或者您可以将图像推送到 public 可以访问的注册表,例如DockerHub, Google Container Registry, Quay,然后像您对 mysql
所做的那样从注册表中引用图像。 DockerHub 有一个非常常用的免费层,并允许 public 和(数量有限的)私有存储库。