Customiser une image Docker
Auteur : adrien_contrib
Date de parrution : 2024-11-24 20:33:51
Dernière modification :
J'ai récemment dû copier un serveur de PROD pour créer un environnement de DEV. Généralement, je me contente de créer un réseau de conteneurs proche de l'environnement que je tente de copier. Mais cette fois-ci, j'ai besoin d'être plus précis.
Avant-propos
Cet article n'a pas vocation à permettre une compréhension fine et profonde de Docker, mais à donner une méthode la plus simple possible pour modifier une image Docker.
Prérequis
- Savoir effectuer (au moins à peu près) des modifications sur un système / service via un terminal (Linux)
- Ne pas savoir build une image docker custom
Contexte
Vous savez agencer des images Docker préexistantes pour arriver à vos fins. Mais un jour ou l'autre, cette façon de faire ne suffit plus, vous avez besoin de plus de précision, de personnaliser vous-même les services qui tournent dans vos containers. Bonne nouvelle, ce jour est arrivé! (oui, bonne nouvelle car c'est un bon prétexte pour level-up)
tuto
Image de base
Imaginons que vous ayez besoin du paquet "aaa", et de son prérequis le fameux paquet "bbb", le tout dans un serveur Apache sur PHP 8.2. Vous pouvez faire tourner un PHP 8.2 dans Apache, avec un système hôte de type Debian, avec une image existante, par exemple comme cela :
version: '3'
services:
apache:
image: php:8.2-apache
container_name: ${PROJECT_NAME}_webserver
restart: always
ports:
- ${WEB_PORT}:80
volumes:
- ./web:/var/www/html
depends_on:
- mybdd
Modifications souhaitées
Il vous manque vos 2 paquets, qui ne sont malheureusement pas inclus dans l'image. Si vous vouliez effectuer la modification dans un serveur Apache directement installé sur le système hôte de votre machine, vous procéderiez comme suit:
sudo apt-get install -y bbb aaa
vous pouvez tester cela en entrant sur le terminal de votre conteneur :
# démarer le container
sudo docker start my_container
# entrer dans le terminal
sudo docker exec -it my_container bash
À ce stade, votre conteneur est fonctionnel, mais la modification n'est pas persistante. C'est-à-dire que lors du redémarrage, c'est à refaire.
Persistence de la modification / création du Dockerfile
C'est précisément à installer cette persistance de la modification que peut servir une image Docker Custom.
Pour cela, il suffit de transposer les commandes nécessaires à la transformation souhaitée dans un fichier dockerfile :
# image de base
FROM php:8.2-apache
# commandes de modification
RUN apt-get install -y bbb aaa
# bonus: copier les fichiers situer dans dossierDuDockerfile/web vers la racine http du server pour développer hors du container
COPY ./web /var/www/html
Note : il est fortement conseillé, pour des raisons d'optimisation liées à la façon dont Docker ajoute des couches de modifications (RUN), de faire tenir toutes ces modifications dans une seule commande RUN (par exemple en utilisant &&).
Build de l'image custom
vous pouvez builder l'image et lui donner un nom via la commande suivante :
docker build -t custom-php-apache .
vous pouvez démarrer un conteneur avec l'image custom:
docker run -i -t ubuntu:12.04 /bin/bash
ou l'incorporer dans votre docker-compose.yml:
services:
apache:
image: custom-php-apache
container_name: custom_web
restart: always
ports:
- 80:80
volumes:
- ./web:/var/www/html
depends_on:
- db_service
