sql >> Database >  >> RDS >> Mysql

Apache, MySQL en PHP containeriseren met Docker

Als je met PHP werkt en je wilt een enkel proces per container, dan raad ik je aan om Nginx te gebruiken en PHP-FPM te gebruiken, omdat het aanzienlijk eenvoudiger te configureren is dan Apache voor dit type setup (dat is tenminste wat ik heb gevonden).

Je moet ervoor zorgen dat je een gemeenschappelijk gedeeld volume hebt voor zowel de Nginx- als de PHP-containers. In dat volume zou je je index.php . hebben . Hier is een grof voorbeeld docker-compose.yml:

services:
  php7:
    image: "php:7.1.10-fpm"
    container_name: "prefix-php"
    volumes:
      - "./your/local/dir:/var/www/html"
  nginx:
    image: "nginx:1.13.6"
    container_name: "prefix-nginx"
    ports:
      - "80:80"
      - "443:443"
    links:
      - "php7"
    volumes:
      - "./your/local/dir:/var/www/html"

U zou dan dit volgende commando uitvoeren in de map waar de docker-compose.yml bestand is:

$ docker-compose -p prefix

De reden voor "prefix" is dat u een projectgroepering voor uw containers maakt om niet te botsen met andere containernamen.

Natuurlijk heb je dan een nginx-siteconfiguratie nodig die verwijst naar /var/www/html . U heeft weinig tot geen configuratievereisten voor de php-fpm-container.

Een kanttekening met betrekking tot de nginx-configuratie. De bovenstaande docker-compose.yml is onvolledig zonder de verwijzing naar de php-container in de nginx-configuratie. Dit zou er ongeveer zo uitzien (grofweg):

server {
    listen 80 default_server;

    # ...more config, like root, index, server_name, etc

    location ~* \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass prefix-php:9000; # Note the container name here.
        fastcgi_index index.php;
        fastcgi_hide_header X-Powered-By;
        fastcgi_read_timeout 300s;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

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

    # ...more rules
}

Je zult merken dat ik de container "php7" heb genoemd, je zou eigenlijk nog een "php5" container kunnen toevoegen aan deze docker-compose.yml en dan kun je nginx-sites definiëren die verschillende versies van PHP gebruiken die allemaal op dezelfde docker-compose-setup draaien.

Ik waardeer het dat dit je vraag niet direct beantwoordt, omdat het het niet oplost met apache, maar het is een alternatief om te overwegen.

Hopelijk geeft dit je in ieder geval ideeën om je setup op te lossen.



  1. MySQL Azure verbinden met Java

  2. SQL-query om dubbele waarden samen te vouwen op datumbereik

  3. Problemen met variabele geheugentoekenningen in SQL Server oplossen

  4. Hoe MySQL-tijd naar UNIX-tijdstempel te converteren met PHP?