REMARQUE: je n'utilise plus cet environnement. Il est donc impossible pour moi de tester les réponses et d'en accepter une. Je suis désolé
TL; DR Pouvez-vous me donner un exemple d'image de menu fixe qui utilise composer pour gérer PHP dépendances?
Toutes mes questions dans ce post concernent composer l'outil de dépendance php pas docker-composer le successeur de fig.
J'essaie de créer ma propre image de menu fixe à exécuter wordpress installé en tant que dépendance composer) .
Je travaille sur la construction d'une image Docker en utilisant une image php Docker comme base et ce que je dois faire est d'installer composer) et d'exécuter une commande composer update sur le moment de la création d'image ou sur le temps de construction de l'image (je ne sais pas si les deux seraient d'accord).
Je peux tout faire très bien en exécutant manuellement toutes les étapes (exécuter une image dans le menu fixe, y faire un point et en copier-coller toutes les étapes).
Mais quand je mets toutes ces étapes sur un fichier Docker, je ne reçois pas composer pour écrire les fichiers.
Cela fait un certain temps que j'essaie d'obtenir un exemple d'échec minimal, mais celui que j'ai n'est pas vraiment minimal.
Mon test est composé des éléments suivants (liens vers les dépôts de github appropriés ci-dessous)
Dockerfile
NFORMATION ~~~#
# based on
# https://hub.docker.com/r/richarvey/nginx-php-fpm/
# and
# https://hub.docker.com/_/wordpress/
FROM php:7.0.2-Apache
MAINTAINER Miquel Adell <[email protected]>
ENV WORDPRESS_VERSION 4.4.1
#~~~ DEPENDENCIES ~~~#
# Add PHP repository to apt source
RUN apt-get update \
&& apt-get install -y \
libpng12-dev \
libjpeg-dev \
curl \
sed \
zlib1g-dev \
&& docker-php-ext-install \
Zip \
mysqli
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
#~~~ DIRS ~~~#
WORKDIR /var/www/html/
#~~~ WORDPRESS ~~~#
COPY files/composer.json composer.json
ONBUILD RUN composer update
docker-compose.yml
wordpress:
image: miqueladell/composed_wordpress_test
links:
- wordpress_db:mysql
environment:
- VIRTUAL_Host=miqueladell.dev
- WORDPRESS_DB_NAME=wordpress
ports:
- "80"
wordpress_db:
image: miqueladell/mariadb-utf8mb4
environment:
- MYSQL_ROOT_PASSWORD=password
Mon test est le suivant
Construire une image en exécutant cette commande dans un répertoire contenant le fichier Docker collé ci-dessus
docker build -t miqueladell/composed_wordpress_test .
(pas d'erreurs dans le journal)
Utilisez cette image pour créer un conteneur en exécutant la commande suivante dans un répertoire contenant le fichier docker-compose.yml collé ci-dessus.
docker-compose up
(pas d'erreurs dans le journal)
bash dans le conteneur en cours d'exécution pour être en mesure de voir si les fichiers sont là
docker exec -i -t miqueladellv2_wordpress_1 bash
ls de/var/www/html
root@bff14367658b:/var/www/html# ls -al
total 12
drwxr-xr-x 2 www-data www-data 4096 Jan 19 10:50 .
drwxr-xr-x 5 root root 4096 Jan 19 10:50 ..
-rw-r--r-- 1 root root 138 Jan 15 09:18 composer.json
Vous pouvez voir à l’étape 4 que composer update ne semble pas avoir fonctionné du tout.
J'ai essayé d'utiliser les deux
RUN composer update
et
ONBUILD RUN composer update
sur Dockerfile avec les mêmes résultats.
Si je reviens à l'étape 4 précédente du test et que je lance manuellement Composer update sur l'invite bash du conteneur de menu fixe, le message suivant s'affiche:
root@bff14367658b:/var/www/html# composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing johnpbloch/wordpress-core-installer (0.2.1)
Downloading: 100%
- Installing johnpbloch/wordpress (4.4.1)
Downloading: 100%
Writing lock file
Generating autoload files
root@bff14367658b:/var/www/html# ls -al
total 24
drwxr-xr-x 4 www-data www-data 4096 Jan 19 11:12 .
drwxr-xr-x 6 root root 4096 Jan 19 11:12 ..
-rw-r--r-- 1 root root 138 Jan 15 09:18 composer.json
-rw-r--r-- 1 root root 3718 Jan 19 11:12 composer.lock
drwxr-xr-x 4 root root 4096 Jan 19 11:12 vendor
drwxr-xr-x 5 root root 4096 Jan 19 11:12 wordpress
root@bff14367658b:/var/www/html#
ce qui est exactement la sortie que j'attendais à l'étape 4
J'aimerais des conseils. Merci.
github relie aux fichiers complets
Installer composer comme ceci évitera ce problème:
RUN curl -o /tmp/composer-setup.php https://getcomposer.org/installer \
&& curl -o /tmp/composer-setup.sig https://composer.github.io/installer.sig \
# Make sure we're installing what we think we're installing!
&& php -r "if (hash('SHA384', file_get_contents('/tmp/composer-setup.php')) !== trim(file_get_contents('/tmp/composer-setup.sig'))) { unlink('/tmp/composer-setup.php'); echo 'Invalid installer' . PHP_EOL; exit(1); }" \
&& php /tmp/composer-setup.php --no-ansi --install-dir=/usr/local/bin --filename=composer --snapshot \
&& rm -f /tmp/composer-setup.*
J'ai rencontré ce problème aujourd'hui.
Ce qui a résolu le problème pour moi, c’est d’utiliser un répertoire différent de celui défini dans l’image.
Il semble que les modifications apportées au répertoire pendant le processus de construction soient ignorées si le répertoire est défini en tant que volume.
Voici un exemple de mon travail Dockerfile
FROM richarvey/nginx-php-fpm
# Install dependencies
RUN apt-get update && \
apt-get install curl nano && \
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Add update nginx config
COPY conf/nginx-site.conf /etc/nginx/sites-available/default.conf
# Bundle app source
COPY app/ /app
# Install app dependencies
RUN cd /app && \
composer install --no-interaction
EXPOSE 80
Et puis dans conf/nginx-site.conf
J'ai mis à jour la racine de mon application (raccourcie par souci de concision)
server {
# ... the rest of your nginx config
root /app/public;
# ... the rest of your nginx config
}