Docker i środowisko do developmentu

0

Zacząłem poznawać Dockera i podoba mi się idea uruchamiania aplikacji w izolowanych kontenerach. To wygodne rozwiązanie, ponieważ nie ma konieczności instalowania wszystkiego ręcznie na hoście z Windows 10 by np. uruchomić bazę MySQL. Wystarczy pobrać image, odpalić, wejść do kontenera z terminala i mogę bawić się MySQL.

Do developmentu aplikacji w PHP używałem kiedyś programu XAMPP a od pewnego czasu Laragon, ale chciałbym w całości przenieść się na Dockera. Chcę uzyskać efekt zbliżony do Laragon czyli taki, że mógłbym instalować różne wersje PHP, różne frameworki webowe (głównie Symfony) oraz mieć środowisko do developmentu bez używania programów typu XAMPP/Laragon i instalacji wszystkiego na hoście, czyli Windowsie 10.

Czy Docker pozwala na coś takiego i jeśli tak, to jak to zrobić?

2

No tworzysz se dla każdej apki nowe środowisko, nowy docker-compose. I potem uruchamiasz ten, co potrzebujesz. Ewentualnie jeśli chcesz mieć kilka różnych apek w tym samym czasie odpalonych, to musisz pamiętać, by mieć różne porty używane, bo inaczej będą konflikty.

0

Pozwala, od tego jest Docker.

Zacznij od - https://docs.docker.com/get-started/

Tutaj masz jakiś gotowiec jak nie lubisz czytać i wolisz się uczyć metodą prób i błędów - https://github.com/dunglas/symfony-docker
Ogólnie szukaj pod frazą "php symfony docker template/example"

Tutaj prosty przykład z samym PHP bez frameworka - https://github.com/mfieldhouse/docker-php-helloworld

Tutaj oficjalne info z docs symfony - https://symfony.com/doc/current/setup/symfony_server.html#docker-integration

0

Zapoznaj się z http://devilbox.org/ .
Pełne rozwiązanie wykorzystujące dockera dla środowiska PHP. Możliwość konfiguracji dowolnej wersji PHP i baz danych MySQL czy Postgres dla dowolnej liczby aplikacji.

0

Czyli wszystko sprowadza się do tego, aby stworzyć co najmniej 3 kontenery za pomocą docker-compose?

Dla pierwszego kontenera tworzę Dockerfile bazując na jakimś obrazie PHP np. php:8.0.13-alpine, instaluję wszystkie niezbędne pakiety, Composera i wybrany framework. Następnie muszę wejść do środka kontenera, wygenerować nowy projekt za pomocą Composera i uruchomić aplikację. Drugi kontener dla bazy a trzeci dla nginx. Dobrze myślę?

3

W pliku docker-compose łączysz sobie potrzebne kontenery jak webserwer, PHP, baza czy testowo mailhog czy tam inne.
Tak stworzoną grupę kontenerów używasz per projekt. Wtedy łatwo uruchamiasz wszystko i masz gwarancję izolacji między aplikacjami.

4

Ogólnie ludzie przechodzący na dockery robią kilka błędów. Jednym z nich jest odwzorowywanie schematów z tradycyjnych setupów i na przykład stawianie 1 kontenera php per wersja i odpalanie za jego pomocą wielu projektów.

Ideą dockera jest hermetyzacja projektu i dostosowanie do niego środowiska (w idealnym świecie tego samego setupu używasz na produkcji).

To co robisz to odpalasz docker-compose i w nim "wpinasz" wszystkie kontenery jakie potrzebujesz. Na początek polecam stosowanie obrazów zawierających apache/nginx. Wtedy w takim docker compose masz zazwyczaj:

  • php z apachem
  • jakaś baza danych
  • dodatkowe kontenery np. adminer (do zarządzania bazą danych), mailhog do testowania maili, elasticsearch, i co tam jeszcze dusza zapragnie.

To co uzyskujesz to po prostu zamknięte środowisko. Jak chcesz odpalić kolejny projekt to po prostu robisz drugi dokcer-compose i budujesz wszelkie potrzebne obrazy.

To przed czym muszę Cię przestrzec, to na początku napotkasz sporo problemów typu prawa do plików, walka z sieciami - jak na przykład zrobisz bazę w sieci wewnętrznej i nie udostępnisz portu to nie połączysz się z nią łatwo za pomocą jakiegoś panelu do baz danych, będziesz miał kłopot aby jednocześnie odpalić 2 projekty (kolizje portów), albo będziesz miał kolizje portów między usługami na hoście i tymi odpalonymi z kontenerów. Ogólnie jest sporo takich "pułapek", z którymi musisz sobie poradzić. Z czasem jednak zdobyta wiedz procentuje, bo otwiera kolejne możliwości typu ogarnianie procesów CI/CD. Z dockerem pracuję już od kilku lat, obecnie robię już całkiem zaawansowane konstrukcje, gdzie mikroserwisy komunikują się między sobą, automatycznie stawiające się środowiska developerskie, zabawy w CI/CD czy nawet Docker na produkcji i nadal mi się zdarza mieć niezłe WTF, ale nie wyobrażam sobie powrotu do tradycyjnych metod.

Jak zaczynałem to trudno było o materiały, ale teraz widzę, że jest tego sporo na sieci. Osobiście zainwestowałbym te 30-40zł i kupił taki kurs: https://www.udemy.com/course/docker-for-php-the-complete-course/ - pewnie w 3 godziny zdobędziesz wiedzę, jaką kiedyś się gromadziło tygodniami. Jak już ogarniesz podstawy stawiania środowisk, to potem już idzie z górki bo to tylko dodawanie kolejnych zabawek do arsenału.

Jak już się trochę wciągniesz to polecam zainteresować się: https://doc.traefik.io/traefik/providers/docker/

Dzięki temu można fajnie ogarnąć bardziej złożone struktury typu wiele serwisów komunikujących się ze sobą po API czy proste używanie dockerów na produkcji, ale na początek sobie tym głowy nie zawracaj.

0

Zrobiłem przykładowy projekt na podstawie tutoriala, który porusza wymienioną w tym wątku tematyką i wygląda to całkiem nieźle. Ponadto w połączeniu z VS Code i rozszerzeniem Remote - Containers można tworzyć odrębne konfiguracje edytora dla różnych kontenerów.

W skrócie nie miałbym się do czego przyczepić, gdyby nie to, że sama aplikacja w moim odczuciu wolno reaguje na dokonane zmiany w kodzie lub np. odświeżenie widoku. Często trzeba czekać kilka a nawet kilkanaście sekund zanim wykona się żądanie HTTP. Można ten proces przyspieszyć?

2

Na jakim systemie stawiasz projekt? Co do zasady na Linux raczej nie powinno być zauważalnej różnicy wydajności (mówimy tu o narzucie rzędu sub 1%). W przypadku Windowsa/Maka za wiele nie powiem, bo tylko raz miałem (nie)przyjemność pracować z Dokerami na Windows. Przy użyciu WSL jako tako to śmigało, ale było trochę zabawy z konfiguracją - o ile pamiętam, główny trik polegał na tym aby dane trzymać w WSL, a nie udostępniać pliki projektu z poziomu Windowsa i trzeba było jakoś mapować PHP storma aby "łaczył" się z projektem w WSL. Ogólnie z konfiguracją Windowsa trzeba trochę powalczyć aby to śmigało. Z drugiej strony sporo ludzie pracuje z Dokerami na Windowsie więc się da. To czego doświadczasz na pewno nie nie jest normalne i ma jakąś przyczynę, którą się da wyeliminować.

4

Sądząc z pierwszego postu to masz Windows 10.
Pliki projektu trzymaj w WSLu jak już napisał @hadwao .
Ścieżka z poziomu windows do katalogów to:
'\wsl$` i to wszytko. Zamiast w edytorze podawać ścieżke do projektu C:\aaa\bb podajesz tą z WSLa. Będzie działać, nie zauważysz różnicy w działaniu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1