title | theme | author | company | contributors | sources | |
---|---|---|---|---|---|---|
Docker - Images et conteneurs |
solarized |
Alexandre Devos |
Octocorn |
|
- Une image est un modèle de conteneur.
- Une image est immuable.
- Une image est constituée de couches.
- Elles sont créées à partir d'un Dockerfile.
- Contient le noyau et les fichiers de démarrage.
- Ne peut être modifié.
- Contient le système d'exploitation Debian.
- Ne peut être modifié.
- Contient l'installation d'Emacs.
- Dans cet exemple, il s'agit d'un Dockerfile avec une seule instruction
RUN apt-get install -y emacs
. - Peut être modifié.
- Contient l'installation d'Apache.
- Dans cet exemple, il s'agit d'un Dockerfile avec une seule instruction
RUN apt-get install -y apache2
. - Il a pour origine le layer
add emacs
.
- Couche qui représente le conteneur.
- Il a pour origine le layer
add Apache
. - Il est éphémère.
- Il peut être modifié.
Que se passe-t-il si je modifie un fichier dans le layer
Debian
?
Ou si j'installe un nouveau package linux ?
- Le fichier est ajouté dans le layer
Container
.
Que se passe-t-il si j'ai besoin de modifier un fichier dans le layer
add emacs
?
- Le fichier est 'copié' dans le layer
Container
. - La modification est faite dans la copie.
- Le fichier n'est pas copié si on ne fait que le lire.
Plus le fichier est sur une couche haute, plus il est prioritaire.
- Un Dockerfile est un fichier de configuration d'une image.
- Il contient une liste d'instructions.
- C'est comme un script de création d'image.
- Un dockerfile créera les couches de l'image.
- Chaque instruction crée une couche*.
- La limite est de 127 couches.
* Chaque instruction qui nécessite une écriture dans le système de fichier linux.
FROM debian:latest # Image de base
RUN apt-get update && apt-upgrade -y # Met à jour linux
RUN apt-get install emacs # Installe emacs
CMD ["emacs"] # Exécute la commande `emacs` au démarrage du conteneur
Combien de couches ?
Note: 2 couches !
Nous aborderons plus en détail les Dockerfile dans le chapitre associé. Avant ça : les commandes de base !
Docker dispose de sa propre syntaxe :
docker [contexte] <verb> <cible> [--option(s)]
contexte
: optionnel, permet de spécifier le scope de la commande (conteneur, image, réseau...)verb
: verbe de la commande (run, pull, create...)cible
: cible de la commande (nom de l'image, du conteneur...)option(s)
: option(s) de la commande (nom, réseau, volumes, ports...)
docker container run [OPTIONS] <nomImage>[:<version>] [COMMANDS] [ARG...]
- Crée et démarre un conteneur à partir d'une image.
- options : nom, réseau, volumes, ports... (
-d
,-p
,-v
,--name
...) - < nomImage>[:< version > ] : nom de l'image à utiliser, et optionnellement sa version.
- commands arg : commande à exécuter dans le conteneur (facultatif).
-d
: détache la console du conteneur-p <port>:<port>
: Définit le port utilisé-v <volume>
: Définit le volume utilisé--name <nom>
: Définit le nom du conteneur-it
: Permet d'interagir avec le conteneur
Note: Par défaut, la dernière version de l'image sera téléchargée
Création d'un conteneur nginx
Note: docker run -dit -p 80:80 nginx // Puis go localhost:80
docker container rename <CONTAINER> <NEW_NAME>
- Si aucun argument '--name' n'est spécifié, Docker crée un nom aléatoire.
- On doit régulièrement renommer les conteneurs si on souhaite les utiliser pour réaliser des images
Renommer le conteneur nginx
Note: docker container rename nom_actuel NGINX_Demo
docker ps -a
: Liste les conteneurs (actifs ou non)docker kill <CONTAINER>
: Arrête un conteneur (forcé)docker rm <CONTAINER> [-f]
: Supprime un conteneurdocker container prune
: Supprime tous les conteneurs en 'dangling'
Il existe beaucoup de commandes, voir la doc