3 min to read
Criando contêiner Docker NGINX com PHP
Neste guia rápido irei mostrar como criar um contêiner passo a passo com NGINX e PHP 7.2.
Para iniciarmos iremos criar um arquivo Dockerfile que se baseará na imagem PHP Oficial Alpine Linux que temos no Docker Hub:
Dockerfile - 1ª linha
FROM php:7.2-fpm-alpine3.11
Como a imagem já contém o PHP-FPM 7.2 precisaremos apenas instalar o NGINX e um Supervisor de processos simultâneos com o seguinte linha:
Dockerfile - 2ª linha
RUN apk add --no-cache nginx supervisor
Precisamos agora criar um arquivo por nome nginx.ini para montarmos as configurações necessárias para o supervisor subir todos os processos corretamente:
```config
[program:nginx]
command=/usr/sbin/nginx -g "pid /run/nginx.pid; daemon off;"
autostart=true
autorestart=true
startretries=5
numprocs=1
startsecs=0
process_name=%(program_name)s_%(process_num)02d
stderr_logfile=/var/log/nginx/%(program_name)s_stderr.log
stderr_logfile_maxbytes=10MB
stdout_logfile=/var/log/nginx/%(program_name)s_stdout.log
stdout_logfile_maxbytes=10MB
[program:php-fpm]
command = /usr/local/sbin/php-fpm -FR
user = root
autostart = true
stdout_logfile = /dev/stdout
stdout_logfile_maxbytes = 0
stderr_logfile = /dev/stderr
stderr_logfile_maxbytes = 0
Em seguida adicionar no Dockerfile:
Dockerfile - 3ª linha
COPY nginx.ini /etc/supervisor.d/nginx.ini
Agora criaremos um arquivo por nome default.conf com o intuito de configurarmos o NGINX para reconhecer arquivos *.php e interpreta-los.
```shell
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_read_timeout 300;
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location ~ /\.ht {
deny all;
}
}
Adicionamos no Dockerfile:
Dockerfile - 4ª linha
COPY default.conf /etc/nginx/conf.d/default.conf
Opcional: Para testarmos se o container foi configurado corretamente, adicionaremos o arquivo index.php.
```php
<?php
phpinfo();
?>
Adicionamos também no nosso Dockerfile:
Dockerfile - 5ª linha
COPY index.php /var/www/html/index.php
Adicionaremos dois comandos sed com RUN para os últimos ajustes no ambiente:
Dockerfile - 6ª linha
RUN sed -i 's/\;nodaemon\=false/nodaemon\=true/g' /etc/supervisord.conf ; \ # substituirá uma linha no arquivo de configuração para que o serviço supervisord não inicie no modo daemon.
sed -i 's/user nginx\;/user www\-data\;/' /etc/nginx/nginx.conf # substituirá uma linha no arquivo de configuração do NGINX para que o mesmo suba todos os Workers com permissões do usuário www-data
Para finalizarmos, iremos informar ao nosso contêiner que executará o serviço do Supervisord, que por si subirá o NGINX e PHP-FPM com seus Workers.
Dockerfile - 7ª linha
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]
O Dockerfile com todos os arquivos que criamos estará em meu GitHub:
FROM php:7.2-fpm-alpine3.11
LABEL maintainer=Cristianovisk
LABEL baseimage=AlpinePHP
RUN apk add --no-cache nginx \
supervisor
COPY nginx.ini /etc/supervisor.d/nginx.ini
COPY default.conf /etc/nginx/conf.d/default.conf
COPY index.php /var/www/html
RUN sed -i 's/\;nodaemon\=false/nodaemon\=true/g' /etc/supervisord.conf ;\
sed -i 's/user nginx\;/user www\-data\;/' /etc/nginx/nginx.conf
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]
Agora é só criar a imagem com o comando docker build . -t nginx_php:1.0
estando dentro da pasta com todos os arquivos:
E testamos com o comando docker run -d -p 80:80 --name nginx-php-image nginx_php:1.0
:
Acessamos pelo navegador http://127.0.0.1/ e pronto: Observação: os plugins do PHP estão disponíveis a sua maioria no repositório Alpine basta instala-los.
Exemplo:
apk update
depoisapk add php7-pgsql --no-cache
Veja todos os complementos disponíveis:
apk search php
A imagem estará disponível para download com o comando docker pull cristianovisk/nginx_php:latest
Comments