Exemple de docker amb nginx, PHP i MariaDB

De binefa.com
(dif) ← Versió més antiga | Versió actual (dif) | Versió més nova → (dif)
Salta a la navegació Salta a la cerca

Creació del docker compost

Abans de començar

Assegureu-vos que no teniu funcionant un servidor web (per exemple Apache 2), o un altre docker, pel port 80 ni 8080. Ni una base de dades, o un altre docker, pel port 3306 (per exemple MariaDB o MySQL).

Podeu aturar el servei emprant systemctl fent servir l'opció stop i podeu fer que no es posi en marxa quan arrenca la màquina virtual amb disable.

jordi@asix2:~$ sudo netstat -atpun
jordi@asix2:~$ sudo netstat -atpun | grep ":80 "
jordi@asix2:~$ sudo netstat -atpun | grep ":8080"
jordi@asix2:~$ sudo netstat -atpun | grep ":3306"
jordi@asix2:~$ sudo netstat -atpun | grep docker

Resum dels primers passos

jordi@asix2:~$ mkdir lemp
jordi@asix2:~$ mkdir lemp/{nginx-conf,php-files}
jordi@asix2:~$ tree lemp
lemp
├── docker-compose.yml
├── nginx-conf
│   └── nginx.conf
├── php-dockerfile
└── php-files
   ├── 00_connect.php
   └── index.php
3 directories, 5 files
jordi@asix2:~$ cd lemp
jordi@asix2:~/lemp$ nano docker-compose.yml
jordi@asix2:~/lemp$ nano php-dockerfile
jordi@asix2:~/lemp$ nano php-files/index.php
jordi@asix2:~/lemp$ nano nginx-conf/nginx.conf
jordi@asix2:~/lemp$ docker-compose up -d

php-dockerfile

FROM php:8.1-fpm

# Installing dependencies for the PHP modules
RUN apt-get update && \
   apt-get install -y zip libzip-dev libpng-dev

# Installing additional PHP modules
RUN docker-php-ext-install mysqli pdo pdo_mysql gd zip

docker-compose.yml

version: '3.8'

# Services
services:
   # PHP Service
   php:
       build:
           dockerfile: php-dockerfile
       volumes:
           - './php-files:/var/www/html'
       depends_on:
           - mariadb
   # Nginx Service
   nginx:
       image: nginx:latest
       ports:
           - 80:80
       links:
           - 'php'
       volumes:
           - './php-files:/var/www/html'
           - './nginx-conf:/etc/nginx/conf.d'
       depends_on:
           - php
   # MariaDB Service
   mariadb:
       image: mariadb:10.9
       environment:
           MYSQL_ROOT_PASSWORD: fjeclot
       volumes:
           - mysqldata:/var/lib/mysql
   # phpMyAdmin Service
   phpmyadmin:
       image: phpmyadmin/phpmyadmin:latest
       ports:
           - 8080:80
       environment:
           PMA_HOST: mariadb
       depends_on:
           - mariadb
# Volumes
volumes:
 mysqldata:

nginx.conf

server {
   listen 80 default_server;
   listen [::]:80 default_server;
    
   server_name localhost;

   root /var/www/html;
   index index.php index.html;

   location / {
       try_files $uri $uri/ /index.php?$args;
   }

   location ~* \.php$ {
       fastcgi_pass php:9000;
       include fastcgi_params;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param SCRIPT_NAME $fastcgi_script_name;
   }
}

index.php

<?php phpinfo(); ?>

En marxa

Creeu el docker. En funció de la vostra xarxa pot durar una mica més dels 62 segons que apareixen a aquesta captura:

jordi@asix2:~/lemp$ docker-compose up -d
[+] Building 62.0s (7/7) FINISHED
...

Podeu accedir-hi anant a http://localhost

Per a poder accedir a la base de dades ens caldrà la IP del seu docker. Per això cal fer els següents passos.

Accés al docker de la base de dades MariaDB

Si el nom del vostre docker MariaDB és lemp-mariadb-1:

docker exec -it lemp-mariadb-1 bash -l

Podem saber la IP interna de la base de dades:

root@ab445bde0f6e:/# ip a

Us ha de sortir una IP similar a 172.18.0.2, potser amb el darrer número canviat

Per accedir a la base dades:

docker exec -it lemp-mariadb-1 bash -l

I un cop dins del docker:

mysql -u root -p
(La contrasenya de root és fjeclot)

Creeu la taula amb la que voleu treballar:

MariaDB [(none)]> CREATE DATABASE aula311;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| aula311            |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.002 sec)

MariaDB [aula311]> exit
Bye

Codi 00_connect.php per a provar l'accés a una taula de la base de dades

<!doctype html>
<HTML lang="ca">
<HEAD>
  <meta http-equiv="Content-type" content="text/html; charset=UTF-8">
  <TITLE>Connexió a la base de dades</TITLE>
</HEAD>
<BODY>
<?php
$prg = "00_connect.php";
// Example (PDO) at https://www.w3schools.com/php/php_mysql_connect.asp
$servername = "172.18.0.2"; // docker inspect lemp-mariadb-1 | grep IPAddress
$username = "root";
$password = "fjeclot"; 

try {
 $conn = new PDO("mysql:host=$servername;dbname=aula311", $username, $password);
 // set the PDO error mode to exception
 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 echo "Connectat a la base de dades.";
} catch(PDOException $e) {
 echo "No es pot connectar. Motiu: " . $e->getMessage();
}
?>
</BODY>
</HTML>

Podeu accedir-hi anant a http://localhost/00_connect.php (Mateix codi al núvol)

Font

How to Set Up Nginx, MariaDB, and PHP with Docker Compose