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/
Contents
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
Administrador de Sistemas, Programador, Docente y ahora resulta que también Blogger (peor es ser tictoker). Más de 20 años de experiencia en computación atendiendo nabos y resolviendo problemas, los cuales si no fuera por estos nabos, no habrían ocurrido en primer lugar. Escribo más que nada sobre tecnología y herramientas en general, además de algunos artículos con opiniones tan subjetivas como irrelevantes, así que si no te gustan, mejor madura y superalo.