Dockerfile 생성기
Dockerfile은 세부 사항을 떠올리기 전까지는 짧아 보이는 파일 중 하나입니다. 레이어 순서는 캐시에 영향을 주고, COPY package.json은 RUN npm install보다 앞에 와야 하며, 컴파일 언어는 멀티스테이지 빌드의 이점을 얻습니다. 이 생성기는 선택한 스택에 맞는 즉시 사용 가능한 Dockerfile을 캐시 패턴까지 올바르게 갖춰 작성합니다.
Dockerfile 생성 방법
-
1
스택 선택
Node.js, Python, PHP, Go, Rust 중에서 고릅니다. 각 템플릿은 해당 언어에 맞는 기본 이미지와 올바른 의존성 설치 명령을 사용합니다.
-
2
작업 디렉터리와 포트 설정
WORKDIR과 앱이 수신할 포트를 정하면 둘 다 생성된 파일에 기록됩니다.
-
3
Dockerfile 확인
EXPOSE 줄과 시작 명령이 앱과 맞는지 확인하세요. Go와 Rust 템플릿은 멀티스테이지 빌드를 사용합니다.
-
4
Dockerfile 복사
결과를 복사해 저장소 루트에 붙여넣고 이미지를 빌드하세요.
멀티스테이지 빌드의 이유
단순한 Dockerfile은 컴파일러 툴체인 전체를 최종 이미지에 설치합니다. 멀티스테이지 빌드는 컴파일을 담당하는 “builder” 스테이지와 컴파일된 산출물만 담는 최종 스테이지로 나눠 줍니다:
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"]
최종 이미지에서 모든 개발 의존성, 소스 파일, 빌드 캐시가 빠져 이미지 크기가 60-80퍼센트 줄어드는 경우가 많습니다.
기본 이미지 종류
템플릿은 가능한 slim 또는 alpine 이미지를 사용합니다. 기본 이미지를 직접 조정한다면 대표적인 선택지는 다음과 같습니다:
| 종류 | 일반적인 크기 | 선택 시점 |
|---|---|---|
| full | 300-900 MB | 개발용 이미지, 드문 시스템 의존성 |
| slim | 80-200 MB | 대부분의 언어에서 프로덕션 기본값 |
| alpine | 30-100 MB | 작은 이미지, glibc와 musl 차이 주의 |
| distroless | 20-80 MB | 최대 보안, 셸과 패키지 관리자 없음 |
레이어 캐시 규칙
Docker는 각 줄을 캐시하며, 레이어가 바뀌면 그 아래는 전부 다시 빌드됩니다. 변경 빈도가 낮은 순서는 다음과 같습니다:
FROM기본 이미지 (거의 안 바뀜).- 시스템 패키지(
apt-get install), 드물게 변경. - 의존성 매니페스트(
package.json,requirements.txt,composer.json). - 의존성 설치 단계. 매니페스트가 바뀔 때만 실행.
- 소스 코드 복사. 가장 바쁜 레이어로, 이후는 커밋마다 다시 빌드.
- 컴파일과 최종
CMD.
이 순서를 어기는 것은 CI 빌드가 느려지는 가장 흔한 원인입니다.
보안 체크리스트
- 비루트로 실행하기. 끝부분에
USER appuser(또는USER 1000)를 지정. - 버전 고정하기.
python:3.12.7-slim이python:3.12보다 낫고, 이는python:latest보다 낫습니다. /에 의존하지 말고 명시적WORKDIR설정하기.- 로컬 파일에는
ADD가 아닌COPY사용하기.ADD는 자동 압축 해제 부작용이 있습니다. HEALTHCHECK를 추가해 오케스트레이터가 멈춘 프로세스를 감지하게 하기.- 패키지 캐시는 같은
RUN줄에서 정리하기:apt-get install ... && rm -rf /var/lib/apt/lists/*.
자주 묻는 질문
slim은 대부분의 라이브러리 사전 컴파일 휠처럼 여전히 glibc 기반이라 더 안전한 기본값입니다. alpine은 musl을 사용해 Python(pandas, numpy)이나 Node(node-gyp 네이티브 모듈)에서 간혹 알 수 없는 런타임 버그를 일으킵니다. 이미지 크기가 중요하고 스택을 테스트했다면 alpine을 선택하세요.
네, 프로젝트에 추가하세요. 없으면 Docker가 저장소 전체를 빌드 컨텍스트로 데몬에 보냅니다: git 기록, node_modules, 로컬 .env 파일, 테스트. 느리고 캐시를 낭비하며 비밀 정보가 새어 나갑니다.
네. docker buildx를 --platform 옵션과 함께 사용하면 두 아키텍처를 한 번에 빌드할 수 있습니다. 템플릿이 사용하는 기본 이미지는 arm64 변형을 제공합니다.
아니요. 선택한 스택, 작업 디렉터리, 포트는 이 페이지에서 Dockerfile을 만드는 데만 사용되며 저장되거나 공유되지 않습니다.
관련 도구
ASCII 표 참조
NUL, LF, DEL 같은 제어 문자를 포함해 모든 문자에 대한 10진수, 16진수, 8진수, 2진수, HTML 숫자 문자 참조를 담은 0부터 127까지의 전체 ASCII 표.
HTML 문자 참조
HTML 엔티티의 검색 가능한 목록, 각 엔티티의 이름 및 숫자 코드, 그리고 특수 문자 및 기호에 대한 1클릭 복사 기능을 제공합니다.
키보드 단축키 참고표
macOS, Windows, Linux에서 VS Code, Chrome, GNU Readline을 쓰는 Bash의 문서화된 기본 단축키를 검색합니다.
보색 찾기
어떤 입력에 대해서도 보색을 찾습니다. HSL 반대 색, 분할 보색 쌍, 그리고 접근성 있는 조합 제안을 반환합니다.
랜덤 영어 글자 생성기
A-Z 영어 글자를 무작위로 생성합니다. 개수와 대문자, 소문자, 혼합 대소문자를 선택해 게임, 과제, 수업 활동에 활용하세요.
색상 이름 찾기
HEX, RGB 또는 HSL 값에 가장 가까운 표준 CSS 색상 이름을 CIEDE2000으로 찾습니다.
이 도구는 다른 언어로도 제공됩니다
- Generator Dockerfile [PL]
- Gerador de Dockerfile [PT]
- مولد ملفات Docker [AR]
- Generador de Dockerfile [ES]
- Générateur de Dockerfile [FR]
- Dockerfile Oluşturucu [TR]
- Dockerfile-generator [SV]
- Dockerfile Generator [EN]
- Trình tạo Dockerfile [VI]
- Generator Dockerfile [ID]
- Dockerfile生成 [JA]
- ตัวสร้าง Dockerfile [TH]
- Dockerfile-generator [NL]
- Dockerfile-Generator [DE]
- Dockerfile 生成器 [ZH]
- Generatore di Dockerfile [IT]
- Генератор Dockerfile [RU]