Nueva respuesta
Se ha actualizado Docker Compose. Ahora tienen un formato de archivo de la versión 2 .
Los archivos de la versión 2 son compatibles con Compose 1.6.0+ y requieren un motor Docker de la versión 1.10.0+.
Ahora admiten la función de red de Docker, que cuando se ejecuta configura una red predeterminada llamada myapp_default
De su documentación, su archivo se vería como el siguiente:
version: '2'
services:
web:
build: .
ports:
- "8000:8000"
fpm:
image: phpfpm
nginx
image: nginx
Como estos contenedores se agregan automáticamente a la red predeterminada myapp_default , podrían comunicarse entre sí. Luego tendrías en la configuración de Nginx:
fastcgi_pass fpm:9000;
Además, como lo menciona @treeface en los comentarios, recuerde asegurarse de que PHP-FPM esté escuchando en el puerto 9000, esto se puede hacer editando /etc/php5/fpm/pool.d/www.conf
donde lo necesite listen = 9000
.
Respuesta antigua
He guardado lo siguiente aquí para aquellos que usan una versión anterior de Docker / Docker compose y quisieran la información.
Seguí tropezando con esta pregunta en Google cuando intentaba encontrar una respuesta a esta pregunta, pero no era exactamente lo que estaba buscando debido al énfasis de Q / A en docker-compose (que en el momento de escribir este artículo solo tiene soporte experimental para funciones de red de Docker). Así que aquí está mi opinión sobre lo que he aprendido.
Docker ha desaprobado recientemente su función de enlace a favor de su función de redes
Por lo tanto, con la función Docker Networks puede vincular contenedores siguiendo estos pasos. Para obtener explicaciones completas sobre las opciones, lea los documentos vinculados anteriormente.
Primero crea tu red
docker network create --driver bridge mynetwork
A continuación, ejecute su contenedor PHP-FPM asegurándose de abrir el puerto 9000 y asignarlo a su nueva red ( mynetwork
).
docker run -d -p 9000 --net mynetwork --name php-fpm php:fpm
Lo importante aquí es el --name php-fpm
al final del comando que es el nombre, lo necesitaremos más adelante.
A continuación, ejecute su contenedor Nginx nuevamente y asigne a la red que creó.
docker run --net mynetwork --name nginx -d -p 80:80 nginx:latest
Para los contenedores PHP y Nginx, también puede agregar --volumes-from
comandos, etc., según sea necesario.
Ahora viene la configuración de Nginx. Que debería verse algo similar a esto:
server {
listen 80;
server_name localhost;
root /path/to/my/webroot;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}
Observe fastcgi_pass php-fpm:9000;
en el bloque de ubicación. Eso es, contacte con el contenedor php-fpm
en el puerto 9000
. Cuando agrega contenedores a una red de puente de Docker, todos obtienen automáticamente una actualización del archivo de hosts que coloca el nombre del contenedor en su dirección IP. Entonces, cuando Nginx lo vea, sabrá comunicarse con el contenedor PHP-FPM que nombró php-fpm
anteriormente y asignó a su mynetwork
red Docker.
Puede agregar esa configuración de Nginx durante el proceso de compilación de su contenedor Docker o después, depende de usted.
docker exec
ingresar al contenedor en ejecución y hacer ping a fpm?Nginx
yPHP-FPM
junto con Vagrant y Ansible. Consulte mi repositorio github.com/bocharsky-bw/vagrant-ansible-docker si lo desea.