Mysql
 sql >> база данни >  >> RDS >> Mysql

Контейнеризиране на Apache, MySQL и PHP с Docker

Ако работите с PHP и искате да имате един процес на контейнер, тогава препоръчвам да използвате Nginx и да използвате PHP-FPM, тъй като е значително по-лесно за конфигуриране от Apache за този тип настройка (поне това е, което аз намерих).

Трябва да се уверите, че имате общ споделен обем както за Nginx, така и за PHP контейнерите. В този том ще имате своя index.php . Ето един груб пример 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"

След това ще изпълните следната команда в директорията, където docker-compose.yml файлът е:

$ docker-compose -p prefix

Причината за „префикс“ е, че създавате групиране на проекти за вашите контейнери, за да не влизат в конфликт с имената на други контейнери.

Естествено тогава ви е необходима конфигурация на сайта на nginx, която сочи към /var/www/html . Ще имате почти никакви изисквания за конфигурация за php-fpm контейнера.

Странична бележка относно конфигурацията на nginx. Горният docker-compose.yml е непълен без препратката към php контейнера в конфигурацията на nginx. Това би изглеждало така (грубо казано):

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
}

Ще забележите, че нарекох контейнера "php7", всъщност бихте могли да добавите друг контейнер "php5" към този docker-compose.yml и след това това ви позволява да дефинирате nginx сайтове, които използват различни версии на PHP, всички работещи на една и съща настройка на docker-compose.

Оценявам, че това не дава директен отговор на въпроса ви, тъй като не го решава с помощта на apache, но е алтернатива, която трябва да обмислите.

Надяваме се, че това поне ви дава идеи, които да ви помогнат да решите настройката си.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL игнорира ли нулеви стойности при уникални ограничения?

  2. Достъп до MySQL на MAMP от терминала

  3. MySql Тригери за изтриване на дъщерни записи в същата таблица

  4. Как мога да задам максимален брой редове в MySQL таблицата?

  5. Шифроване с PHP Mcrypt и декриптиране с MySQL aes_decrypt?