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: bridgeOn 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 -yIci, 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: bridgeLigne 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 -dVous 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.
