Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Conteinerizando Apache, MySQL e PHP com Docker


Se você está trabalhando com PHP e deseja ter um único processo por contêiner, recomendo usar o Nginx e o PHP-FPM, pois é significativamente mais fácil de configurar do que o Apache para esse tipo de configuração (pelo menos é o que eu encontrei).

Você precisa garantir que tenha um volume compartilhado comum para os contêineres Nginx e PHP. Nesse volume você teria seu index.php . Aqui está um exemplo bruto 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"

Você então executaria este comando a seguir no diretório onde o docker-compose.yml arquivo é:
$ docker-compose -p prefix

O motivo do "prefixo" é que você cria um agrupamento de projetos para seus contêineres para não entrar em conflito com outros nomes de contêiner.

Naturalmente, você precisa de uma configuração de site nginx que aponte para /var/www/html . Você terá pouco ou nenhum requisito de configuração para o contêiner php-fpm.

Uma nota lateral sobre a configuração do nginx. O docker-compose.yml acima está incompleto sem a referência do contêiner php dentro da configuração do nginx. Isso ficaria assim (grosseiramente falando):
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
}

Você notará que eu nomeei o contêiner "php7", você poderia realmente adicionar outro contêiner "php5" a este docker-compose.yml e, em seguida, isso permite definir sites nginx que usam diferentes versões do PHP, todos executados na mesma configuração do docker-compose.

Eu aprecio que isso não responda diretamente à sua pergunta, pois não a resolve usando o apache, mas é uma alternativa a ser considerada.

Espero que isso pelo menos lhe dê idéias para ajudar a resolver sua configuração.