자바칩

Dockerfile을 이용하여 이미지를 빌드하기 본문

Study

Dockerfile을 이용하여 이미지를 빌드하기

아기제이 2025. 3. 25. 13:37
728x90

1. Dockerfile 생성 (Python 3.9.13 버전과 Flask 기준)

# Python 3.9.13 slim 이미지 사용
FROM python:3.9.13-slim

# 작업 디렉토리 생성
WORKDIR /app

# 의존성 설치 (pip 먼저 requirements.txt)
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

# 소스 코드 전체 복사
COPY . .

# Flask 앱 실행 (app.py 기준)
CMD ["python", "app.py"]

 

 

2. WSL2에서 명령어 실행

# 프로젝트 루트로 이동
cd /mnt/c/프로젝트

# Docker 이미지 빌드
docker build -t flask-app .

# Docker 컨테이너 실행 (포트 5000 바인딩)
docker run -p 5000:5000 flask-app

 

/mnt/c는 Windows의 C: 드라이브를 마운트한 위치.

예를 들어, 윈도우에서 C:\Users\user는 리눅스에서 /mnt/c/Users/user와 같다.

 

docker run -p 호스트포트:컨테이너포트
  • 왼쪽 5000: 내 컴퓨터(호스트)의 포트 번호
  • 오른쪽 5000: 컨테이너 안에서 Flask 앱이 실행되고 있는 포트 번호

“내 컴퓨터의 5000번 포트로 들어오는 요청을, 컨테이너 내부의 5000번 포트로 전달해라”

 

즉, Flask 앱이 컨테이너 내부에서 app.run(port=5000)으로 돌고 있을 때
내 브라우저에서 http://localhost:5000에 접속하면
→ 그 요청이 도커 컨테이너 안의 Flask 서버로 전달됨.

 

docker run -p 8888:5000 flask-app
  • 컨테이너 안에서는 Flask가 5000번 포트에서 실행 중
  • 근데 나는 호스트의 8888번 포트를 통해 접속할 수 있음

즉, 브라우저에서 http://localhost:8888 입력하면 Flask 앱이 나옴.

 

 

Flask 코드도 확인 필요

Flask가 host='0.0.0.0' 으로 바인딩되어 있어야 외부에서 접근 가능:

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=True)

 

127.0.0.1이면 컨테이너 내부에서만 접근 가능해서 외부(브라우저)에서 안 보임