paint-brush
Haga que PHP Composer se ejecute en Docker Container [Una guía práctica]por@ifomin
34,729 lecturas
34,729 lecturas

Haga que PHP Composer se ejecute en Docker Container [Una guía práctica]

por Igor Fomin2m2020/01/26
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

Obtenga PHP Composer para que se ejecute en Docker Container [Una guía práctica] Obtenga PHPPHPH composer para que se ejecute en contenedores Docker. La guía utiliza Docker-composer para instalar un paquete PHP en un contenedor Docker. Una imagen acoplable de compositor dedicada, mapear mi proyecto dentro y ejecutar comandos de compositor. Un enfoque mucho mejor es usar la biblioteca del compositor - biblioteca "predis/predis". Esta biblioteca debe instalarse una vez que se inicie el contenedor. Se puede utilizar para actualizar o instalar dependencias.

Company Mentioned

Mention Thumbnail
featured image - Haga que PHP Composer se ejecute en Docker Container [Una guía práctica]
Igor Fomin HackerNoon profile picture

Tengo un contenedor docker php que ejecuta mi aplicación y necesito comenzar a usar Composer para instalar un paquete php. ¿Cuál es la mejor manera de abordarlo?

Los archivos fuente se pueden encontrar aquí:

https://github.com/ikknd/docker-study en la carpeta receta-05

1. No es el mejor enfoque, pero sí el más sencillo: no usar la imagen "php:7.2-fpm", sino crear una imagen personalizada con php y composer.

Técnicamente, esto funciona, instalo Composer en mi imagen php, y cada vez que necesito actualizar o instalar dependencias, simplemente ejecuto llamadas en mi contenedor php personalizado.

Problemas:

  • necesita usar el compositor en varios contenedores diferentes: da como resultado imágenes personalizadas para cada contenedor, donde se necesita el compositor
  • si ejecuto la ventana acoplable en modo de enjambre y escalo el contenedor a más de 1 copia, da como resultado que cada contenedor ejecute "instalación del compositor"

2. Un enfoque mucho mejor: usar una imagen acoplable de compositor dedicada, mapear mi proyecto dentro y ejecutar comandos de compositor.

Usaré ideas de la receta 02 - página php simple y receta 04 - configuración de redis .

Cree el archivo docker-compose.yml en la carpeta "docker":

Aquí hago varias cosas:

  • /var/www/docker-study.loc/recipe-05/php:/app - la imagen del compositor por defecto ejecuta comandos desde la carpeta /app, es por eso que mapeo un proyecto como este
  • Mapeo /var/www/docker-study.loc/recipe-05/php tanto para el contenedor php como para el contenedor composer, de esta manera el contenedor composer puede ejecutar "composer install", y el contenedor php tendrá el código actualizado
  • "depends_on": evita que el contenedor comience antes que otro contenedor, del cual depende

3. Cree composer.json en la carpeta "php":

4. Cree index.php en la carpeta "php":

El objetivo aquí es usar la biblioteca del compositor - "predis/predis" (solo como ejemplo). Esta biblioteca debe instalarse una vez que se inicia el contenedor "compositor".

Puedo ir a /var/www/docker-study.loc/recipe-05/docker/ y ejecutar:

 docker-compose up -d

Ahora vaya a myapp.loc/ y vea "¡funciona!"

5. Pensamientos finales.

Cuando se inició el contenedor del compositor, ejecutó el comando "instalar compositor" y luego salió. Puedo confirmar esto ejecutando: "docker container ls -a" - esto mostrará que el contenedor "docker_composer_1" ha salido.

Si lo hago, "docker logs docker_composer_1" , puedo ver información sobre lo que sucedió cuando se inició el contenedor y cómo fue el proceso de "instalación del compositor".

¿Qué sucede si cambio el archivo composer.json y necesito instalar una biblioteca adicional?

 docker-compose restart composer

Esto iniciará este contenedor nuevamente, ejecutará la instalación y saldrá.

¿Qué sucede si necesito ejecutar "actualización del compositor" en lugar de "instalación del compositor" ?

Puedo cambiar "instalar" -> "actualizar" en docker-compose.yml y ejecutar "docker-compose restart composer"