Dockerfile para Apache con PHP

 Dockerfile para Apache con PHP y phpMyAdmin. Aquí tienes varias opciones:

Opción 1: Dockerfile desde Ubuntu (Más control)

dockerfile
# Dockerfile para Apache con PHP y phpMyAdmin
FROM ubuntu:20.04

# Evitar preguntas interactivas durante la instalación
ENV DEBIAN_FRONTEND=noninteractive

# Actualizar e instalar Apache, PHP y extensiones necesarias
RUN apt-get update && \
    apt-get install -y \
    apache2 \
    php \
    php-mysql \
    php-curl \
    php-json \
    php-mbstring \
    php-xml \
    php-zip \
    php-gd \
    php-gettext \
    wget \
    unzip && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Descargar e instalar phpMyAdmin
RUN wget https://files.phpmyadmin.net/phpMyAdmin/5.1.1/phpMyAdmin-5.1.1-all-languages.zip -O /tmp/phpmyadmin.zip && \
    unzip /tmp/phpmyadmin.zip -d /tmp/ && \
    mv /tmp/phpMyAdmin-5.1.1-all-languages /var/www/html/phpmyadmin && \
    rm /tmp/phpmyadmin.zip

# Crear directorio de configuración para phpMyAdmin
RUN mkdir -p /var/www/html/phpmyadmin/tmp && \
    chmod 777 /var/www/html/phpmyadmin/tmp

# Copiar archivo de configuración personalizado para phpMyAdmin
COPY config.inc.php /var/www/html/phpmyadmin/

# Habilitar módulos de Apache
RUN a2enmod rewrite

# Exponer puerto 80
EXPOSE 80

# Comando para iniciar Apache
CMD ["apache2ctl", "-D", "FOREGROUND"]

Opción 2: Usando imagen oficial de PHP-Apache (Recomendada)

dockerfile
# Usar imagen oficial de PHP con Apache
FROM php:8.0-apache

# Instalar dependencias del sistema y extensiones de PHP
RUN apt-get update && \
    apt-get install -y \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip \
    wget \
    && docker-php-ext-install \
    pdo_mysql \
    mysqli \
    gd \
    mbstring \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Habilitar mod_rewrite de Apache
RUN a2enmod rewrite

# Descargar e instalar phpMyAdmin
RUN wget https://files.phpmyadmin.net/phpMyAdmin/5.1.1/phpMyAdmin-5.1.1-all-languages.zip -O /tmp/phpmyadmin.zip && \
    unzip /tmp/phpmyadmin.zip -d /var/www/html/ && \
    mv /var/www/html/phpMyAdmin-5.1.1-all-languages /var/www/html/phpmyadmin && \
    rm /tmp/phpmyadmin.zip

# Crear directorio temporal para phpMyAdmin
RUN mkdir -p /var/www/html/phpmyadmin/tmp && \
    chmod 777 /var/www/html/phpmyadmin/tmp

# Copiar configuración personalizada
COPY config.inc.php /var/www/html/phpmyadmin/

# Cambiar permisos del directorio web
RUN chown -R www-data:www-data /var/www/html

# Exponer puerto
EXPOSE 80

# Comando por defecto (ya viene en la imagen base)

Archivo de configuración para phpMyAdmin

Crea un archivo config.inc.php en el mismo directorio que el Dockerfile:

php
<?php
/* Servidor: base de datos MySQL */
$i = 0;
$i++;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['host'] = 'db';  // Nombre del servicio de base de datos si usas Docker Compose
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = true;

/* Configuración general */
$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';
$cfg['PmaAbsoluteUri'] = '/phpmyadmin/';
$cfg['TempDir'] = '/var/www/html/phpmyadmin/tmp';

/* Configuración de sesión */
$cfg['SessionSavePath'] = '/var/www/html/phpmyadmin/tmp';

/* Configuración de seguridad */
$cfg['blowfish_secret'] = 'mi_clave_secreta_muy_larga_aqui_1234567890';
?>

Opción 3: Con Docker Compose (Recomendado para desarrollo)

Crea un archivo docker-compose.yml:

yaml
version: '3.8'

services:
  web:
    build: .
    ports:
      - "8080:80"
    volumes:
      - ./html:/var/www/html
      - ./phpmyadmin-config.php:/var/www/html/phpmyadmin/config.inc.php
    depends_on:
      - db
    environment:
      - PMA_HOST=db

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: myuser
      MYSQL_PASSWORD: mypassword
    volumes:
      - db_data:/var/lib/mysql
    ports:
      - "3306:3306"

volumes:
  db_data:

.dockerignore

Crea un archivo .dockerignore:

text
.git
.gitignore
README.md
docker-compose.yml
*.log
.DS_Store

Comandos para construir y ejecutar

Para la Opción 1 o 2:

bash
# Construir la imagen
docker build -t apache-phpmyadmin .

# Ejecutar el contenedor
docker run -d -p 8080:80 --name my-apache-phpmyadmin apache-phpmyadmin

Para la Opción 3 (Docker Compose):

bash
# Iniciar todos los servicios
docker-compose up -d

# Ver logs
docker-compose logs -f

# Detener servicios
docker-compose down

Estructura de archivos recomendada

text
proyecto/
├── Dockerfile
├── docker-compose.yml
├── config.inc.php
├── .dockerignore
└── html/
    └── index.php (opcional)

Verificación

Una vez ejecutado, puedes acceder a:

Comentarios

Entradas más populares de este blog

ejercicios-Crear Carpeta y Archivo de Texto en Ubuntu

Instalar Docker en Ubuntu Server usando docker.io

Tutorial de Carpetas y Directorios en Ubuntu Linux