Comment créer ma propre image de base pour Docker?

97

Selon la documentation Docker , pour créer votre propre image, vous devez toujours spécifier une image de base à l'aide de l' FROMinstruction.

De toute évidence, il y a beaucoup d'images parmi lesquelles choisir dans l'index Docker , mais que faire si je voulais créer la mienne? Est-ce possible?

L'image baseest construite sur Ubuntu si je comprends bien, et je veux expérimenter une image Debian. De plus, je veux vraiment comprendre comment fonctionne Docker, et l' baseimage est toujours une boîte noire pour moi.


Edit: documentation officielle sur la création d'une image de base

Flimm
la source
Ça n'a pas d'importance. :-) Les questions ici doivent encore être sur le sujet selon les directives du site. Ils sont traités dans le centre d'aide et les pages de visite . (Le lien semble également concerner les développeurs de conteneurs Docker.) Si vous posez des questions sur votre propre image de conteneur, il existe un outil pour cela sur leur site
Ken White
@KenWhite: méta question pertinente: meta.stackexchange.com/questions/179249/…
Flimm
:-) Méta-réponse pertinente à ce stade, qui est la réponse juste au-dessus de la vôtre. (Voir en particulier le deuxième commentaire à la réponse que j'ai liée, à propos de la clarté de ce que votre question demande.)
Ken White
9
@Ken White: la question est de savoir comment «créer» une image de base, pas comment déployer une «image». Flimm essaie de programmer quelque chose qui peut être déployé par la suite, par lui ou par d'autres. Amazon EC2 est lié au déploiement, mais je pense qu'ils ont encore quelques programmeurs programmant des programmes :). La création d'images de base est un exemple de programme, je dirais.
qkrijger
@qkrijger: Ceci est discuté dans la méta question liée. Puisque cette discussion est ouverte, veuillez poster toute discussion sur l'actualité là-bas (là où le consensus semble être ce n'est pas un sujet de "programmation").
Ken White

Réponses:

38

Vous pouvez voir comment les images de base sont créées et partir de là.

Vous pouvez les trouver ici: https://github.com/dotcloud/docker/tree/master/contrib . Il y a mkimage-busybox.sh, mkimage-unittest.sh, mkimage-debian.sh

craquer
la source
1
Les scripts mkimage- * ont été déplacés et renommés (comme le repo officiel) ici
tsalaroth
32

Citant Solomon Hykes :

Vous pouvez facilement créer un nouveau conteneur à partir de n'importe quelle archive tar avec "importation docker". Par exemple:

debootstrap raring ./rootfs
tar -C ./rootfs -c . | docker import - flimm/mybase
Flimm
la source
Peut-être publier la modification / mise à jour dans un commentaire à la place pour que d'autres puissent le voir et peut-être que quelqu'un puisse soumettre à nouveau la modification.
Bdoserror
1
@Flimm Pourquoi aurais-je besoin d'utiliser sudo dans ce cas? Exécutez ces commandes dans votre répertoire utilisateur et vous ne devriez avoir aucune raison d'élévation de privilèges. Vous créez une image, vous ne l'installez pas.
rancidfishbreath
Vous n'avez même pas besoin de root pour une utilisation normale de Docker; ajoutez-vous simplement au dockergroupe.
tekknolagi
1
Mais le trait d'union dans la commande d'importation, recommandé par Flimm est nécessaire: docker import - flimm/mybaseau lieu dedocker import flimm/mybase
Daniel Alder
La propriété des fichiers dans le tar sera affectée par le fait que vous exécutiez en tant que root ou non. Sinon en tant que root, alors debootstrapet tardevrait au moins être exécuté sous fakeroot.
clacke
21

(crédit à Fatherlinux) Obtenez des informations sur http://developerblog.redhat.com/2014/05/15/practical-introduction-to-docker-containers/ , qui explique mieux

  1. Créez les fichiers tar pour votre système de fichiers, pourrait simplement être

    tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos6-base.tar /
    
  2. Transférer le fichier tar dans un autre système de docker en cas d' installation sur place et importil

    cat centos6-base.tar | docker import - centos6-base
    
  3. Vous pouvez maintenant vérifier en l'exécutant.

    docker run -i -t centos6-base cat /etc/redhat-release
    

Les scripts de dotcloud combinent les deux premières étapes, ce qui me rend confus et semble compliqué au début.

La directive officielle de docker à l' aide debootstrapessaie également de rendre le système de fichiers propre.

Vous pouvez juger par vous-même comment faire l'étape 1.

Larry Cai
la source
14

Pour commencer à créer votre propre image à partir de zéro, vous pouvez utiliser l' scratchimage.

En utilisant le scratch «image» signale au processus de construction que vous voulez que la commande suivante dans le Dockerfile soit la première couche du système de fichiers de votre image.

FROM scratch
ADD hello /
CMD ["/hello"]

http://docs.docker.com/engine/articles/baseimages/#creating-a-simple-base-image-using-scratch

Mike
la source
1
Ce plus importd'un fichier tar, sont les deux réponses canoniques, et ce lien est la ressource canonique.
clacke
7

Si vous souhaitez créer votre propre image de base, je voudrais d'abord jeter un coup d'œil aux images officielles , en particulier à l' stackbrewintérieur de ce repo.

Sinon, il existe de bonnes références pour des images de système d'exploitation minimales dans le référentiel docker lui-même.

Par exemple, voici un script pour créer une image d'arche minimale et il y en a plus ici .

Jessie Frazelle
la source