Démarrer avec Docker

Mis à jour : 19/01/2023 danny

Docker est une plateforme pour lancer des applications dans des containers.


Documentation

Site officiel
https://www.docker.com/

Procédures d'installation
https://docs.docker.com/install/linux/docker-ce/ubuntu/

Recherche des images sur docker hub
https://hub.docker.com/


Installation

# Installation
sudo apt-get --yes install docker.io

# Désinstallation des anciennes versions
sudo apt-get remove docker docker-engine docker.io containerd runc --yes

# Test de l'installation
sudo docker run hello-world

# Gestion des droits
sudo usermod -aG docker ${USER}

# Redémarrage pour prise en compte des droits
reboot

Commandes

# Indique la version de docker
sudo docker version

# Redémarrage du service docker
sudo service docker restart

# Liste des images
docker images
docker image ls

# Liste des containers
docker ps -a
docker container ls

# Efface toutes les images
docker rmi $(docker images -q)

# Efface tous les containers
docker rm $(docker ps -a -q)


Images

# Recherche une image
sudo docker search nginx

# Rapatrie une image
docker pull nginx

# Rapatrie une image dans une version spécifique
docker pull nginx:1.17.9
docker pull nginx:latest
docker pull node:12.16.1

# Supprime une image avec image_id
docker rmi image_id

# Supprime une image avec image_id en mode forcé
docker rmi -f image_id

# Renomme une image contenant image_id 0a
docker tag 0a new-name:tag-name

Containers

Options

  • -d : daemon
  • -p : publish
# Execute un container nommé frontend à partir d'une image nginx
sudo docker pull nginx:1.17.9
sudo docker run --name frontend -d -p 80:80 nginx:1.17.9

# Stoppe un container nommé frontend
docker stop frontend

# Efface un container nommé frontend
docker rm frontend

# Redémarre un container
docker restart frontend

# Efface un container nommé frontend en mode forcé
docker rm frontend -f         

# Renomme un container old-name en un container new-name
docker rename old-name new-name

# Visualise les logs
docker logs frontend

# Entre dans le conteneur en mode execution
docker exec -it frontend /bin/bash

Dockerfile

.dockerignore
.git
*Dockerfile*
*docker-compose*
node_modules
Dockerfile
FROM nginx:1.17.9
LABEL author="www.ganatan@com"
COPY /dist/angular-starter/browser /usr/share/nginx/html
# Création d'une image à partir du dockerfile par défaut
# Nom nom-image , Tag 1.0.0
docker build -t nom-image:1.0.0 .

# Création d'une image à partir du fichier dockerfile nommé Dockerfile-specific
docker build -t nom-image:1.0.0 -f Dockerfile-specific .

# Exécution du container sur le port 5000
docker run --rm  --name nom-container -d -p 5000:80 nom-image:1.0.0

# Entre dans le conteneur en mode execution
docker exec -it nom-container /bin/bash

Créer une image Hello

hello/Dockerfile
FROM busybox:latest
ADD index.html /www/index.html
EXPOSE 4000
CMD httpd -p 4000 -h /www; tail -f /dev/null
hello/index.html
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, user-scalable=no">
  <title>titre de notre page</title>
</head>

<body>
  Page Hello
</body>

</html>
# se positionner dans le répertoire hello contenant le fichier Dockerfile
# Crée une image avec un nom aléatoire à partir de l'image busybox
docker build .

# Crée une image hello:latest à partir de l'image busybox
docker build -t helloimage:1.0.0 .

# Execute le container  mais port 4000 non visible
docker run --rm -d helloimage:1.0.0

# Execute le container  mais port 5000 visible en mode non daemon
docker run --rm -p 5000:4000 helloimage:1.0.0

# Execute le container  mais port 5000 visible en mode daemon
docker run --rm -d -p 5000:4000 helloimage:1.0.0

# Execute le container  avec le nom hellocontainer
docker run --rm  --name hellocontainer -d -p 5000:4000 helloimage:1.0.0

Docker registry

Créer une image Docker sur le Docker Hub.
La rendre accessible de façon publique.

# Connection au docker Hub
docker login -u "my_name" -p "my_password" docker.io

# Tag notre image
docker tag helloimage:1.0.0 my_name/angular-example-starter:1.0.0

# Envoie l'image sur docker Hub
docker push my_name/angular-example-starter:1.0.0

# Récupère l'image sur son poste à partir de Docker Hub
docker pull my_name/angular-example-starter:1.0.0

# Exécute l'image dans un container
docker run --rm --name hellocontainer -d -p 80:4000 my_name/angular-example-starter:1.0.0

Volumes

# Création d'un volume
docker volume create volume-test

# Liste des volumes
docker volume ls