Etudier Linux depuis un container docker peut être intéressant pour apprendre en même temps Docker. Nous allons voir comme créer un container docker qui contient Debian, et nous allons commencer par nous familiariser avec Docker.
Contenu
Téléchargement de l’image Docker officielle Debian
Pour télécharger l’image officielle de Debian faites la commande suivante (démarrer Docker Desktop avant)
docker pull debian
Démarrage de l’image docker debian
Une fois que l’image est téléchargée on peut démarrer le container docker
docker run -it debian //alternativement démarrage avec un container nommé docker run -it --name not-ubuntu debian // voir les dockers en fonctionnement // depuis un autre terminal, pour visualiser les docker qui tournent docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a3de0ee8e2ba debian "bash" 2 hours ago Up 54 minutes not-ubuntu
Sortir d’un docker
Pour sortir d’un docker quand vous êtes en mode interactif, c’est à dire que vous êtes dedans, vous pouvez faire la combinaison de touche CTRL + D, ou faire la commande exit.
Quand vous avez démarré votre container docker avec docker run, vous pouvez voir les container actif avec docker ps, mais un fois que vous êtes sorti du container ou que le container est stoppé, docker ps ne donne rien, c’est alors qu’il vous faut faire la commande docker ps -a
Stopper un container
Vous pouvez stopper un container à partir d’un autre terminal
docker stop <ID CONTAINER>
Une fois le container stoppé, il ne sera plus visible avec docker ps, mais avec docker ps -a.
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a3de0ee8e2ba debian "bash" 2 hours ago Exited (137) 5 minutes ago not-ubuntu
Redémarrer un container « Exited »
Pour redémarrer un container éteint, il faut faire docker start <nom_container>. Le problème c’est que vous ne pouvez pas le redémarrer en mode interactif. Il faut le redémarrer et y entrer avec docker exec.
docker start not-ubuntu // entrée dans le docker avec un shell bash docker exec -it not-ubuntu bash
Construire sa propre image docker de Debian
Pourquoi cette manipulation? L’image officielle de Debian ne contient que Debian. Si vous démarrez cette image, il faut tout installer (Proftpd, curl,wget etc). Nous voudrions une image qui contient tout ces logiciels. Bien sûr vous pouvez démarrer un container nommé afin de persister les installations. Mais votre image n’est pas distribuable car elle sera modifiée. Nous allons donc confectionner une image Docker de Debian customisée avec des logiciel préinstallés, un utilisateur créé. Qu’on va pusher sur le registry gratuit de Docker, qu’on pourra distribuer.
Créer un fichier Dockerfile de configuration
Créer un répertoire où vous allez mettre le fichier Dockerfile, dont voici le contenu:
# Utilise l’image officielle Debian
FROM debian:bullseye
# Évite les questions interactives lors des installations
ENV DEBIAN_FRONTEND=noninteractive
# Mise à jour et installation de paquets de base
RUN apt-get update && \
apt-get install -y \
curl \
wget \
vim \
git \
ca-certificates \
sudo \
bash \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# Crée un utilisateur non-root
RUN useradd -ms /bin/bash devuser && \
echo "devuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Bascule sur l’utilisateur
USER devuser
# Répertoire de travail
WORKDIR /home/devuser
# Commande par défaut (ouvre un terminal interactif)
CMD [ "bash" ]
La commande apt-get clean permet d’effacer les fichier temporaire pour gagner de l’espace, vous aurez une image Docker plus petite.
Ensuite depuis el répertoire où il y a le Dockerfile lancez la commande :
docker build -t debian_custom . debian_custom est le nom de la nouvelle image, le . est le répertoire où se trouve le fichier Dockerfile (répertoire courant) Pour tester l'image nous allons démarrer le container: docker run -it debian_custom
Normalement tout fonctionne normalement, et vous êtes connecté en devuser. Maintenant nous allons pousser cette image dans notre repository Docker, si vous n’avez pas de compte c’est le moment d’en créer un.
docker tag debian_custom refschool/debian_custom:latest docker push refschool/debian_custom:latest The push refers to repository [docker.io/refschool/debian_custom] 5f70bf18a086: Preparing 34d4f9b85dd7: Pushing [==================================================>] 350.7kB e5f126b4d117: Preparing 46cd9334c732: Preparing puis quand c'est terminé 5f70bf18a086: Mounted from library/wordpress 34d4f9b85dd7: Pushed e5f126b4d117: Pushed 46cd9334c732: Mounted from library/debian latest: digest: sha256:fa443c6962fb73b4863bb10c46e41aef3db2c255604babcf83d89d41f1fbbb size: 1155
Allez sur le site https://hub.docker.com/repositories/refschool pour voir votre image en ligne ou allez dans le Docker Desktop.
Divers commandes docker
Les images qui n’ont plus de container actif peuvent être enlevé si elles ne servent plus. Les volumes de containers stoppés ou enlevés, les caches de builds.
Enlever une image par le nom ou par l’ID
docker images ebian_custom latest 48c43ff6050a 34 minutes ago 271MB refschool/debian_custom latest 48c43ff6050a 34 minutes ago 271MB debian latest b2ab84c007fe 4 weeks ago 117MB <none> <none> 9f0461ec704d 3 months ago 53.3MB <none> <none> eb50ff518c13 3 months ago 47.9MB test latest d5aa53c2ffcd 3 months ago 47.9MB evashen latest bc040446118f 3 months ago 53.3MB hubproxy.docker.internal:5555/docker/desktop-kubernetes kubernetes-v1.27.2-cni-v1.2.0-critools-v1.27.0-cri-dockerd-v0.3.2-1-debian c763812a4530 24 months ago 418MB registry.k8s.io/kube-apiserver v1.27.2 c5b13e4f7806 2 years ago 121MB registry.k8s.io/kube-scheduler v1.27.2 89e70da428d2 2 years ago 58.4MB registry.k8s.io/kube-controller-manager v1.27.2 ac2b7465ebba 2 years ago 112MB registry.k8s.io/kube-proxy v1.27.2 b8aa50768fd6 2 years ago 71.1MB docker/desktop-vpnkit-controller dc331cb22850be0cdd97c84a9cfecaf44a1afb6e 556098075b3d 2 years ago 36.2MB registry.k8s.io/coredns/coredns v1.10.1 ead0a4a53df8 2 years ago 53.6MB registry.k8s.io/etcd 3.5.7-0 86b6af7dd652 2 years ago 296MB registry.k8s.io/pause 3.9 e6f181688397 2 years ago 744kB docker/desktop-storage-provisioner v2.0 99f89471f470 4 years ago 41.9MB docker rmi 9f0461ec704d // on enlève par l'ID docker rmi evashen. // on enlève par le nom Pour aller plus vite vous avez la commande: docker image prune -a // qui va tout enlever après confirmation