Docker 및 Compose
IronFlock 앱은 Docker 이미지로 패키징됩니다. Dockerfile은 애플리케이션 코드의 런타임 환경을 정의합니다.
Dockerfile
모든 앱은 루트 폴더에 Dockerfile이 필요합니다. 이 파일은 기본 이미지에서 시작하여 앱을 위한 Linux 환경을 구성합니다:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "main.py"]전체 구문 참조는 공식 Dockerfile 문서를 참조하십시오.
멀티 아키텍처 지원
다양한 디바이스 아키텍처를 타겟으로 하려면 아키텍처별 Dockerfile을 추가하십시오:
| 파일 | 아키텍처 | 디바이스 예시 |
|---|---|---|
Dockerfile | 기본 (폴백으로 사용) | 모든 디바이스 |
Dockerfile.armv7 | ARMv7 | Raspberry Pi 3/4 (32비트) |
Dockerfile.arm64 | ARM64 | NVIDIA Jetson, RPi 4/5 (64비트) |
Dockerfile.amd64 | AMD64 | 산업용 PC, Intel NUC |
릴리스를 빌드할 때 IronFlock은 각 타겟 아키텍처에 맞는 가장 구체적인 Dockerfile을 선택합니다. 아키텍처별 파일이 없으면 기본 Dockerfile이 사용됩니다.
Docker Compose
여러 서비스가 있는 앱(예: 웹 서버 + 데이터베이스 + 워커)의 경우 Docker Compose를 사용하십시오:
# docker-compose.yml
version: "3"
services:
app:
build: .
volumes:
- /data:/data
- /shared:/shared
ports:
- "5000:5000"
restart: unless-stopped
redis:
image: redis:7-alpine
restart: unless-stopped루트 폴더에 docker-compose.yml을 배치합니다. Dockerfile 대신 또는 함께 사용할 수 있습니다. 사용자가 디바이스에서 앱을 시작하거나 중지하면 전체 Compose 스택이 하나의 단위로 관리됩니다.
Docker Compose를 사용하면 다음을 더 세밀하게 제어할 수 있습니다:
- 볼륨 마운트 및 데이터 지속성
- 서비스 네트워킹
- 리소스 제한
- 다중 컨테이너 아키텍처
모범 사례
- 이미지를 작게 유지 — 제한된 디바이스에서의 다운로드 시간을 줄이기 위해
-slim또는-alpine기본 이미지를 사용하십시오. - 버전 고정 — 재현 가능한 빌드를 위해
latest대신 특정 버전 태그(python:3.11-slim)를 사용하십시오. - 레이어 캐시 활용 — Docker 레이어 캐싱을 활용하려면 애플리케이션 코드보다 의존성 파일을 먼저 복사하십시오.
.dockerignore사용 — 빌드 컨텍스트에서 불필요한 파일(문서, 테스트,.git)을 제외하십시오.
Last updated on