J'essaie de configurer un environnement drupal avec docker compose et cela fonctionne un peu. Cependant, j'ai divisé mon image en une image drupal de base et une couche personnalisée au-dessus avec ma configuration, modules et ainsi de suite. L'image de base est tirée du rapport officiel et améliorée avec quelques outils dont j'ai besoin (par exemple, compositeur et une extension php).La référence à l'image créée par le docker compose est liée au nom du projet/répertoire
Mon dockerfile pour la couche personnalisée ressemble à ceci (premières lignes):
FROM reponame_drupal
COPY sites /var/www/html/sites/
RUN chown -R www-data:www-data /var/www/html/sites/default/files
(je suis conscient que je devrais probablement changer les permissions avec un script entrypoint)
Cela fonctionne puisque tout est placé dans un répertoire appelé 'repo-name', cependant cela semble incroyablement fragile. Si je change le nom de mon projet pour une raison quelconque mes pauses dockerfiles.
Je voudrais bien écrire juste FROM drupal
ou un nom personnalisé que je contrôle, au lieu d'un basé sur le nom du répertoire. Est-ce que je peux changer le nom du réseau en quelque chose que je peux contrôler dans le code (dans docker-compose.yml)? Quelle est la meilleure pratique ici?
Le dockerfile pour la base drupal ressemble à ceci:
FROM drupal:7.56-apache
# Install packages
RUN rm /bin/sh && ln -s /bin/bash /bin/sh && \
apt-get update && apt-get install --no-install-recommends -y \
curl \
wget \
vim \
git \
unzip \
libmcrypt-dev
# Install PHP extensions
RUN docker-php-ext-install \
mcrypt
# Install Composer
RUN curl -sS https://getcomposer.org/installer | php && \
mv composer.phar /usr/local/bin/composer && \
ln -s /root/.composer/vendor/bin/drush /usr/local/bin/drush
# Install Drush
RUN composer global require drush/drush:8 && \
composer global update
# Clean repository
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
Le docker-compose.yml ressemble à quelque chose comme ceci:
version: '3.3'
services:
mysql:
image: mysql/mysql-server:5.7
[additional settings]
drupal:
build: ./docker/drupal
customlayer:
build: ./docker/customlayer
ports:
- "8090:80"
depends_on:
- mysql
restart: always
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
[additional settings]
Cela fonctionne certainement. Que recommanderiez-vous de faire différemment. Construire l'image avec une commande et l'omettre du fichier de composition? J'aime la commodité d'avoir tout dans un script, mais je suis nouveau à docker donc je ne connais pas les pièges. – glaux
Oui, peut-être séparer l'image de base de docker-compose.yml ou combiner cette image de base et l'image de service réelle. Docker supporte aussi de nos jours [les builds multi-étapes] (https://docs.docker.com/engine/userguide/eng-image/multistage-build/) mais ne sait pas exactement comment cela pourrait correspondre à votre cas d'utilisation. – Lauri