Remarques :
-
Cette réponse n'est pas limitée à minikube !
-
Si vous souhaitez créer le registre sur le Docker de minikube puis exécutez
eval $(minikube docker-env)
d'abord (pour fairedocker
disponible sur le terminal de la machine hôte).
Sinon entrer dans la machine virtuelle viaminikube ssh
, puis passez aux étapes suivantes -
en fonction de votre système d'exploitation, minikube montera automatiquement votre homepath sur la VM.
-
comme Eli l'a indiqué, vous devrez ajouter le registre local comme non sécurisé afin d'utiliser http (peut ne pas s'appliquer lors de l'utilisation de localhost mais s'applique si vous utilisez le nom d'hôte local)
N'utilisez pas http en production, faites l'effort de sécuriser les choses.
Utilisez un registre local :
docker run -d -p 5000:5000 --restart=always --name local-registry registry:2
Maintenant taguez votre image correctement :
docker tag ubuntu localhost:5000/ubuntu
Notez que localhost doit être remplacé par le nom DNS de la machine exécutant le conteneur de registre.
Poussez maintenant votre image vers le registre local :
docker push localhost:5000/ubuntu
Vous devriez pouvoir le retirer :
docker pull localhost:5000/ubuntu
Modifiez maintenant votre fichier yaml pour utiliser le registre local.
Pensez à monter des volumes à l'emplacement approprié, pour conserver les images dans le registre.
Comme le manuel le décrit, vous pouvez réutiliser le démon Docker de Minikube avec eval $(minikube docker-env)
.
Donc, pour utiliser une image sans la télécharger, vous pouvez suivre ces étapes :
- Définissez les variables d'environnement avec
eval $(minikube docker-env)
- Construisez l'image avec le démon Docker de Minikube (par exemple
docker build -t my-image .
) - Définissez l'image dans la spécification du pod comme la balise de construction (par exemple,
my-image
) - Définir le
imagePullPolicy
àNever
, sinon Kubernetes essaiera de télécharger l'image.
Remarque importante : Vous devez exécuter eval $(minikube docker-env)
sur chaque terminal que vous souhaitez utiliser, car il ne définit que les variables d'environnement pour la session shell en cours.
Ce qui a fonctionné pour moi, basé sur la solution 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