Docker – apache php7 y postgresql

Mediante dos contenedores levantar un servidor apache configurado con Php7 y un contenedor para postgresql con persistencia mediante un volumen de datos:

Preparar la imagen con apache y php7

Estructura del directorio

Crear el archivo Dockerfile

FROM webdevops/php-apache:alpine
RUN apk update && apk add build-base

RUN apk add php7-pdo_pgsql

A partir de una imagen de  «webdevops/php-apache:alpine», procedemos  a actualizar los paquetes (2) y añadir compatibilidad con php7 (3)

Crear la imagen

docker build -t apache7php .

Crear docker-compose.yml

version: '3'
services:
  db:
      image: postgres:latest
      ports:
          - "5432:5432"
      networks:
          - overlay
      environment:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: 123456
      volumes:
          - ./sql:/sql
          - postgres-data:/var/lib/postgresql/data

  web:
      image: apache7php:latest
      ports:
          - "80:80"
      volumes:
          - ../intranet:/app
          - ./php/02_pdo_pgsql.ini:/etc/php7/conf.d/02_pdo_pgsql.ini
          - ./http/vhost.conf:/opt/docker/etc/httpd/vhost.conf
      links:
        - db
      networks:
          - overlay

volumes:
  postgres-data:

networks:
  overlay:

(1) versión de composer

(2) Area de servicios

(3) Etiqueta para contenedor de bdd

(4) Imagen de referencia

(5) puertos

(7) Es necesario establecer una red (característica de la versión 3)

(8) Variable de ambiente

(12) Volumenes que comparte

(13) Carpeta «sql» para compartir respaldos de las bdd

(14) volumen para persistencia de las bdd

(16) Etiqueta para contenedor de servidor web

(17) Referencia a imagen recién creada

(18) Puertos

(20) Volumenes

(21) Carpeta que sera publicada en el sevidor

(22) Archivo de configuración que habilita pdo_pgsql

(23) Archivo de configuración para servidores virtuales

(24) Referencia a contenedor de bdd

(26) Referencia a red

(29) Area de volumenes

(30) Volumen para persistencia de bases de datos

(32) Area para redes

Archivos de configuración

02_pdo_pgsql.ini

extension=pdo_pgsql.so

vhost.conf

#######################################
# Vhost
#######################################

<VirtualHost *:80>
  ServerName docker.vm
  ServerAlias *.vm
  DocumentRoot "/app/public"

  UseCanonicalName Off

  <IfVersion < 2.4>
    Include /opt/docker/etc/httpd/vhost.common.d/*.conf
  </IfVersion>
  <IfVersion >= 2.4>
    IncludeOptional /opt/docker/etc/httpd/vhost.common.d/*.conf
  </IfVersion>

</VirtualHost>

<VirtualHost *:443>
  ServerName docker.vm
  ServerAlias *.vm
  DocumentRoot "/app"

  UseCanonicalName Off

  <IfVersion < 2.4>
    Include /opt/docker/etc/httpd/vhost.common.d/*.conf
  </IfVersion>
  <IfVersion >= 2.4>
    IncludeOptional /opt/docker/etc/httpd/vhost.common.d/*.conf
  </IfVersion>

  Include /opt/docker/etc/httpd/vhost.ssl.conf
</VirtualHost>

 Ejecutar

$ docker-compose up

Editar JAVA_HOME

Error

./wso2server.sh
Error: JAVA_HOME is not defined correctly.
CARBON cannot execute java

Configuración

Editar /etc/profile

sudo vim /etc/profile

Incluir al final del archivo

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin/

Asegurarse del nombre java-8-openjdk-amd64 para linuxmint, java-8-openjdk para manjaro

Actualizar variable

$ source /etc/profile

no funciona con fish por lo que hay que cambiarse a bash