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:

http://localhost/

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

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. ACEPTAR

Aviso de cookies