Categorías: DockerVirtualizacion

Crear contenedor Docker con CentOS7/Nginx/MariaDB y MultiPHP

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

Entradas recientes

Estadisticas de EasyMySQL

Normalmente, a las estadísticas del blog no le presto demasiada atención, sin embargo, trabajando en…

2 days hace

Nueva pagina de Publicaciones

La idea principal detrás de este blog es marca personal, el blog es para centralizar…

1 week hace

Migrar una maquina virtual desde VirtualBox a KVM

El migrar el disco duro es bastante sencillo como se verá a continuación, la principal…

2 weeks hace

Instalar QEMU/KVM y Virtual Machine Manager

Cuando se trata de virtualización en el escritorio, una de las primeras opciones son sin…

1 month hace

Instalar adaptador WIFI TP-Link AX 1800/ Archer TX20U en Debian y Ubuntu

Siempre he sido un ferviente defensor de una conexión por cable UTP para trabajar por…

2 months hace

Nuevo dominio para el blog, otra vez!!!

Al fin pude recuperar alvarodeleon.com, no es que lo hubiera perdido, fue peor, lo deje…

3 months hace