Comment modifier une image docker créée à partir d'une image existante
Basé sur un howto, j'ai créé une nouvelle image basée sur un existant.
maintenant je n'ai pas de fichier Dockerfile et il se passe des choses, quand le conteneur commence
Je ne peux pas changer, c'est à quoi il ressemble pour moi.
y a-t-il un moyen de modifier les choses qui ont été configurées dans le fichier Dockerfile de l'image de base que j'ai utilisée ?
par exemple: le conteneur exécute un script bash quand il démarre, je veux le changer.
3 réponses
pour répondre À vos q: "le conteneur exécute un script bash quand il démarre, je veux le changer". Supposons que vous souhaitez exécuter /script.sh
(partie de l'image) au lieu de la valeur par défaut, vous pouvez instancier un conteneur en utilisant:
docker run --entrypoint /script.sh repo/image
Si script.sh
ne fait pas partie de l'image et/ou vous préférez ne pas avoir à la spécifier explicitement à chaque fois avec --entrypoint
comme ci-dessus, vous pouvez préparer une image qui contient et exécute votre propre script.sh
:
- créer un répertoire vide et copier ou créer
script.sh
Créer
Dockerfile
avec le contenu suivant:FROM repo/image ADD script.sh / ENTRYPOINT /script.sh
docker build -t="myimage" .
docker run myimage
Notes:
- Lors de l'exécution du conteneur (étape 4), il n'est plus nécessaire de spécifier
--entrypoint
puisque nous l'avons fait défaut dans leDockerfile
. - C'est très simple, pas besoin de inscrivez - vous au Docker hub ou à toute autre chose du genre (bien que cela soit bien sûr recommandé à temps ;-)
si le lancement du conteneur avec la commande du tutoriel échoue, votre image de base a très probablement introduit un point D'entrée. Toutes les commandes que vous spécifiez pour docker run
sera ajouté en option à la commande ENTRYPOINT. Ainsi, compte tenu d'un point D'entrée de par exemple /usr/bin/somescript
,
docker run -d --name newguest -p 8080:80 mymod/httpd:v1 /usr/sbin/httpd -D FOREGROUND
va faire exécuter
/usr/bin/somescript /usr/sbin/httpd -D FOREGROUND
au lieu de
/usr/sbin/httpd -D FOREGROUND
pour vous débarrasser du point D'entrée, utilisez le --entrypoint
option:
docker run --entrypoint "" -d --name newguest -p 8080:80 mymod/httpd:v1 /usr/sbin/httpd -D FOREGROUND
il suffit de créer un nouveau fichier Dockerfile dans un répertoire vide. Démarrer le fichier Dockerfile avec
FROM repo/image
où "repo/image" est l'id de l'image que vous utilisez actuellement.
et ajouter vos personnalisations ci-dessous.
de cette façon vous construisez une nouvelle image qui est basée sur une autre image.
en particulier, pour changer la commande qui s'exécute au démarrage, mettez une ligne CMD et/ou ENTRYPOINT.