====== Activité : créer une image Docker ======
Pour cette découverte de Docker, vous pouvez réaliser au préalable :
* avoir **installé** Docker.
* utiliser l'environnement de découverte appelé **Play with Docker (PWD)** : https://labs.play-with-docker.com/
===== Créer une image personnalisée =====
L’image qui a servi à la création d’un conteneur n’est jamais modifiée par ce qui est fait à l’intérieur d’un conteneur. Pour que les modifications puissent faire partie d’une image, il faut créer une nouvelle, dans laquelle une nouvelle couche logicielle sera ajoutée et cette couche supplémentaire contiendra les modifications par rapport à l’image de base.
Pour créer une nouvelle image basée sur l’image ubuntu de base mais intégrant les modifications souhaitées comme le fichier docker.txt ou l’installation de paquets logiciels voici comment procéder.
Tout d’abord créez un conteneur et personnalisez-le :
btssio@ubuntudocker:~$ docker run -i -t ubuntu
root@407248dafa24:/# cd /root
root@407248dafa24:~# touch docker.txt
root@407248dafa24:~# ls
docker.txt
root@407248dafa24:~# apt-get update
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
…
root@407248dafa24:~# apt install net-tools
Reading package lists... Done
…
root@407248dafa24:~# ifconfig
eth0: flags=4163 mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 2109 bytes 16445383 (16.4 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1570 bytes 110630 (110.6 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@407248dafa24:~# exit
btssio@ubuntudocker:~$
En visualisant les conteneurs existants, vous retrouvez celui que vous venez de créer (ID 407248dafa24) avec le nom généré par Docker (festive_sammet)
btssio@ubuntudocker:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
407248dafa24 ubuntu "/bin/bash" 2 m.. Up 2 minutes festive_sammet
Puis créez votre nouvelle image en utilisant son ID ou son nom et en lui associant un nouveau nom d’image préfixé par une information qui vous identifie :
btssio@ubuntudocker:~$ docker commit festive_sammet techer/ubuntu_nettools
sha256:2cd084ad8053b2c7d5747a7b0975006681981ea9f8e8dfea6f20c77bb361ff25
btssio@ubuntudocker:~ $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
techer/ubuntu_nettools latest 2cd084ad8053 7 seconds ago 128MB
ubuntu latest d131e0fa2585 11 days ago 102MB
…
Une **nouvelle image** existe avec comme nom techer/ubuntu_nettools et d’une **taille supérieure** à celle de ubuntu compte tenu du paquet logiciel net Tools installé.
La création d’un nouveau conteneur à partir de cette nouvelle image montre qu’elle a été personnalisée :
btssio@ubuntudocker:~ $ docker run -it techer/ubuntu_nettools
root@88085b7f2c50:/# ls /root
docker.txt
root@88085b7f2c50:/#
===== Sauvegarder une image en local =====
Il peut être utile de sauvegarder une image localement à des fins d’exploitation sur un autre PC (en attendant de publier notre image sur le Hub officiel ou un autre Hub) :
docker save >
Par exemple :
btssio@ubuntudocker:~ $ docker save techer/ubuntu_nettols:nettools > ubuntu_nettools.tar
===== Restaurer depuis un conteneur en local =====
docker load -i
Par exemple :
btssio@ubuntudocker:~ $docker load -i ubuntu_nettools.tar
===== Publier son image sur Docker Hub =====
Voici les étapes à suivre pour publier votre nouvelle image sur Docker Hub :
* créez sur Docker Hub un nouveau dépôt (repository) public sur Docker Hub en lui donnant votre nom d'image
ubuntu_nettools ;
* **publiez** votre image après vous être **authentifié** en lui associant un tag (ici latest):
$ docker login
$ docker push techer/ubuntu_nettools:latest
===== Mémento Docker =====
**Mémento Docker** : https://www.digitalocean.com/community/tutorials/how-to-remove-docker-images-containers-and-volumes-fr
====== Retour Accueil Docker ======
* [[reseau:docker:accueil|Docker]]