Nowa odpowiedź
Docker Compose został zaktualizowany. Mają teraz format pliku w wersji 2 .
Pliki w wersji 2 są obsługiwane przez Compose 1.6.0+ i wymagają Docker Engine w wersji 1.10.0+.
Obsługują teraz funkcję sieciową Dockera, która po uruchomieniu konfiguruje domyślną sieć o nazwie myapp_default
Z ich dokumentacji Twój plik wyglądałby jak poniżej:
version: '2'
services:
web:
build: .
ports:
- "8000:8000"
fpm:
image: phpfpm
nginx
image: nginx
Ponieważ te kontenery są automatycznie dodawane do domyślnej sieci myapp_default , będą mogły ze sobą rozmawiać. Miałbyś wtedy w konfiguracji Nginx:
fastcgi_pass fpm:9000;
Jak wspomniał @treeface w komentarzach, pamiętaj, aby upewnić się, że PHP-FPM nasłuchuje na porcie 9000, można to zrobić edytując /etc/php5/fpm/pool.d/www.conf
tam, gdzie będzie to potrzebne listen = 9000
.
Stara odpowiedź
Zachowałem poniżej tutaj dla tych, którzy używają starszej wersji tworzenia Docker / Docker i chcą uzyskać informacje.
Ciągle natknąłem się na to pytanie w Google, próbując znaleźć odpowiedź na to pytanie, ale nie było to do końca to, czego szukałem, ze względu na nacisk Q / A na docker-compose (który w czasie pisania ma tylko eksperymentalne wsparcie dla funkcje sieciowe Dockera). Oto moje spojrzenie na to, czego się nauczyłem.
Docker niedawno wycofał funkcję łącza na rzecz funkcji sieci
Dlatego za pomocą funkcji Docker Networks można łączyć kontenery, wykonując następujące kroki. Aby uzyskać pełne wyjaśnienia dotyczące opcji, przeczytaj wcześniej powiązane dokumenty.
Najpierw utwórz swoją sieć
docker network create --driver bridge mynetwork
Następnie uruchom kontener PHP-FPM, otwierając port 9000 i przypisując go do nowej sieci ( mynetwork
).
docker run -d -p 9000 --net mynetwork --name php-fpm php:fpm
Ważny jest tutaj --name php-fpm
koniec polecenia, którym jest nazwa, będziemy potrzebować później.
Następnie ponownie uruchom kontener Nginx i przypisz go do utworzonej sieci.
docker run --net mynetwork --name nginx -d -p 80:80 nginx:latest
W przypadku kontenerów PHP i Nginx możesz również dodać --volumes-from
polecenia itp. Zgodnie z wymaganiami.
Teraz nadchodzi konfiguracja Nginx. Który powinien wyglądać podobnie do tego:
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;
}
}
Zwróć uwagę na fastcgi_pass php-fpm:9000;
w bloku lokalizacji. To mówi kontener kontaktowy php-fpm
w porcie 9000
. Po dodaniu kontenerów do sieci mostu Docker wszystkie one automatycznie otrzymują aktualizację pliku hostów, która umieszcza nazwę kontenera w stosunku do adresu IP. Więc kiedy Nginx zobaczy, że będzie wiedział, jak skontaktować się z kontenerem PHP-FPM, który nazwałeś php-fpm
wcześniej i przypisałeś do swojej mynetwork
sieci Docker.
Możesz dodać tę konfigurację Nginx podczas procesu budowania kontenera Docker lub później, zależy to od Ciebie.