Docker – Les Conteneurs

  • 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

  1. Téléchargement de l’image ’nginx’ depuis DockerHub
  2. Démarre un nouveau conteneur depuis cette image
  3. Activation du port 80 sur le hote
  4. 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

  1. Recherche l’image localement dans l’Image Cache, s’il le trouve pas, etape 2
  2. Recherche l’image dans le repo image ( Docker Hub )
  3. Télecharge l’image et le sauvegarde
  4. Crée un nouveau conteneur basé sur cette image et le prépare au démarrage
  5. L’assigne un addresse IP virtuel sur le réseau privé à l’intérieur du moteur Docker
  6. Ouvre le port 80 sur l’hote et redirige vers le port 80 dans le conteneur
  7. Démarre le conteneur en utilisant le CMD dans l’image Dockerfile

Laisser un commentaire

%d blogueurs aiment cette page :