🔧 Utilisation
Ici on va parler de comment utiliser Docker en ligne de commandes, on parlera plus tard de systèmes tel que docker-compose, Kubernetes, Pterodactyl, Portainer ou autre.
▶️ Lancer un conteneur
Pour lancer un conteneur on va utiliser la commande docker run
, voici un exemple :
sudo docker run --name mon-super-docker -e HELLO=world -v ./mon-volume:/home -p 8080:80 -it docker.io/library/debian
Ici dans cet exemple, on a plusieurs options à notre commande :
-
--name
va nomer le conteneur -
-e HELLO=world
va définir la variable d'environement "HELLO" pour valoir "world" -
-v ./mon-volume:/home
va dire que le contenu du dossier local "mon-volume" remplacer le dossier du conteneur "/home" (les dossiers/fichiers hôtes dans un volume passe toujours avant) -
-p 8080:80
va lier le port8080
de la machine hôte au port80
du conteneur. -
-it
va allouer untty
à la machine et l'afficher de manière interactive. On peut donc lancer des commandes dans le conteneur. -
docker.io/library/debian
défini que l'on va lançer l'image officielle de debian depuis les serveurs de Docker Hub
🗒️ Lister les conteneur et les images (ps, images)
Voici quelques commandes pour afficher des informations sur les conteneurs :
# Va afficher la liste des conteneurs en cours
sudo docker ps
# Va afficher la liste de tous les conteneurs
sudo docker ps -a
# Va afficher la liste des images docker
sudo docker images
📀 Gérer des images et des conteneurs (start, stop, rm)
# Arreter un conteneur
sudo docker stop CONTAINER_ID
# Relancer un conteneur
sudo docker start CONTAINER_ID
# Supprimer un conteneur (nécessite qu'il soit préalablement arreté)
sudo docker rm CONTAINER_ID
# Supprimer une image (nécessite qu'aucun conteneur n'en dépende)
sudo docker image rm IMAGE_ID
# Note: CONTAINER_ID peut aussi être le nom du conteneur
Créer une nouvelle image et la mettre en ligne (build et push)
On va voir en détail cette partie dans la prochaine partie.
🔬 Exécuter des commandes dans un conteneur en cours (exec)
Si on souhaite inspecter un conteneur on peut utiliser la commande exec
# Va entrer dans une shell bash du conteneur "mon-conteneur"
sudo docker exec -it mon-conteneur /bin/sh
# Va exécuter la commande "ls" dans mon-conteneur
sudo docker exec mon-conteneur ls
🔨 Compiler dans un environement propre avec Docker (exemple)
Si vous souhaitez compiler votre programme, imaginons en Rust, mais que vous souhaitez le faire dans un environement neuf pour empécher des incompatibilité pour les futurs utilisateur·ice·s. Vous pouvez utiliser Docker pour ça !
docker run --rm -u "$(id -u)":"$(id -g)" -v "$PWD":/usr/src/myapp -w /usr/src/myapp rust:bullseye cargo build --release
Pour décortiquer un peu la commande:
-
--rm
va automatiquement supprimer le conteneur une fois la compilation terminée -
-u "$(id -u)":"$(id -g)"
défini l'utilisateur à utiliser dans le conteneur à être celui de la machine hôte (pour les premissions de fichiers) -
-v "$PWD":/usr/src/myapp
va lier le dossier actuel au dossier/usr/src/myapp
dans le conteneur -
-w /usr/src/myapp
va définir ce dossier comme étant le dossier actuel -
rust:bullseye
est l'image utilisée (c'est debian + les outils de développement de Rust) -
cargo build --release
est la commande de compilation à lancer dans le conteneur