¿Cómo puedo usar imágenes locales de Docker con Minikube?

Resuelto Kapil Gupta asked hace 7 años • 33 respuestas

Tengo varias imágenes de Docker que quiero usar con Minikube . No quiero tener que cargar primero y luego descargar la misma imagen en lugar de usar la imagen local directamente. ¿Cómo hago esto?

Cosas que probé:


1. Intenté ejecutar estos comandos (por separado, eliminando las instancias de Minikube ambas veces y comenzando de nuevo)

kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 imagePullPolicy=Never

Producción:

NAME                    READY     STATUS              RESTARTS   AGE
hdfs-2425930030-q0sdl   0/1       ContainerCreating   0          10m

Simplemente se queda atascado en algún estado pero nunca llega al estado listo.


2. Intenté crear un registro y luego poner imágenes en él, pero tampoco funcionó. Es posible que lo haya hecho incorrectamente, pero no encuentro las instrucciones adecuadas para realizar esta tarea.

Proporcione instrucciones para utilizar imágenes de Docker locales en una instancia de Kubernetes local.

SO: Ubuntu 16.04 (Xenial Xerus)
Docker: Docker versión 1.13.1, compilación 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"}

¿Cuál es una solución que utiliza Docker-compose para hacer esto?

Imágenes cargadas en eval $(minikube docker-env):

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"}

¿Cuál es una solución que utiliza Docker-compose para hacer esto?

Imágenes cargadas en 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
Kapil Gupta avatar Mar 03 '17 02:03 Kapil Gupta
Aceptado

Como describe el manual , puede reutilizar el demonio Docker de Minikube con eval $(minikube docker-env).

Entonces, para usar una imagen sin cargarla, puedes seguir estos pasos:

  1. Establezca las variables de entorno coneval $(minikube docker-env)
  2. Construya la imagen con el demonio Docker de Minikube (por ejemplo, docker build -t my-image .)
  3. Establezca la imagen en la especificación del pod como la etiqueta de compilación (por ejemplo, my-image)
  4. Establezca el imagePullPolicyvalor en Never; de lo contrario, Kubernetes intentará descargar la imagen.

Nota importante: debe ejecutarlo 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.

svenwltr avatar Mar 02 '2017 19:03 svenwltr

Lo que funcionó para mí, según 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
tonyslowdown avatar Feb 27 '2018 01:02 tonyslowdown

Existe una forma fácil y eficaz de enviar su imagen de Docker local directamente a Minikube, lo que le ahorrará tiempo al volver a crear las imágenes en Minikube.

minikube image load <image name>

( minikube cache add <image name>—la antigua forma obsoleta, como referencia)

Más detalles están aquí .

Todos los métodos posibles para enviar imágenes a Minikube se mencionan aquí: Enviar imágenes

Krushna avatar Jun 10 '2020 12:06 Krushna

Notas:

  • ¡Esta respuesta no se limita a Minikube!

  • Si desea crear el registro en Docker de Minikube, ejecútelo eval $(minikube docker-env)primero (para que esté dockerdisponible en la terminal de la máquina host).
    De lo contrario, ingrese a la máquina virtual a través de minikube sshy luego continúe con los siguientes pasos

  • Dependiendo de su sistema operativo, Minikube montará automáticamente su ruta de inicio en la VM.

  • como dijo Eli, deberá agregar el registro local como inseguro para poder usar http (puede que no se aplique cuando se usa localhost, pero sí se aplica si se usa el nombre de host local). No utilice http en producción. Haga el esfuerzo de asegurar las cosas.


Utilice un registro local:

docker run -d -p 5000:5000 --restart=always --name local-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ías poder retirarlo:

docker pull localhost:5000/ubuntu

Ahora cambie su archivo YAML para usar el registro local.

Piense en montar volúmenes en la ubicación adecuada para conservar las imágenes en el registro.

Farhad Farahi avatar Mar 02 '2017 19:03 Farhad Farahi