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.
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