Generator Dockerfile
Wybierz stos i wersję, a otrzymasz Dockerfile z cache warstw, użytkownikiem nie-root i healthcheckiem.
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator Dockerfile — szkielet obrazu dla PHP-FPM, Node.js i Pythona
Generator Dockerfile składa plik budujący obraz kontenera dla czterech najczęstszych stosów: PHP-FPM (na przykład Laravel), PHP CLI z wbudowanym serwerem, Node.js i Python. Wybierasz wersję środowiska oraz port, a narzędzie układa instrukcje w kolejności, która nie psuje cache warstw, dokłada użytkownika innego niż root i gotowy HEALTHCHECK.
Co robi to narzędzie
Generator nie analizuje Twojego projektu — składa sprawdzony szablon z pól, które zaznaczysz. Dla PHP-FPM instaluje rozszerzenia przez docker-php-ext-install razem z bibliotekami nagłówkowymi i usuwa łańcuch narzędzi kompilacji w tej samej warstwie, żeby obraz został mały. Przy opcji Laravel dopisuje cache tras i widoków oraz prawa do storage. Dla Node.js ustawia NODE_ENV=production, a dla Pythona zakłada konto appuser, bo obraz -slim nie ma użytkownika aplikacyjnego.
Instrukcje w wygenerowanym pliku
| Instrukcja | Rola w obrazie | Uwaga praktyczna |
|---|---|---|
FROM | Obraz bazowy z konkretną wersją języka | Nie używaj tagu latest — build przestaje być powtarzalny |
RUN | Pakiety systemowe i instalacja zależności | Każde RUN to osobna warstwa, więc łącz polecenia |
COPY | Najpierw manifesty, potem kod aplikacji | --chown od razu ustawia właściciela plików |
USER | Przełączenie na konto bez uprawnień roota | Po wszystkich instalacjach, przed CMD |
HEALTHCHECK | Sonda, po której orkiestrator poznaje stan kontenera | Ustaw --start-period, by nie ubijać wolnego startu |
CMD | Proces główny kontenera | Forma tablicowa omija shell i przekazuje sygnały |
Jak korzystać z generatora
- Wybierz bazowy obraz. PHP-FPM pasuje do aplikacji za serwerem HTTP, PHP CLI do skryptów i szybkich testów, Node.js i Python do własnych serwisów.
- Ustaw wersję środowiska — lista zawiera tylko wydania z aktualnymi obrazami oficjalnymi.
- Podaj port, na którym nasłuchuje aplikacja. Dla PHP-FPM pole jest ukryte, bo FPM zawsze wystawia 9000.
- Kliknij Generuj Dockerfile i zapisz wynik jako
Dockerfilew katalogu głównym repozytorium. - Dodaj
.dockerignore, bo inaczejCOPY . .wciągnie do obrazu katalog zależności i lokalną konfigurację. Listę wzorców podpowie generator .gitignore.
docker build -t moja-aplikacja:1.0 . docker run --rm -d -p 8080:8080 --env-file .env --name moja-aplikacja moja-aplikacja:1.0 docker ps --filter name=moja-aplikacja
Cache warstw i kolejność instrukcji
Docker zapisuje wynik każdej instrukcji jako warstwę i używa jej ponownie, dopóki nie zmieni się nic, od czego ta warstwa zależy. Dlatego manifesty (composer.json, package*.json, requirements.txt) kopiujemy przed kodem: poprawka w kontrolerze nie unieważnia wtedy instalacji pakietów i build kończy się w sekundach zamiast w minutach. Ważne jest też scalanie poleceń — pakiety kompilacji dodane w jednym RUN i usunięte w kolejnym nadal zajmują miejsce, bo warstwa z instalacją została już zapisana.
Użytkownik nie-root i sekrety
Domyślnie proces w kontenerze działa jako root, a to znaczy, że dowolny błąd w aplikacji daje atakującemu pełne prawa w systemie plików obrazu. Wygenerowany plik przełącza się na www-data, node albo appuser dopiero po zakończeniu instalacji, bo wcześniej brakowałoby uprawnień do katalogów systemowych. Uprawnienia katalogów przeliczysz kalkulatorem chmod.
COPY .env oraz ENV DB_PASSWORD=... zapisują sekret w warstwie, którą odczyta każdy, kto ma dostęp do rejestru. Przekazuj je przy uruchomieniu przez --env-file, sekrety orkiestratora albo RUN --mount=type=secret.W Laravelu jest jeszcze jeden szczegół: php artisan config:cache wykonany podczas budowania zapisuje zmienne środowiskowe z etapu build, a nie te z produkcji. Generator zostawia w obrazie tylko cache tras i widoków, a konfigurację proponuje cache'ować przy starcie kontenera.
Dockerfile a docker-compose i Kubernetes
Dockerfile opisuje jeden obraz. Do uruchomienia kilku usług naraz — aplikacja, baza danych, Redis, serwer HTTP — służy docker-compose.yml, który wskazuje na zbudowany obraz i dokłada sieci oraz wolumeny; jego składnię sprawdzisz walidatorem YAML. Wdrożenie na klaster opisze generator manifestu Deployment dla Kubernetes, a przy ruchu obsługiwanym przez Apache przyda się generator pliku .htaccess.
Najczęściej zadawane pytania
Czy wygenerowany Dockerfile jest gotowy produkcyjnie?
To solidny szkielet: ma przypiętą wersję obrazu, cache zależności, konto bez uprawnień roota i sondę zdrowia. Przed wdrożeniem dołóż obsługę sekretów, konfigurację serwera HTTP przed PHP-FPM, limity pamięci oraz plik .dockerignore.
Dlaczego manifesty zależności kopiuje się osobno?
Bo Docker unieważnia warstwę i wszystkie następne, gdy zmieni się cokolwiek, co do niej weszło. Skopiowanie composer.json i composer.lock przed resztą kodu sprawia, że warstwa z instalacją pakietów jest używana ponownie, dopóki nie zmienisz zależności.
Czym różni się PHP-FPM od PHP CLI?
PHP-FPM to menedżer procesów, który odbiera żądania po protokole FastCGI z serwera HTTP, zwykle Nginx, i nasłuchuje na porcie 9000. PHP CLI uruchamia wbudowany serwer php -S, obsługujący jedno żądanie w danym momencie. Do produkcji stosuje się FPM z osobnym kontenerem serwera HTTP, a CLI zostaje na testy i zadania w tle.
Po co w obrazie HEALTHCHECK?
Sonda pozwala odróżnić kontener, który działa, od kontenera, który wstał, ale nie odpowiada. Docker Compose potrafi wstrzymać start usług zależnych, dopóki zależność nie zgłosi stanu healthy, a orkiestratory restartują wadliwe instancje. Dla PHP-FPM generator używa cgi-fcgi, co wymaga włączonego ping.path w konfiguracji puli.
Czy trzeba przypinać wersję obrazu bazowego?
Warto. Tag latest zmienia treść bez ostrzeżenia, więc ten sam plik zbuduje w maju inny obraz niż w styczniu i błąd trudno odtworzyć. Minimum to tag z wersją minor, na przykład php:8.3-fpm-alpine.