informatica:sistemas_operativos:virtualizacion:docker:docker_compose:lemp
¡Esta es una revisión vieja del documento!
Tabla de Contenidos
Docker Compose: nginx + PHP + MariaDB
Despliegue de una arquitectura multicontenedor compuesta por un servidor web Ngin, un intérprete de PHP y un motor de base de datos MariaDB
Imágenes
- Imagen Nginx: https://hub.docker.com/_/nginx
- Imagen PHP: https://hub.docker.com/_/php
- Imagen MariaDB: https://hub.docker.com/_/mariadb
- Imagen de Adminer: https://hub.docker.com/_/adminer
La imagen de Adminer no es necesaria, aunque la incluyo por la comodida de tener una aplicación web para gestionar la base de datos y así no depender de tener instalado un cliente de base de datos
Ficheros
La estructura sería la siguiente:
├── app ├── docker │ ├── nginx │ │ ├── site.conf │ ├── php │ │ ├── Dockerfile ├── docker-compose.yml
app: directorio que va a servir nginx.nginx/site.conf: configuración del virtual host de nginx.php/Dockerfile: Dockerfile para adaptar la imagen de PHP a nuestro gusto.docker-compose.yml
docker-compose.yml
version: '3' services: webserver: image: nginx:alpine # For different app you can use different names. (eg: ) # container_name: web-server volumes: # app source code - ./app:/usr/share/nginx/html - ./config/nginx/site.conf:/etc/nginx/conf.d/default.conf # db data persistence ports: - 8080:80 php: # image: php:fpm-alpine build: . volumes: - ./app:/usr/share/nginx/html database: image: mariadb:focal environment: - MYSQL_ROOT_PASSWORD=abcd1234. adminer: image: adminer restart: always ports: - 8123:8080
site.conf
Configuración del virtual host de nginx.
server {
listen 80;
index index.php index.html;
server_name localhost;
root /usr/share/nginx/html/;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
El nombre del host que se le pasa a fastcgi_pass debe coincidir con lo establecido en container_name.
Dockerfile
En este fichero modificaremos la imagen de base de PHP para adaptarlo a nuestros requisitos:
FROM php:fpm-alpine # Modificamos UID y GID del usuario www-data para que coincida con el # del usuario que ejecuta el servidor web en el contenedor con nginx # Si no fuese Alpine, se podría hacer con `usermod -u <UID> www-data` # Más info: # https://stackoverflow.com/questions/36824222/how-to-change-the-nginx-process-user-of-the-official-docker-image-nginx RUN deluser www-data && adduser -DH -h /home/www-data -s /sbin/nologin -u 101 www-data RUN docker-php-ext-install mysqli pdo_mysql
informatica/sistemas_operativos/virtualizacion/docker/docker_compose/lemp.1621166834.txt.gz · Última modificación: por tempwin
