Création et publication d'images Docker sur un registre distant

Présentation de Docker

Docker est une plateforme open-source de conteneurisation qui permet aux développeurs d'encapsuler leurs applications ainsi que leurs dépendances dans des images portables. Ces images peuvent ensuite être déployées sur n'importe quelle machine sous Linux ou Windows. Les conteneurs Docker fonctionnent de manière isolée, grâce à un mécanisme de sandboxing, garantissant qu'aucune interférence n'a lieu entre eux.

Dockerfile : le cœur de la construcsion d'images

Un Dockerfile est un fichier texte contenant un ensemble d'instructions permettant de construire une image Docker. Il décrit étape par étape l'installation et la configuraton de l'environnement souhaité. Le processus de création se déroule en trois phases :

  1. Rédaction du Dockerfile
  2. Construction de l'image avec la commande docker build
  3. Exécution du conteneur avec docker run

Instructions essentielles d'un Dockerfile

  • FROM : définit l'image de base utilisée comme point de départ
  • MAINTAINER : précise l'autuer et son adresse de contact
  • RUN : exécute des commandes shell pendant la phase de construction
  • CMD : définit la commande par défaut au démarrage du conteneur ; seule la dernière instruction CMD est prise en compte
  • EXPOSE : indique les ports réseau exposés par le conteneur
  • ENV : configure des variables d'environnement pendant la construction
  • ADD : copie des fichiers depuis l'hôte vers l'image, avec support automatique des URLs et de la décompression d'archives tar
  • COPY : similaire à ADD mais se limite à la copie simple sans traitement des URLs ni décompression
  • ENTRYPOINT : configure l'exécutable principal du conteneur, complémentaire à CMD
  • VOLUME : crée des points de montage pour la persistance des données
  • USER : définit l'utilisateur sous lequel les commandes seront exécutées
  • WORKDIR : spécifie le répertoire de travail par défaut dans le conteneur
  • ONBUILD : déclenche des instructions lorsque l'image est utilisée comme base pour une autre construction

Exemple de Dockerfile pour une application Python

Créez un fichier nommé Dockerfile à la racine de votre projet. Voici un exemple adapté pour une application Python Django :

FROM python:3.6.8
LABEL maintainer="dev@example.com"

# Mise à jour des paquets système
RUN apt-get update && apt-get clean

# Mise à niveau du gestionnaire de paquets Python
RUN pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple

# Définition du répertoire de travail
WORKDIR /app

# Copie des fichiers du projet
COPY . /app

# Installation des dépendances
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

# Exposition du port d'écoute
EXPOSE 8000

# Commande de démarrage du serveur
ENTRYPOINT ["python", "manage.py", "runserver", "0.0.0.0:8000"]

Construction de l'image

La commande docker build permet de générer une image à partir d'un Dockerfile. Voici les principales options :

  • -f : indique le chemin du Dockerfile
  • --pull : force la récupération de la dernière version de l'image de base
  • -q : mode silencieux, affiche uniquement l'identifiant de l'image
  • -t : attribue un nom et un tag à l'image
docker build -t django-app:v1 .

Le point final indique que le contexte de construction se trouve dans le répertoire courant.

Lancement du conteneur

docker run -d -p 8012:8000 --name django-container django-app:v1

Le paramètre -d lance le conteneur en arrière-plan, -p mappe le port hôte 8012 vers le port conteneur 8000. L'application est alors accessible via http://localhost:8012.

Publication sur Docker Hub

Pour distribuer une image sur plusieurs serveurs sans reconstruire à chaque fois, il est recommandé de la pousser vers un registre distant tel que Docker Hub.

Étapes de publication

  1. Créer un dépôt sur Docker Hub, par exemple : django-prod-app
  2. Étiqueter l'image locale avec le nom du dépôt distant :
docker tag django-app:v1 moncompte/django-prod-app:stable

  1. Se connecter à Docker Hub :
docker login

  1. Pousser l'image vers le registre :
docker push moncompte/django-prod-app:stable

En cas d'erreur denied: requested access to the resource is denied, il suffit de s'authentifier préalablement avec docker login.

Récupération de l'image

Sur un autre serveur, l'image peut être téléchargée avec :

docker pull moncompte/django-prod-app:stable

Étiquettes: Docker Dockerfile Docker Hub conteneurisation Python

Publié le 6 juillet à 04h23