# Dockerfile - python + uv + node + tailwindcss + fastapi
```Dockerfile
# pyproject.toml의 버전이 3.13으로 올라갔다면, 빌드할 때 인자만 바꿔줍니다.
# docker build --build-arg PYTHON_VERSION=3.13 -t my-fastapi-app .
# === 1단계: Tailwind CSS 빌드 환경 (Node) ===
FROM node:20-slim AS css-builder
WORKDIR /build
# 빌드에 필요한 소스 파일들을 도커 내부로 복사
COPY templates/ ./templates/
COPY static/ ./static/
# 3. 🚀 도커 안에서 직접 초압축 배포 빌드 명령어를 실행!
RUN npx @tailwindcss/cli -i ./static/src/input.css -o ./static/css/output.css --minify
# === 2단계: 실제 FastAPI 서비스 실행 환경 (Python + uv) ===
# 1. 외부에서 주입받을 파이썬 버전의 기본값을 정해둡니다.
ARG PYTHON_VERSION=3.12
# 2단계: 실제 실행용 경량화 스테이지
#FROM python:${PYTHON_VERSION}-slim
#FROM python:${PYTHON_VERSION}-slim-bookworm
FROM astralsh/uv:python:${PYTHON_VERSION}-slim AS python-builder
WORKDIR /app
# uv가 소스코드를 가상환경에 동기화할 때 바이트코드를 미리 생성하여 속도를 높입니다.
ENV UV_COMPILE_BYTECODE=1
ENV UV_LINK_MODE=copy
# 2. 파이썬 패키지 설치 (캐시 최적화)
# uv.lock 또는 requirements.txt를 먼저 복사하여 의존성을 먼저 굽습니다.
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-cache
# 3. 내 소스 파일들 제 위치로 복사 🚀
COPY app/ ./app/
COPY templates/ ./templates/
# === 3단계: 최종 실행 환경 (가장 슬림함) ===
FROM python:${PYTHON_VERSION}-slim
WORKDIR /app
# 2단계에서 완성된 uv 가상환경(.venv) 복사
COPY --from=python-builder /app/.venv /app/.venv
# 파이썬 소스 코드 및 HTML 파일 복사
COPY app/ ./app/
COPY templates/ ./templates/
# 1단계에서 빌드가 완공된 완제품 static 폴더(output.css 포함)만 쏙 가져옴
COPY --from=css-builder /build/static/ ./static/
# 컨테이너 외부 접근을 위해 8000번 포트를 열어둡니다.
EXPOSE 8000
# 앞서 배웠던 Production 최적화 명령어 'fastapi run'으로 서버를 가동합니다.
CMD ["fastapi", "run", "app/main.py", "--host", "0.0.0.0", "--port", "8000"]
```
---
```bash
# build.sh
#!/bin/bash
# 1. pyproject.toml에서 'requires-python = ">=3.12"' 같은 라인을 찾아 숫자만 추출합니다.
# (정규식을 이용해 3.12 같은 버전 숫자만 자동으로 따옵니다.)
PYTHON_VER=$(grep -oE 'requires-python\s*=\s*"[^"]+"' pyproject.toml | grep -oE '[0-9]+\.[0-9]+')
echo "🎯 pyproject.toml에서 인식된 파이썬 버전: $PYTHON_VER"
# 2. 추출한 버전을 도커 ARG 인자로 넘겨주며 빌드합니다.
# 'my-fastapi-app'이라는 이름으로 도커 이미지를 빌드합니다.
#docker build --build-arg PYTHON_VERSION=$PYTHON_VER -t my-fastapi-app .
# 내 컴퓨터의 8000 포트와 도커의 8000 포트를 연결하고 백그라운드(-d)로 실행합니다.
#docker run -d -p 8000:8000 --name fastapi-server my-fastapi-app
```
---
```yaml
# deploy.yml
- name: pyproject.toml에서 파이썬 버전 추출하기
id: get-version
uses: c-py/action-current-python-version@v1
with:
pyproject-toml: "pyproject.toml"
- name: 자동으로 인식된 버전으로 도커 빌드하기
run: |
docker build --build-arg PYTHON_VERSION=${{ steps.get-version.outputs.version }} -t my-fastapi-app .
```
본 공간은 인공지능(AI)이 도출한 방대한 지식을 일목요연하게 큐레이션하여 기록하는 블로그입니다. 기술적 한계로 인해 모든 정보의 완벽한 정확성을 보장하기는 어려우므로, 최종적인 판단과 책임은 독자 본인에게 있음을 정중히 안내해 드립니다.
2026년 7월 21일 화요일
# Dockerfile - python + uv + node + tailwindcss + fastapi
database.py
import os from contextlib import contextmanager # contextmanager 임포트 from typing import Generator from dotenv...
-
bool atob(const char * string) { if (!strcmp(string, "true")) return true; return false; }
-
/// CXXXView.cpp void CXXXView::OnInitialUpdate() { CView::OnInitialUpdate(); // TODO: Add your specialized code here and/or call the ...
-
WxWidgets: http://www.wxwidgets.org/downloads/ MinGW: http://sourceforge.net/projects/mingw/files/ * Microsoft Windows Environment Var...