Rularea unei aplicații PHP într-un container

  • 1 minute de citit
  • 2 exemple de cod în YAML

Disponibil și în English

Salut 👋,

În articolul de luna aceasta vă arăt cum să rulați o aplicație PHP într-un container.

Sunt un mare fan al forumurilor online, iar majoritatea software-ului pentru forumuri este scris în PHP. Ca să le evaluez rapid, am vrut să le pot rula și instala local.

Am ajuns la acest fișier docker-compose

services:  nginx:    build:      context: ./      dockerfile: nginx.dockerfile    ports:      - "8080:80" # schimbă portul 10080 cu orice alt port    volumes:      - ./config/nginx/conf.d:/etc/nginx/conf.d:z      - ./.data/nginx:/var/log/nginx:z      - application:/var/www/html:z      - composer:/root/.composer:z  php:    build:      context: ./      dockerfile: php83.dockerfile    volumes:      - ./config/php.ini:/usr/local/etc/php/php.ini:z      - application:/var/www/html:z      - composer:/root/.composer:z  database:    image: "postgres:latest"    ports:      - 15432:5432    environment:      POSTGRES_PASSWORD: denis      POSTGRES_USER: batman    volumes:      - ./.data/postgres/:/var/lib/postgresql/data/:z  maria:    image: mariadb    restart: always    ports:      - 13306:3306    environment:      MARIADB_ROOT_PASSWORD: example    volumes:      - ./.data/maria/:/var/lib/mysql:zvolumes:    composer:    application:      driver: local      driver_opts:        type: none        device: ./application        o: bind

Tot ce trebuie să faceți este să puneți aplicația PHP în directorul ./application și să rulați:

podman compose up # sau docker compose up

Fișierul configurează următoarele componente:

  • php - Runtime-ul PHP.
  • nginx - Serverul web Nginx care servește cererile. Îl puteți personaliza editând ./config/nginx/conf.d/default.conf
  • database - Rulează o bază de date PostgresSQL care își păstrează datele în directorul local ./.data.
  • maria - Rulează o bază de date MariaDB care își păstrează datele în directorul local ./.data.

Este puțin probabil să aveți nevoie de ambele baze de date pornite în același timp, nu ezitați să ștergeți una dintre ele. Unele aplicații PHP funcționează cu PostgresSQL, iar altele funcționează doar cu MariaDB/MySQL.

Vă mulțumesc că ați citit. Dacă aveți întrebări, nu ezitați să mă contactați pe @mastodon.

Apropo, folosesc această metodă pentru a găzdui forumul meu.

Codul complet este disponibil pe forge: https://gitlab.nuculabs.dev/dnutiu/containerized-php-application