Nuestros sitios web usan WordPress contenido en imágenes de Docker. Pero algunos sitios pueden necesitar extensiones de PHP, como por ejemplo SOAP, para interactuar con servicios web. ¿Cómo los habilitamos en los contenedores que los necesiten?
Enlaces útiles
En el Docker Hub, mencionan que se debe hacer a nivel de la imágen base de PHP. También hay un ejemplo de cómo instalar una extensión de PHP definiendo un Dockerfile propio. Bien, tendremos que compilar una nueva imágen…
Extensiones PHP
Para un plugin de pago on-line, las extensiones que necesitamos son:
- PHP (>= 5.6)
- OpenSSL (>= 1.0.1)
- SimpleXML
- DOM (>=2.7.8)
- Soap (el plugin no instala porque no la tengo)
¿Cómo sé cuáles ya tengo?
# php -m [PHP Modules] dom openssl SimpleXML ...
Parece que la única que me falta es SOAP, aunque tengo que verificar las versiones.
# php -i phpinfo() PHP Version => 7.4.11 OpenSSL support => enabled OpenSSL Library Version => OpenSSL 1.1.1d 10 Sep 2019 SimpleXML support => enabled Schema support => enabled DOM/XML => enabled DOM/XML API Version => 20031129 libxml Version => 2.9.4
O sea que solamente me falta la extensión SOAP. Bien, veamos cómo se agrega.
Extensión de PHP para SOAP
En la página de PHP, sólo dice
Para habilitar el soporte de SOAP, se ha de configurar PHP con –enable-soap.
Significa que el módulo es parte del core de PHP, por ende sólo habría que activarlo con
docker-php-ext-install soap
Compilarlo en Docker
Según esta entrada en Stack Overflow, al menos en las imágenes de PHP, para habilitar el módulo SOAP se necesita además instalar libxml2-dev que trae las librerías necesarias. Como las de WordPress se basan en PHP esto aplicaría también.
Así es que nuestro Dockerfile será:
FROM wordpress:latest
RUN apt-get update -y \
&& apt-get install -y libxml2-dev \
&& apt-get clean -y \
&& docker-php-ext-install soap
Luego lo compilamos así:
docker build -t numericalatina/wordpress:soap .
Y ahora funciona.