sql >> Database teknologi >  >> RDS >> Mysql

Containerisering af Apache, MySQL og PHP med Docker

Hvis du arbejder med PHP, og du ønsker at have en enkelt proces pr. container, så anbefaler jeg at bruge Nginx og bruge PHP-FPM, da det er væsentligt nemmere at konfigurere end Apache til denne type opsætning (det er i hvert fald, hvad jeg har fundet).

Du skal sikre dig, at du har en fælles delt volumen til både Nginx- og PHP-beholderne. I det bind ville du have din index.php . Her er et råt eksempel på 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"

Du vil derefter køre følgende kommando i mappen, hvor docker-compose.yml filen er:

$ docker-compose -p prefix

Årsagen til "præfiks" er, at du opretter en projektgruppering for dine containere for ikke at kollidere med andre containernavne.

Naturligvis har du så brug for en nginx-webstedskonfiguration, der peger på /var/www/html . Du har få eller ingen konfigurationskrav til php-fpm-beholderen.

En sidebemærkning vedrørende nginx-konfigurationen. Ovenstående docker-compose.yml er ufuldstændig uden henvisning til php-beholderen i nginx-konfigurationen. Dette ville se sådan ud (groft sagt):

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
}

Du vil bemærke, at jeg kaldte containeren "php7", du kunne faktisk tilføje en anden "php5" container til denne docker-compose.yml og så giver det dig mulighed for at definere nginx-websteder, der bruger forskellige versioner af PHP, som alle kører på den samme docker-compose-opsætning.

Jeg forstår, at dette ikke svarer direkte på dit spørgsmål, da det ikke løser det ved hjælp af apache, men det er et alternativ at overveje.

Forhåbentlig giver dette dig i det mindste ideer til at hjælpe med at løse din opsætning.



  1. Sådan opdaterer du fra vælg med en Join

  2. MySQL-fejl:Kan ikke oprette/skrive til filen '/var/mysqltmp/#sql_1fbd_0.MYI' (fejlkode:13)

  3. Udskriver alle PHP-fejl til databasen, ikke error_log

  4. Hvordan vælger man poster fra dette forhold?