Customiser une image Docker

Auteur : adrien_contrib
Date de parrution : 2024-11-24 20:33:51
Dernière modification :

docker docker-compose



thumbnail de l'article

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

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

 

tags associés :

languages

tools & techno

docker docker-compose

centres d'intérêts