Dockerfile
Une image Docker est crée a partir d’un fichier Dockerfile représentant la structure du conteneur. On peut y trouver plusieurs éléments comme des librairies logicielles, une application, de la configuration, l’utilisation de volumes etc. Une fois cette image construire il sera possible de lancer plusieurs container basés sur la même image.
Construire une image
docker build -t <docker_repository>/<image_name> .
Le .
défini que le dockerfile est disposé dans le dossier courant.
Lister les images docker disponible sur la machine
docker images
Ignorer des fichiers dans une image docker avec dockerignore
Fichier .dockerignore example:
node_modules
npm-debug.log
Dockerfile
.dockerignore
Conteneur Docker
Un conteneur est comme nous venons de le dire basé sur une image Docker, un conteneur comprend un système d’exploitation, du code applicatif, de la configuration middleware, et etc. Il peut être facilement déplacés et facilite grandement la gestion des infrastructures (surtout en développement).
Demarrer un container
Note : Avant de démarrer un container il est necessaire de le construire (voir commande docker build)
docker run --name <container_name> -p <local_port>:<container_port> -d <docker_repository>/<image_name>
--name
spécifie le nom du container-p <local_port>:<container_port>
permet de spécifier la correspondance des ports-d
permet de démarrer le container en monde daemon (en tache de fond)
Supprimer un container et son image
docker rm -v container_name
Mode intéractif
Permet de d’exécuter un commande dans le container et d’intéragir avec. Souvent on utilise la commande pour ouvrir un shell.
docker exec -it <name_container> bash`
Supprimer tous les containers inactifs
docker container prune
Docker Network
Un Docker network est un réseau crée entre plusieurs conteneur. Il permet d’assurer la communiquer entre plusieurs conteneurs. Créer un Docker Network permet de limiter les risques en isolant par le reseau les conteneurs et évite les conflits entre des conteneurs qui n’auraient pas a communiquer.
Créer un réseau
docker network create <name>
Connecter un conteneur a un réseau
docker network connect <network_name> <container_name>
When you create a new container, you can specify one or more –network flags. This example connects a Nginx container to the my-net network. It also publishes port 80 in the container to port 8080 on the Docker host, so external clients can access that port. Any other container connected to the my-net network has access to all ports on the my-nginx container, and vice versa.
Network inspect
docker network inspect
Networking container
Connected to bridge manualy
root@1f87bccac67c:/> cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
...
172.17.0.2 1f87bccac67c <--
172.18.0.2 1f87bccac67c <--
Pour aller plus loins : Basic networking
Docker Volumes
Un Docker Volume est un système de fichier, monté au démarrage d’un conteneur. Un conteneur par design ne stocke aucunes données il ne dispose qu’uniquement des données en lecture seules. Quand un conteneur modifie une donnée la donnée traverse les couches(layers) du conteneur puis cette donnée est modifiée dans le système de fichier monté au démarrage. C’est un volume.
Creer un volume :
docker volume create <name>`
Lister les volumes :
`docker volume ls `
Supprimer les volumes non utilisés :
docker volume prune
Monter un volume dans un conteneur docker
docker run --name snginx -p 8080:80 --mount source=my-vol,target=/var/www/html s/nginx
how-to-build-a-node-js-application-with-docker-quickstart
Différence entre conteneur et VM
Un conteneur et une VM ont des aspects d’isolation similaires, mais leurs fonctionnement est différent la ou une VM virtualise les couches hardware un conteneur virtualise le système d’exploitation et sa configuration. Un conteneur docker va uniquement contenir le code et les dépendances d’une applications la ou une machine virtuelle va démarrer une nouvelle machine(virtuelle) complètement indépendante.