2017-09-13 2 views
0

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] 

Répondre

1

Vous pouvez spécifier l'option d'image pour les services que vous vouloir construire dans docker-compose.yml:

drupal: 
    build: ./docker/drupal 
    image: reponame_drupal # or whatever you like 

Bien que l'avoir dans docker-compose.yml juste pour construire l'image de base pour le service réel sonne faux.

+0

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

+0

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