Generator Dockerfile
Dockerfile to jeden z tych plików, które wydają się krótkie, dopóki nie przypomnisz sobie szczegółów: kolejność warstw ma znaczenie dla cache, COPY package.json idzie przed RUN npm install, a języki kompilowane korzystają z budowania wieloetapowego. Ten generator zapisuje gotowy Dockerfile dla wybranej technologii, z już poprawnym wzorcem cache.
Jak wygenerować Dockerfile
-
1
Wybierz technologię
Node.js, Python, PHP, Go lub Rust. Każdy szablon używa sensownego obrazu bazowego dla danego języka i właściwego polecenia instalacji zależności.
-
2
Ustaw katalog roboczy i port
Wybierz WORKDIR i port, na którym nasłuchuje Twoja aplikacja; obie wartości trafią do wygenerowanego pliku.
-
3
Przejrzyj Dockerfile
Sprawdź, czy linia EXPOSE i polecenie startowe pasują do Twojej aplikacji. Szablony Go i Rust używają budowania wieloetapowego.
-
4
Skopiuj Dockerfile
Skopiuj wynik i wklej go do katalogu głównego repozytorium, a następnie zbuduj obraz.
Dlaczego budowanie wieloetapowe
Naiwny Dockerfile instaluje cały toolchain kompilatora w finalnym obrazie. Budowanie wieloetapowe daje etap “builder”, który kompiluje, oraz etap końcowy niosący tylko skompilowany artefakt:
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]
Obraz końcowy pozbywa się wszystkich zależności programistycznych, plików źródłowych i cache budowania, często zmniejszając swój rozmiar o 60-80 procent.
Warianty obrazu bazowego
Szablony używają obrazów slim lub alpine, gdzie to możliwe. Jeśli samodzielnie dostosowujesz obraz bazowy, typowe opcje to:
| Wariant | Typowy rozmiar | Kiedy wybrać |
|---|---|---|
| full | 300-900 MB | Obrazy programistyczne, nietypowe zależności systemowe |
| slim | 80-200 MB | Standard produkcyjny dla większości języków |
| alpine | 30-100 MB | Małe obrazy, uwaga na problemy glibc vs musl |
| distroless | 20-80 MB | Maksymalne bezpieczeństwo; brak powłoki i menedżera pakietów |
Zasady cache warstw
Docker buforuje każdą linię; gdy zmienia się jedna warstwa, wszystko poniżej jest przebudowywane. Kolejność od najmniej do najbardziej zmiennej:
- Obraz bazowy
FROM(rzadko się zmienia). - Pakiety systemowe (
apt-get install), rzadkie zmiany. - Manifesty zależności (
package.json,requirements.txt,composer.json). - Etap instalacji zależności. Uruchamia się tylko, gdy zmienia się manifest.
- Kopiowanie kodu źródłowego. Najbardziej obciążona warstwa; wszystko po niej jest przebudowywane przy każdym commicie.
- Kompilacja i końcowy
CMD.
Złamanie tej kolejności to najczęstsza przyczyna wolnych buildów CI.
Lista kontrolna bezpieczeństwa
- Uruchamiaj jako nie-root. Ustaw
USER appuser(lubUSER 1000) blisko końca. - Przypinaj wersje.
python:3.12.7-slimbijepython:3.12, które bijepython:latest. - Ustaw jawny
WORKDIRzamiast polegać na/. - Używaj
COPY, nieADDdo plików lokalnych;ADDma skutki uboczne automatycznego rozpakowywania. - Dodaj
HEALTHCHECK, aby orkiestratorzy mogli wykryć zablokowany proces. - Czyść cache pakietów w tej samej linii
RUN:apt-get install ... && rm -rf /var/lib/apt/lists/*.
Najczęściej zadawane pytania
Slim jest bezpieczniejszym domyślnym wyborem, ponieważ nadal opiera się na glibc, jak większość prekompilowanych wheeli bibliotek. Alpine używa musl i czasem powoduje tajemnicze błędy uruchomieniowe w Pythonie (pandas, numpy) lub Node (natywne moduły node-gyp). Wybierz alpine, gdy rozmiar obrazu ma kluczowe znaczenie i przetestowałeś technologię.
Tak, dodaj go do swojego projektu. Bez niego Docker wysyła całe repozytorium do demona jako kontekst budowania: historię git, node_modules, lokalne pliki .env, testy. To wolne, marnuje cache i ujawnia sekrety.
Tak. Użyj docker buildx z opcją --platform, aby budować dla obu architektur naraz. Obrazy bazowe używane przez szablony publikują warianty arm64.
Nie. Wybory technologii, katalogu roboczego i portu służą tylko do wygenerowania Dockerfile na tej stronie; nic nie jest zapisywane ani udostępniane.
Powiązane narzędzia
Tabela ASCII
Pełna tabela ASCII od 0 do 127 z zapisem dziesiętnym, szesnastkowym, ósemkowym i binarnym oraz notacją numerycznych odwołań HTML, w tym kodami sterującymi NUL, LF i DEL.
Referencja znaków HTML
Przeszukiwalna lista encji HTML wraz z ich kodami nazwanymi i liczbowymi oraz kopiowaniem jednym kliknięciem specjalnych znaków i symboli.
Skróty klawiaturowe
Wyszukuj udokumentowane skróty domyślne VS Code, Chrome i Bash z GNU Readline w macOS, Windows i Linux.
Ściągawka do Markdown
Praktyczna ściągawka Markdown z prawdziwym podglądem i przykładami gotowymi do skopiowania: nagłówki, listy, tabele, kod, linki, obrazy i składnia GFM.
Symulator licznika rozkazów
Śledź uproszczony listing instrukcji o stałej długości z etykietami, skokami, wywołaniami, powrotami i adresami 16-, 24- lub 32-bitowymi.
Konwerter ASCII na binarny
Konwertuj dowolny ciąg ASCII na reprezentację binarną. Każdy znak staje się ośmioma bitami, rozdzielonymi spacjami, gotowymi do wklejenia w ślad protokołu albo zadanie domowe.
Narzędzie jest dostępne w innych językach
- Dockerfile 생성기 [KO]
- Trình tạo Dockerfile [VI]
- Dockerfile-generator [NL]
- Dockerfile 生成器 [ZH]
- Dockerfile-Generator [DE]
- Dockerfile Generator [EN]
- Generator Dockerfile [ID]
- Dockerfile-generator [SV]
- مولد ملفات Docker [AR]
- ตัวสร้าง Dockerfile [TH]
- Generador de Dockerfile [ES]
- Générateur de Dockerfile [FR]
- Gerador de Dockerfile [PT]
- Dockerfile生成 [JA]
- Dockerfile Oluşturucu [TR]
- Generatore di Dockerfile [IT]
- Генератор Dockerfile [RU]