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 :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
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 :

1 2
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 :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
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.




Laisser un commentaire