Si vous utilisez Docker, il y a de fortes de chances que les images de bases présentes sur le Hub Docker vous convienne (debian, ubuntu, centos, etc.).
Mais il se peut également que vous ne trouviez pas l'image avec l'OS dont vous avez besoin (Mandrake, . Ou alors que les normes de sécurité de votre activité vous impose de construire vous même vos images afin d'être sûr du contenu.
Je vais vous montrer comment créer sa propre image Docker à partir de rien (sans FROM
)
La commande "docker import
"
Les concepteurs de Docker ont prévu ce besoin et le client possède la commande "docker import
" :
Elle accepte un tarball et place son contenu dans une image vierge.Usage: docker import URL|- [REPOSITORY[:TAG]]
Create an empty filesystem image and import the contents of the tarball (.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz) into it, then optionally tag it.
Comme je veux créer une image d'un OS basique, il me faut juste le contenu de cet OS (sous la forme d'un tarball). Le contenu tel que celui que je pourrais avoir suite à l'installation classique via un CD/DVD.
Obtenir le tarball de l'OS et construire l'image de base
Il existe plusieurs façons d'obtenir un tarball d'OS et ça dépends de l'OS désiré.
Pour Debian
Il est possible d'utiliser debootstrap
pour récupérer le système Debian de base depuis les serveur de Debian et le placer dans un dossier (ici "jessie-fs")
debootstrap jessie ./jessie-fsAttention, la commande "
debootstrap
" refusera de fonctionner sur une partition mountée avec "noexec" ou "nodev"
Une fois les fichiers téléchargés, on utilise tar
pour filer tout ça à docker import
(c'est la forme qu'il attend).
tar -C ./jessie-fs -c . | docker import - cduv/debian:jessieNotez que j'en ai profité pour tagger "jessie" cette image Debian perso.
Depuis une ISO
Cette méthode devrait fonctionner pour plusieurs distributions car elle utilise bêtement l'ISO d'installation que vous utiliseriez pour installer l'OS sur une machine physique.
mkdir ./point_montage_iso mount -o loop ./distribution_linux.iso ./point_montage_iso tar -C ./point_montage_iso -c . | docker import - cduv/distribution_linux
Avec FROM
et des ADD
Une autre possibilité est d'utiliser une image totalement vierge que Docker propose sous le nom scratch mais qu'on peut également faire soit même (toujours pour des questions de sécurité par exemple) :
tar cv --files-from /dev/null | docker import - cduv/scratch
Il suffit ensuite de l'utiliser comme n'importe quelle image de base via un fichier Dockerfile
comme suit :
FROM cduv/scratch # On ajoute des dossiers leur fichiers (qu'on aura préparés/compilés nous même) ADD ./fs/bin /bin ADD ./fs/boot /boot # ... CMD ["/bin/sh"]
Et de créer une image personnalisée avec docker build
:
docker build -t="cduv/handmade:1.0" ./Dockerfile
Sources :
4 septembre 2016 08:23
Bonjour
Je suis sous Windows7, et je compte creer ma propre image Docker comprenant
Oracle11 XE, JBOSS, JASPER,SONAR, LUTECE, POSTGRESQL.
Quel est la meilleure méthode selon vous ?
Merci
4 septembre 2016 14:19
Je n'ai jamais testé Docker sous Windows mais d'une manière générale il faut éviter de mettre plusieurs applications dans la même image.
La philosophie Docker demande de en créer autant d'image qu'il y a d'application. Docker Compose (https://docs.docker.com/compose/) permet d'organiser plusieurs images pour travailler de concert.