propia - Consigue que el compositor(administrador de dependencias php) se ejecute en una compilación de imágenes de docker
que es docker hub (2)
Me encontré con este problema hoy.
Lo que me solucionó fue utilizar un directorio diferente al que se definió en la imagen.
Parece que los cambios que se realizan en el directorio durante el proceso de compilación se descartan si el directorio se define como un volumen.
Aquí hay un ejemplo de mi archivo Docker en funcionamiento
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
Y luego en conf/nginx-site.conf
actualicé la raíz de mi aplicación (acortado por brevedad)
server {
# ... the rest of your nginx config
root /app/public;
# ... the rest of your nginx config
}
NOTA: Ya no uso este entorno, así que no hay forma de que pruebe las respuestas y acepte una. Lo siento.
TL; DR ¿Puede indicarme un ejemplo de una imagen de ventana acoplable que usa el compositor para manejar dependencias de PHP?
Todas mis preguntas en este post están relacionadas con el compositor, la herramienta de dependencia php, no docker-composer, el sucesor de la fig .
Intento crear mi propia imagen del acoplador para ejecutar WordPress instalado como dependencia del compositor .
Estoy trabajando en la construcción de una imagen de portador usando Docker php image como base y lo que necesito hacer es instalar compositor y ejecutar un comando de actualización de compositor ya sea en la creación de imagen o en el tiempo de creación de la imagen (no sé si ambos De acuerdo).
Puedo ejecutar todo muy bien ejecutando manualmente todos los pasos (ejecutando una imagen del acoplador, golpeándola y copiando y pegando cada paso).
Pero cuando pongo todos esos pasos en un Dockerfile, no consigo que el compositor escriba los archivos.
He intentado obtener un ejemplo mínimo de falla durante algún tiempo, pero el que tengo no es el mínimo.
Mi prueba se compone de lo siguiente (enlaces a los repositorios github relevantes a continuación)
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
Mi prueba es la siguiente
Cree una imagen ejecutando este comando en un directorio que contenga el archivo Docker pegado arriba
docker build -t miqueladell/composed_wordpress_test .
(no hay errores en el registro)
Use esa imagen para construir un contenedor ejecutando el siguiente comando en un directorio que contiene el docker-compose.yml pegado arriba
docker-compose up
(no hay errores en el registro)
Bash en el contenedor en funcionamiento para poder ver si los archivos están allí
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
Puede ver en el paso 4 que la actualización del compositor parece no haberse ejecutado en absoluto.
He intentado usar ambos
RUN composer update
y
ONBUILD RUN composer update
en Dockerfile con los mismos resultados.
Si vuelvo al paso 4 anterior de la prueba y ejecuto manualmente la actualización del compositor en el indicador bash del contenedor del docker que obtengo:
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#
que es exactamente el resultado que esperaba en el paso 4
Me encantaría un consejo. Gracias.
github enlaces a los archivos completos
Instalar un compositor como este evitará este problema:
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.*