Generator .dockerignore
Zaznacz technologie i skopiuj gotową listę wykluczeń do katalogu z kontekstem budowania.
-
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 .dockerignore — mniejszy kontekst budowania, krótszy build
Generator .dockerignore składa listę wykluczeń z gotowych bloków: zależności, katalog Gita, sekrety, pliki CI, ustawienia edytorów, dokumentacja i śmieci systemowe. Zaznacz technologie, których używa projekt, skopiuj wynik do katalogu z kontekstem budowania i przestań wysyłać do demona Dockera setki megabajtów, które w obrazie nigdy nie wylądują.
Czym jest kontekst budowania
Polecenie docker build . najpierw pakuje wskazany katalog i przesyła go do demona jako kontekst budowania. Dopiero potem wykonują się instrukcje z Dockerfile. Jeśli w katalogu leżą node_modules, vendor i pełna historia repozytorium, każdy build zaczyna się od kilkudziesięciu sekund przepychania plików, których obraz w ogóle nie potrzebuje. Plik .dockerignore działa właśnie na tym etapie: filtruje kontekst, zanim cokolwiek dotrze do demona.
Co warto wykluczyć
| Grupa | Przykładowe wzorce | Powód |
|---|---|---|
| Zależności | node_modules, vendor, .venv | Instalowane wewnątrz obrazu z pliku blokady, nie kopiowane z hosta |
| Kontrola wersji | .git, .gitignore | Historia repozytorium często waży więcej niż sam kod |
| Sekrety | .env, *.pem, *.key | Warstwy obrazu są jawne dla każdego, kto go pobierze |
| CI i narzędzia | .github, Dockerfile*, docker-compose*.yml | Zmiana pipeline'u nie powinna unieważniać cache aplikacji |
| Dokumentacja i testy | docs, tests, *.md | Zbędny balast w obrazie produkcyjnym |
| Systemowe i tymczasowe | .DS_Store, Thumbs.db, *.log | Artefakty lokalne, inne na każdej maszynie |
Jak korzystać z generatora
- Zaznacz kafelki odpowiadające stosowi technologicznemu projektu. Możesz łączyć kilka, na przykład PHP i Node.js dla aplikacji Laravel z frontendem budowanym przez Vite.
- Kliknij Generuj .dockerignore. Wzorce powtarzające się między grupami trafiają do wyniku tylko raz.
- Skopiuj zawartość i zapisz jako
.dockerignorew katalogu, który podajesz jako kontekst — zwykle w korzeniu repozytorium. - Uruchom
docker build .i porównaj linięSending build context to Docker daemonprzed i po zmianie.
Ten sam projekt potrzebuje zwykle także listy plików pomijanych przez Gita — przygotuje ją generator .gitignore, który operuje na bardzo podobnej składni. Przy wdrożeniu obrazu na klaster przyda się generator manifestu Deployment dla Kubernetes, a przy klasycznym hostingu generator pliku .htaccess. Składnię towarzyszącego pliku docker-compose.yml sprawdzisz walidatorem YAML.
Składnia wzorców i różnice wobec .gitignore
Wzorce są dopasowywane zawsze względem korzenia kontekstu, a nie względem katalogu, w którym leży plik. To pierwsza istotna różnica: w Gicie każdy podkatalog może mieć własny .gitignore, w Dockerze liczy się wyłącznie .dockerignore z korzenia kontekstu. Gwiazdka zastępuje fragment nazwy w jednym segmencie ścieżki, podwójna gwiazdka przechodzi przez dowolną liczbę katalogów, więc **/*.log obejmuje logi na każdym poziomie drzewa. Wykrzyknik tworzy wyjątek, a przy konflikcie wygrywa ostatnia pasująca linia — dlatego *.md w jednej linii i !README.md w następnej zostawi README w kontekście.
Czego nie wykluczać
package-lock.json albo composer.lock, polecenia npm ci i composer install nie mają na czym pracować i build przerwie się błędem albo zainstaluje inne wersje bibliotek niż na środowisku testowym.Grupa „Dokumentacja” wyklucza tests oraz *.md. To dobry domyślny wybór dla obrazu produkcyjnego, ale jeśli w obrazie uruchamiasz testy albo composer.json mapuje katalog testów przez autoload-dev, usuń ten wzorzec z wyniku.
Cache warstw a kolejność kopiowania
Najwięcej zyskujesz, łącząc .dockerignore z sensowną kolejnością instrukcji: najpierw manifesty zależności, potem instalacja, a kod na końcu:
COPY package.json package-lock.json ./ RUN npm ci COPY . . RUN npm run build
Warstwa z npm ci zostaje wtedy w cache, dopóki nie zmienią się manifesty. Bez .dockerignore ten układ i tak niewiele daje, bo lokalny node_modules wpada do kontekstu i unieważnia warstwę COPY . . przy każdej instalacji pakietu na maszynie deweloperskiej.
Najczęściej zadawane pytania
Czy .dockerignore działa jak .gitignore?
Składnia jest bardzo podobna: te same gwiazdki, katalogi i wykrzyknik do wyjątków. Różnice są dwie. Docker czyta tylko jeden plik, z korzenia kontekstu. I nie istnieje tu pojęcie pliku śledzonego, więc zmiana wzorców obowiązuje od pierwszego kolejnego buildu.
Czy wykluczyć Dockerfile z kontekstu?
Można i często się to robi. Docker odczytuje Dockerfile osobno, jeszcze przed spakowaniem kontekstu, więc jego wykluczenie nie psuje builda. Zyskujesz to, że drobna zmiana w Dockerfile lub w plikach Compose nie unieważnia warstwy COPY . ..
Czy .dockerignore zmniejsza gotowy obraz?
Pośrednio, ale wyraźnie. Sam plik nie usuwa niczego z obrazu — decyduje o tym, co w ogóle może zostać skopiowane. Przy instrukcji COPY . . wszystko, co nie zostało wykluczone, wchodzi do warstwy. Wykluczenie .git i node_modules to zazwyczaj kilkaset megabajtów mniej.
Czy jeden plik obsłuży kilka Dockerfile'i?
Domyślnie tak, bo dla całego kontekstu obowiązuje jeden .dockerignore z korzenia. BuildKit pozwala jednak trzymać osobne listy: plik o nazwie NazwaDockerfile.dockerignore obok danego Dockerfile ma pierwszeństwo dla buildów uruchamianych z tym plikiem.
Czy .dockerignore chroni sekrety?
Tylko zapobiegawczo. Blokuje przypadkowe skopiowanie .env czy kluczy prywatnych przez COPY . ., ale nie pomoże, jeśli wskażesz plik wprost, i nie usunie go z warstw obrazu, który już powstał. Poświadczenia przekazuj zmiennymi środowiskowymi w czasie uruchomienia albo mechanizmem sekretów BuildKit, a jeśli klucz raz trafił do opublikowanego obrazu, traktuj go jako ujawniony i wymień.