FeaturedNOTICIAS

Cómo usar Docker para contener PHP y Apache – CloudSavvy IT


Los contenedores de Docker hacen que su aplicación sea portátil en todos los entornos. Una vez que tenga una imagen de contenedor, puede usarla siempre que Docker esté disponible. A continuación, se explica cómo contener una aplicación web PHP utilizando el servidor Apache.

Usaremos la imagen oficial de PHP Docker como base. Las variantes vienen preconfiguradas con Apache, por lo que no necesitará instalar el servidor web usted mismo. La imagen base de PHP también ofrece utilidades útiles para administrar extensiones de PHP.

Creando un Dockerfile

Las imágenes de Docker se crean a partir de un archivo Dockerfile. Este archivo contiene las instrucciones que se utilizan para crear la imagen. Las instrucciones incluyen COPY, para copiar archivos y carpetas en el contenedor e RUN, que ejecuta un comando dentro del contenedor.

Puede hacer que un sitio PHP simple funcione simplemente copiando sus archivos en una imagen basada en php:8.0-apache.

FROM php:8.0-apache
WORKDIR /var/www/html

COPY index.php index.php
COPY src/ src
EXPOSE 80

Esto Dockerfile el toma index.php es src de nuestro directorio de trabajo y los copia en la raíz del documento de Apache. Ahora puede crear la imagen e iniciar un contenedor a partir de ella. Verá que su sitio es servido por Apache.

docker build -t my-php-site:latest .
docker run -d -p 80:80 my-php-site:latest

Las imágenes de PHP Docker tienen la raíz del documento de Apache en la ubicación predeterminada de Debian de /var/www/html. La WORKDIR instrucciones en Dockerfile significa que los siguientes comandos se ejecutarán dentro de la raíz del documento.

Apache se expone al puerto 80 del servidor web predeterminado. EXPOSE directiva en Dockerfile indica esto. Al exponer explícitamente el puerto, puede usar la extensión -P bandera con docker run para vincular automáticamente un puerto de host aleatorio al puerto 80 del contenedor.

Personalización de la configuración de Apache

Las imágenes oficiales de PHP / Apache están basadas en Debian. Puedes usar el archivo apt administrador de paquetes para agregar el software adicional que necesita.

También tiene acceso completo a las herramientas integradas de Apache. puedes usar a2enmod/a2dismod para gestionar módulos y a2ensite/a2dissite para interactuar con hosts virtuales.

El archivo de configuración de Apache predeterminado es /etc/apache2/apache2.conf. Agregue líneas a este archivo, o reemplácelo por completo, para extender la configuración de Apache.

Un cambio que siempre vale la pena hacer es configurar Apache explícitamente ServerName. Esto detiene la advertencia «No se puede determinar de manera confiable el nombre del servidor» que suele aparecer en los registros del contenedor.

Por lo general, también querrá agregar su propio host virtual Apache. Esto le permite establecer una configuración personalizada además de la de Apache. 000-default el sitio proporciona. A continuación, le indicamos cómo realizar esos cambios.

COPY my-apache-site.conf /etc/apache2/sites-available/my-apache-site.conf

RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf &&
    a2enmod rewrite &&
    a2dissite 000-default &&
    a2ensite my-apache-site &&
    service apache2 restart

Este ejemplo deshabilita el sitio predeterminado, habilita el sitio personalizado y reinicia Apache para aplicar los cambios. La mod_rewrite el módulo también está habilitado, lo que permite el uso de Rewrite directivas en .htaccess Archivo. Es posible que también desee habilitar otros módulos, como headers si su configuración interactuará con los encabezados de respuesta.

Agregar extensiones PHP

Las imágenes de PHP Docker vienen con utilidades de administración de extensiones integradas. Algunas extensiones están habilitadas de forma predeterminada; puede verificar lo que está disponible ejecutando php -m dentro de un contenedor en funcionamiento.

Se pueden instalar muchas extensiones comunes usando docker-php-ext-install:

docker-php-ext-install pdo_mysql

Algunas extensiones deben configurarse antes de poder instalarlas. puedes usar docker-php-ext-configure para realizar la configuración previa a la instalación. Las opciones disponibles varían según la extensión. Lea la página de manual de la extensión para determinar los indicadores que puede proporcionar.

RUN docker-php-ext-configure gd --with-jpeg=/usr/include/ &&
    docker-php-ext-install gd

También puede utilizar extensiones distribuidas a través de PECL. Estas extensiones requieren un procedimiento de instalación de dos pasos. Primero instale el paquete PECL, luego use docker-php-ext-enable para registrar la extensión con su instalación de PHP.

RUN apt-get install -y libmcached-dev zlib1g-dev &&
    pecl install memcached-3.1.5 &&
    docker-php-ext-enable memcached

Configuración PHP

Las imágenes de Docker están preconfiguradas para cargar los archivos de configuración de PHP que se encuentran en /usr/local/etc/php/conf.d. Agrega el tuyo .ini archivos en este directorio. PHP incluirá su contenido en tiempo de ejecución, sobrescribiendo cualquier valor existente. Ésta es la forma recomendada de ampliar la configuración predeterminada.

La ruta del directorio de configuración puede cambiar en el futuro. Puede obtener su posición actual utilizando el $PHP_INI_DIR Variable ambiental. Actualmente resuelve /usr/local/etc/php/conf.d.

Usando Composer

Composer no está disponible de forma predeterminada. Composer es un esfuerzo de la comunidad que existe independientemente de PHP. Debe instalarlo manualmente si desea usarlo en un contenedor Docker.

La mejor manera de usar Composer en sus compilaciones es hacer referencia a la imagen de Docker de la herramienta a través de una compilación por fases. Usar COPY --from para llevar el binario Composer a su contenedor PHP; luego puede usar Composer normalmente para instalar las dependencias de su proyecto.

COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
COPY composer.json composer.json
COPY composer.lock composer.lock
RUN composer install --no-dev

El uso de este enfoque reduce la complejidad. No es necesario descargar y ejecutar el script de instalación de Composer. Refiriéndose a composer:2, Docker extraerá la imagen y luego copiará el archivo binario de Composer.

Script de punto de entrada personalizado

Es posible que deba utilizar un script de punto de entrada personalizado si desea realizar migraciones de aplicaciones antes de que comience el tiempo de ejecución del servidor principal. Puede anular el contenedor ENTRYPOINT para usar su secuencia de arranque.

Puede hacer que la ejecución del contenedor continúe normalmente ejecutando apache2-foreground. Esto ejecutará Apache en primer plano, evitando que el contenedor salga después de que se complete la secuencia de comandos del punto de entrada.

ENTRYPOINT ["bash", "/Docker.sh"]

Docker.sh Contenido:

php app.php my-migration-command    # run migrations
service cron start                  # start some services
exec apache2-foreground             # main execution

Conclusión

Dockerizar un servicio web PHP es simple cuando se usan imágenes oficiales. Puede configurar fácilmente Apache y PHP con extensiones personalizadas y archivos de configuración.

Es muy probable que encuentre dificultades al intentar utilizar complementos de la comunidad de terceros, como Composer. Estos no se incluyen de forma predeterminada, por lo que deberá utilizar compilaciones de Docker de varios pasos o procedimientos de instalación manual.

El uso de Docker brinda a su aplicación versatilidad en cuanto a cómo y dónde se implementa. Con su imagen, puede comenzar una instalación funcional de su sitio usando solo docker build es docker run en tu terminal.

TE INTERESA>>  Craig de Southern Charm criticado por su reacción a la confrontación de Naomie

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Botón volver arriba