- Les Images vs Les Conteneurs
- Démarrer, arreter, enlever les conteneurs
- Vérifier les logs et les process des conteneurs
Les Images vs Les Conteneurs
Une image est l’application que nous voulons lancer.
Un conteneur est un processus qui est une instance de cette image.
On peut avoir plusieurs conteneurs qui tournent sous la meme image.
On va utiliser le serveur web Nginx comme image
Le registre par défaut de Docker est appelé le Docker Hub ( hub.docker.com). On peut considérer que les registres sont l’équivalent de Github, mais pas pour le code mais pour les images.
docker container run –publish 80:80 nginx
Explication
- Téléchargement de l’image ’nginx’ depuis DockerHub
- Démarre un nouveau conteneur depuis cette image
- Activation du port 80 sur le hote
- Dirige le traffic vers ce conteneur IP, port 80
On peut ensuite faire la commande suivante, qui va permettre au serveur Nginx de continuer de s’éxécuter mais dans l’arrière plan
docker container run –publish 80:80 –detach nginx
Si vous avez une erreur de ce type,
docker: Error response from daemon: driver failed programming external connectivity on endpoint infallible_hofstadter (0c100b5e21cc9f4db69491134180e23fa402a200c359c6a238842c516cded7d4): Error starting userland proxy: Bind for 0.0.0.0:80: unexpected error (Failure EADDRINUSE).
C’est du au fait que le port 80 est utilisé par un autre process, très certainement apache.
Vous pouvez essayer de lancer la commande suivante pour vérifier
sudo lsof -nP | grep LISTEN
Essayez de faire ca si vous n’utilisez pas Apache pour le moment
sudo apachectl stop
Ensuite relancez
docker container run –publish 80:80 –detach nginx
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0989f8e7eadb nginx “nginx -g ‘daemon of…” 7 seconds ago Up 6 seconds 80/tcp, 0.0.0.0:80->90/tcp practical_keller
practical_keller est un nom choisi aléatoirement par Docker.
docker container run –publish 80:90 –detach –name TestDockerAjmal nginx
86902e9a10357286a0e27c89e8b7235f7f3353dbeb124763c70201cd89dcd847
docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
86902e9a1035 nginx “nginx -g ‘daemon of…” 54 seconds ago Created TestDockerAjmal
0989f8e7eadb nginx “nginx -g ‘daemon of…” 8 minutes ago Up 8 minutes 80/tcp, 0.0.0.0:80->90/tcp practical_keller
Up 8 minutes signifie que le conteneur a bien été lancé.
J’ai ensuite remarqué que Docker n’aime pas que les noms des conteneurs soient en majuscules. J’ai donc renommé le conteneur
docker container rename TestDockerAjmal test_docker_ajmal
sudo lsof -nP | grep LISTEN
Adobe\x20 589 ajmal 32u IPv4 0xd33f2473fd1896e9 0t0 TCP 127.0.0.1:15393 (LISTEN)
node 628 ajmal 15u IPv4 0xd33f2473fdda36e9 0t0 TCP 127.0.0.1:49270 (LISTEN)
node 628 ajmal 21u IPv4 0xd33f2473fdda23e9 0t0 TCP 127.0.0.1:49274 (LISTEN)
com.docke 1874 ajmal 23u IPv4 0xd33f2473f5a0a069 0t0 TCP *:80 (LISTEN)
Faites cette commande pour supprimer tout conteneur qui n’est pas démarré.
docker rm $(docker ps -a -q) ou
docker container rm -f 896
Relancez la commande pour recréer le conteneur en spécifiant un port différent
docker container run –publish 90:90 –detach –name test_docker_ajmal nginx
Ajmals-MacBook-Pro:~ ajmal$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c87f189f8fb4 nginx “nginx -g ‘daemon of…” 4 seconds ago Up 3 seconds 80/tcp, 0.0.0.0:90->90/tcp test_docker_ajmal
0989f8e7eadb nginx “nginx -g ‘daemon of…” 34 minutes ago Up 34 minutes 80/tcp, 0.0.0.0:80->90/tcp practical_keller
Les 2 conteneurs sont UP, c’est à dire qu’ils sont bien démarrés.
Pour stopper les conteneurs, faites ensuite
docker container stop practical_keller
docker container stop test_docker_ajmal
docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c87f189f8fb4 nginx “nginx -g ‘daemon of…” 23 minutes ago Exited (0) 3 seconds ago test_docker_ajmal
0989f8e7eadb nginx “nginx -g ‘daemon of…” About an hour ago Exited (0) 31 seconds ago practical_keller
Les statuts ont changé à ’’Exited’’.
Rappel: Lancement d’un conteneur
- Recherche l’image localement dans l’Image Cache, s’il le trouve pas, etape 2
- Recherche l’image dans le repo image ( Docker Hub )
- Télecharge l’image et le sauvegarde
- Crée un nouveau conteneur basé sur cette image et le prépare au démarrage
- L’assigne un addresse IP virtuel sur le réseau privé à l’intérieur du moteur Docker
- Ouvre le port 80 sur l’hote et redirige vers le port 80 dans le conteneur
- Démarre le conteneur en utilisant le CMD dans l’image Dockerfile