Instalación de Docker y Docker-Compose en Fedora 35 y ejecución de un entorno LAMP
Últimamente andamos probando la distribución de Fedora, en concreto su versión 35 debido a un problema temporal en la actualización a Ubuntu 22.04, por lo que tenemos que empezar a realizar las instalaciones de las aplicaciones habituales con las que trabajamos en nuestros sistemas bajo esta distribución, así que aprovechando este hecho vamos a documentarlo en el blog. Así que en esta entrada vamos a ver cómo instalar docker y docker-compose en Fedora 35 y cómo se crea un entornos LAMP usando docker-compose.
El paso a paso de la instalación
Para empezar con una instalación limpia empezamos a realizar la instalación del paquete dnf-plugins-core que nos abrirá la posibilidad de instalar más paquetes:
sudo dnf -y install dnf-plugins-core
Después añadiremos el repositorio oficial RPM de Docker para Fedora a nuestra instalación:
sudo dnf config-manager \ --add-repo \ https://download.docker.com/linux/fedora/docker-ce.repo
Después instalaremos los paquetes del docker engine, el CLI de docker y el runtime de contenedores containerd:
sudo dnf install docker-ce docker-ce-cli containerd.io
Después arrancaremos el servidor de Docker:
sudo systemctl start docker
Lo colocaremos como servicio en el arranque del sistema:
sudo systemctl enable docker.service sudo systemctl enable containerd.service
Gestionamos los permisos para nuestro usuario al añadirlo al grupo docker:
sudo usermod -aG docker $USER
Y podemos comprobar que funciona correctamente ejecutando nuestro primer contenedor:
sudo docker run hello-world
Con esto ya tendríamos instalado correctamente Docker ahora tendremos que instalar docker compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Ahora cambiaremos los permisos al ejecutable:
sudo chmod +x /usr/local/bin/docker-compose
Y comprobaremos que todo está bien ejecutando la versión:
docker-compose --version
Es posible que tengas que reiniciar para que se apliquen todos los permisos en el sistema o siemplemente cerrar sesión y volver a abrirla.
Instalación de Portainer
Si quieremos instalar portainer para gestionar el entorno deberemos crear un directorio para él por ejemplo dentro de nuestra carpeta de usuario
mkdir portainer cd portainer
Para luego crear en esa carpeta el fichero docker-compose.yaml con este contenido:
version: '3.2' services: portainer: image: portainer/portainer-ce:2.11.1 container_name: portainer ports: - "9000:9000" - "8000:8000" volumes: - ./volumes/portainer_data:/data - /var/run/docker.sock:/var/run/docker.sock restart: always
Para después arrancar el entorno con:
docker-compose up -d
Y ya podríamos entrar y configurarlo en http://localhost:9000/
Creando un entorno LAMP
Con toda el software base instalado ahora es cuando podemos crear un entorno de desarrollo LAMP basado en docker y docker-compose.
Para empezar deberemos descargar el entorno desde este repositorio Git:
git clone https://github.com/sprintcube/docker-compose-lamp.git
Con el entorno ya instalado veremos una carpeta con el nombre docker-compose-lamp a la cual podemos cambiarle el nombre si queremos, pero en nuestro caso lo dejaremos como está y entraremos en ella:
cd docker-compose-lamp/
Ahora deberemos copiar el fichero sample.env que usaremos de plantilla para generar el fichero .env en el que meteremos las configuraciones principales del entorno:
cp sample.env .env
Dentro del fichero .env que acabamos de copiar podremos configurar el entorno empezando por la versión de PHP que queremos usar modificando la variable PHPVERSION y poner la versión que a nosotros nos interese, por defecto viene la versión, con el valor php8:
# Possible values: php54, php56, php71, php72, php73, php74, php8 PHPVERSION=php74
Nosotros la hemos cambiado a la versión 7.4 para instalar un entorno Drupal 7 no compatible con la versión 8 de PHP.
Si por el contrario no queremos usar MySQL y queremos usar MariaDB podremos cambiar la siguiente línea:
# Possible values: mysql57, mysql8, mariadb103, mariadb104, mariadb105, mariadb106 # # For Apple Silicon User: # Please select Mariadb as Database. Oracle doesn't buid their SQL Containers for the arm Architecure DATABASE=mariadb106
Por último lo que deberemos hacer es arrancar el entorno con el comando:
docker-compose up -d
Esto tardará bastante porque necesitará descargar y crear todos los contenedores pero debería dejarnos disponible en el puerto 80 el acceso a nuestro sistema PHP:
Resolución de problemas
Para resolver la mayor parte de los problemas de levantar el entorno de trabajo como que algún contenedor no arranca problema con el puerto que está ocupado: cambia el puerto en el .env para ese contenedor
Arquitectura del entorno
Hemos comentado poco lo que arrancará en el entorno pero dispone de los 4 contenedores principales en el desarrollo:
- PHP: lamp-php74 -> http://localhost:80/
- MySQL: lamp-mysql8 -> localhost -> 3306 -> usuario: docker -> password: docker -> database : docker
- PhpMyAdmin: lamp-phpmyadmin -> http://localhost:8080/
- Redis: lamp-redis -> localhost -> 6379
Creating lamp-mysql8 ... done Creating lamp-redis ... done Creating lamp-phpmyadmin ... done Creating lamp-php74 ... done
Parada del entorno
Si no queremos gastar recursos o los necesitamos para otros fines nos bastará con parar el entorno ejecutando en la carpeta del proyecto el siguiente comando:
docker-compose down
Estructura de Carpetas y Ficheros
Dentro de la carpeta nos encontraremos con la siguientes estructura:
- bin: ficheros Dockerfile de php y mariadb y mysql
- config: directorio con los ficheros de configuración del entorno
- initdb: para colocar scripts de creación de la BBDD
- php: para el php.ini de PHP
- vhosts: para el default.conf del servidor web
- data: datos de la base de datos
- docker-compose.yml: fichero de definición de los contenedores a arrancar
- .env: fichero de configuración principal del entorno
- logs: directorio de logs del servidor web y la base de datos
- www: directorio del proyecto php
Para empezar a trabajar bastará meternos en el directorio www copiar nuestro código php y meter el esquema de la base de datos en la base de datos. Y empezar a codificar.
Importación de la BBDD
Para importar la bbdd bastará con copiar el fichero .sql a la carpeta config/initdb, parar los servicios y borrar el contenido de la carpeta de datos de la BBDD y volver a arrancar el entorno:
cp fichero.sql config/initdb chmod 777 config/initdb/fichero.sql docker-compose down rm -rf data/mysql/* docker-compose up -d
Conclusiones
Como has visto aunque un poco laborioso es muy sencillo montar un entorno de desarrollo lamp con Linux. Esperamos que os haya gustado 🙂
Comments