Exemple de docker amb Apache, PHP i MariaDB
La revisió el 12:43, 13 gen 2025 per Jordi Binefa (discussió | contribucions) (→Resum dels primers passos)
Contingut
Creació del docker compost
Abans de començar
Assegureu-vos que no teniu funcionant un servidor web (per exemple Apache 2) pel port 80 ni una base de dades pel port 3306 (per exemple MariaDB o MySQL).
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:
En marxa
Creeu el docker. En fucnió 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 ...
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
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 provar l'accés a 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"; // Poseu un usuari de la BD en comptes de 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