Solución:
Como describe README, puede reutilizar el demonio Docker de Minikube con eval $(minikube docker-env)
.
Entonces, para usar una imagen sin cargarla, puede seguir estos pasos:
- Establezca las variables de entorno con
eval $(minikube docker-env)
- Construya la imagen con el demonio Docker de Minikube (p. Ej.
docker build -t my-image .
) - Establezca la imagen en la especificación del pod como la etiqueta de compilación (p. Ej.
my-image
) - Selecciona el
imagePullPolicy
paraNever
, de lo contrario, Kubernetes intentará descargar la imagen.
Nota IMPORTANTE: Tienes que correr eval $(minikube docker-env)
en cada terminal que desee utilizar, ya que solo establece las variables de entorno para la sesión de shell actual.
Lo que funcionó para mí, basado en la solución de @svenwltr:
# Start minikube
minikube start
# Set docker env
eval $(minikube docker-env) # unix shells
minikube docker-env | Invoke-Expression # PowerShell
# 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
¡Esta respuesta no se limita a minikube!
Utilice un registro local:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
Ahora etiqueta tu imagen correctamente:
docker tag ubuntu localhost:5000/ubuntu
Tenga en cuenta que localhost debe cambiarse por el nombre dns de la máquina que ejecuta el contenedor de registro.
Ahora envíe su imagen al registro local:
docker push localhost:5000/ubuntu
Debería poder retirarlo:
docker pull localhost:5000/ubuntu
Ahora cambie su archivo yaml para usar el registro local.
Piense en montar el volumen en la ubicación adecuada para conservar las imágenes en el registro.
actualizar:
como dijo Eli, deberá agregar el registro local como inseguro para usar http (puede que no se aplique cuando se usa localhost, pero se aplica si se usa el nombre de host local)
No use http en producción, haga el esfuerzo de asegurar las cosas.