Hace un tiempo publicaba un articulo sobre como crear un contenedor docker con múltiples versiones de PHP, para facilitar la instalación de un contenedor docker con todo previamente instalado y configurado he creado la siguiente imagen:

https://hub.docker.com/r/alvarodeleon/centos7-nginx-multiphp/

Contenido

El contenedor contiene entre otras cosas Nginx + MariaDB y las siguientes versiones de PHP:

  • PHP 5.4
  • PHP 5.5
  • PHP 5.6
  • PHP 7.0
  • PHP 7.1
  • PHP 7.2
  • PHP 7.3

Como se ejecuta

Ejecución básica:

docker run -it --privileged --hostname="server" -e "container=docker" --cap-add SYS_ADMIN \
--tmpfs /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
-p 22:22 -p 80:80 -p 3306:3306 \
--name NombreContenedor "alvarodeleon/centos7-nginx-multiphp" "/usr/sbin/init"

A lo anterior deberíamos agregar para compartir entre nuestra pc y docker una carpeta donde colocamos nuestro proyecto.

A mi en lo personal me gusto dejar fuera del contenedor la carpeta del proyecto, la carpeta de configuración de Nginx y el almacén de datos de la base de datos.

A su vez dejó otras dos carpetas disk y backup para tener un lugar para hacer respaldos y como carpeta de intercambio y que no sea la del proyecto en si mismo.

docker run -it --privileged --hostname="server" -e "container=docker" --cap-add SYS_ADMIN \
--tmpfs /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
-p 22:22 -p 80:80 -p 3306:3306 \
-v "/home/usuario/Proyecto/html:/var/www/html" \
-v "/home/usuario/Proyecto/nginx:/etc/nginx/conf.d" \
-v "/home/usuario/Proyecto/mysql/:/var/lib/mysql" \
-v "/home/usuario/Proyecto/backup/:/backup" \
-v "/home/usuario/Proyecto/disk/:/mnt/disk" \
--name NombreContenedor "alvarodeleon/centos7-nginx-multiphp" "/usr/sbin/init"

Para facilitar la creación de contenedores utilizo un script, podemos guardarlo en un fichero y ejecutarlo cada vez que queramos crear un contenedor:

#!/bin/bash

mkdir -p $2/{html,mysql,backup,disk,nginx}

docker run -it --privileged --hostname="server" -e "container=docker" --cap-add SYS_ADMIN \
--tmpfs /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
-p 22:22 -p 80:80 -p 3306:3306 \
-v "$2/html:/var/www/html" \
-v "$2/nginx:/etc/nginx/conf.d" \
-v "$2/mysql/:/var/lib/mysql" \
-v "$2/backup/:/backup" \
-v "$2/disk/:/mnt/disk" \
--name $1 "alvarodeleon/centos7-nginx-multiphp" "/usr/sbin/init"

Podemos guardar lo anterior en un archivo por ejemplo llamado new_docker y le damos permisos de ejecución

sudo nano /usr/sbin/new_docker
sudo chmod +x /usr/sbin/new_docker

Simplemente ejecutamos lo siguiente pasandole un nombre de como se llamara el contenedor y una ruta de donde queremos colocar el proyecto, esto creara las carpetas y configurara el contenedor para utilizar esa carpeta:

new_docker NombreDelContenedor /ruta/del/proyecto

Esto arrancara el contenedor automaticamente, luego cuando queramos arrancar el contenedor nuevamente hacemos lo siguiente:

docker start NombreDelContenedor && docker attach NombreDelContenedor

Datos de Acceso

Linux

Al ejecutar el contenedor el sistema booteara y solicitara un usuario y contraseña, los datos de acceso al sistema son:

Usuario: root
Password: docker

Base de datos MySQL/MariaDB

El usuario root de la base de datos está vacío por lo que podrán ingresar sin contraseña.

Configuración de Nginx

En el directorio /etc/nginx/conf.d.example/ encontraras archivos de configuración de Nginx para poder dar de alta dominios.

Problemas para iniciar la base de datos

Si montamos la base de datos fuera del contenedor la primera vez que se ejecute el contenedor va a dar error ya que el almacén de datos estará vacío, por eso ejecutamos

mysql_repair

phpMyAdmin

Supongamos que tenemos configurado el dominio pruebas.lan y queremos ingresar a phpMyAdmin por la url http://pruebas.lan/phpmyadmin

Para eso buscamos donde esta ubicada la carpeta de nuestro sitio, para el ejemplo supongamos que es /var/www/pruebas.lan/ entonces creamos un enlace simbólico de la siguiente manera:

ln -s /usr/share/phpMyAdmin/ /var/www/pruebas.lan/phpmyadmin

Personalizar la instalación

Si por alguna razón no les sirve el contendor tal cual esta pueden personalizar la instalación mediante la siguiente guia para crear un sistema básico

https://blog.alvarodeleon.com/centos7-with-systemd/

Y a continuación en el contenedor creado anteriormente, pueden descargar el siguiente repositorio y personalizar el script setup-httpd.sh para agregar o quitar lo que quieran.

https://github.com/alvarodeleon/httpd-setup

Leave a Reply

Your email address will not be published. Required fields are marked *

Discover more from Alvaro De León

Subscribe now to keep reading and get access to the full archive.

Continue reading