subir que propia iniciar imagen hub ejecutar desde crear contenedor cero php docker composer-php dockerfile docker-compose

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

  1. 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)

  2. 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)

  3. Bash en el contenedor en funcionamiento para poder ver si los archivos están allí

    docker exec -i -t miqueladellv2_wordpress_1 bash

  4. 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.*