Construire ou personnaliser une image avec Docker-Compose

Dans ce nouveau tutoriel dédié à Docker et docker-compose, je vais vous expliquer comment construire une image personnalisé pour une conteneur depuis un stack de service que l’on a créé avec docker-compose

Comme exemple, on va partir de l’image Openlitespeed sur laquelle on souhaite ajouter l’extension LDAP pour PHP.

Voici le fichier docker-compose.yml de départ :

version: '3'
services:
  mysql:
    image: mariadb:10.5.9
    logging:
      driver: none
    command: --max_allowed_packet=256M
    volumes:
      - "./data/db:/var/lib/mysql:delegated"
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    restart: always
    networks:
      - default
  litespeed:
    image: litespeedtech/openlitespeed:${OLS_VERSION}-${PHP_VERSION}
    logging:
      driver: none
    env_file:
      - .env
    volumes:
      - ./lsws/conf:/usr/local/lsws/conf
      - ./lsws/admin-conf:/usr/local/lsws/admin/conf
      - ./bin/container:/usr/local/bin
      - ./sites:/var/www/vhosts/
      - ./acme:/root/.acme.sh/
      - ./logs:/usr/local/lsws/logs/
    ports:
      - 80:80
      - 443:443
      - 443:443/udp
      - 7080:7080
    restart: always
    environment:
      TZ: ${TimeZone}
    networks:
      - default
  phpmyadmin:
    image: bitnami/phpmyadmin:5.0.2-debian-10-r72
    logging:
      driver: none
    ports:
      - 8080:80
      - 8443:443
    environment:
      DATABASE_HOST: mysql
    restart: always
    networks:
      - default
networks:
  default:
    driver: bridge

On va maintenant personnaliser l’image Openlitespeed pour ajouter l’extension LDAP au niveau de PHP.

Dans le répertoire où se trouve le fichier docker-compose.yml, créer un nouveau dossier que l’on va appeler custom.

Dans le répertoire custom, créer un fichier nommer Dockerfile.

Ajouter le contenu ci-dessous, pour personnaliser l’image :

FROM litespeedtech/openlitespeed:1.7.16-lsphp74
RUN apt-get update && apt-get install lsphp74-ldap -y

Ici, on part de l’image de base openlitespeed 1.7.16 avec LSPHP 7.4 et on ajoute le paquet lsphp74-ldap qui permet d’avoir l’extension LDAP dans PHP.

Il faut maintenant éditer le fichier docker-compose.yml, pour indiquer quel fichier utiliser pour construire la nouvelle image et aussi indiquer un nom à notre image.

Voici le fichier docker-compose.yml avec les modifications :

version: '3'
services:
  mysql:
    image: mariadb:10.5.9
    logging:
      driver: none
    command: --max_allowed_packet=256M
    volumes:
      - "./data/db:/var/lib/mysql:delegated"
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    restart: always
    networks:
      - default
  litespeed:
    image: litespeedtech/openlitespeed:mycustomimage
    build: ./custom
    logging:
      driver: none
    env_file:
      - .env
    volumes:
      - ./lsws/conf:/usr/local/lsws/conf
      - ./lsws/admin-conf:/usr/local/lsws/admin/conf
      - ./bin/container:/usr/local/bin
      - ./sites:/var/www/vhosts/
      - ./acme:/root/.acme.sh/
      - ./logs:/usr/local/lsws/logs/
    ports:
      - 80:80
      - 443:443
      - 443:443/udp
      - 7080:7080
    restart: always
    environment:
      TZ: ${TimeZone}
    networks:
      - default
  phpmyadmin:
    image: bitnami/phpmyadmin:5.0.2-debian-10-r72
    logging:
      driver: none
    ports:
      - 8080:80
      - 8443:443
    environment:
      DATABASE_HOST: mysql
    restart: always
    networks:
      - default
networks:
  default:
    driver: bridge

Ligne 19 : il faut personnaliser le nom de l’image, celui-ci sera utiliser lors du build de l’image
Ligne 20 : indiquer l’emplacement du fichier Dockerfile, qui va permettre de construire l’image.

Il faut maintenant construire l’image avec la commande suivante :

sudo docker-compose build

Une fois terminée, il est possible de vérfifier que l’image est présente à l’aide de la commande ci-après :

sudo docker image list

Vous avez construit une image personnalisé depuis un fichier docker-compose.

Il ne vous reste plus qu’à démarrer normalement vos conteneurs :

sudo docker-compose up -d

Vous savez maintenant comment personnaliser / construire une image personnalisée avec docker-compose.

En complément, si vous débutez avec Docker, je vous invite à lire ce cours : https://learn.rdr-it.com/Le%C3%A7on/utiliser-docker-pour-deployer-un-serveur-web/ qui va vous permettre de comprendre la construction de l’image.

Romain Drouche
Architecte Système | MCSE: Core Infrastructure
Expert en infrastructures IT avec plus de 15 ans d’expérience sur le terrain. Actuellement Chef de projet Systèmes et Réseaux et Référent SSI (Sécurité des Systèmes d’Information), je mets mon expertise au service de la fiabilité et de la sécurité des environnements technologiques.

Laisser un commentaire