[파이썬] 도커 컨테이너와 호스트 간 포트 매핑

도커(Docker)는 컨테이너 가상화 플랫폼으로, 애플리케이션을 격리된 환경에서 실행시키는 데 사용됩니다. 도커를 사용하면 애플리케이션의 실행 환경을 포함하여 모든 종속성을 하나의 패키지로 묶을 수 있으며, 호스트 시스템과 완전히 격리된 상태에서 실행됩니다.

도커 컨테이너를 호스트 시스템과 통신하기 위해서는 컨테이너 내의 포트와 호스트 시스템의 포트를 연결해야 합니다. 이를 포트 매핑이라고 합니다. 포트 매핑을 통해 호스트 시스템의 특정 포트로 들어오는 요청을 도커 컨테이너 내의 포트로 전달할 수 있습니다.

포트 매핑 예제 - Python Flask 애플리케이션

다음은 Python Flask를 사용하여 간단한 웹 애플리케이션을 도커 컨테이너 내에서 실행하고, 호스트 시스템의 포트와 연결하는 방법을 보여주는 예제입니다.

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

위의 코드는 Hello, World!를 반환하는 간단한 Flask 애플리케이션입니다. 이 애플리케이션을 도커 컨테이너 내에서 실행하려면 다음과 같이 Dockerfile을 생성합니다.

FROM python:3.8-slim-buster

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY app.py .

CMD ["python", "app.py"]

위의 Dockerfile은 Python 3.8-slim-buster 베이스 이미지를 사용하여 필요한 패키지를 설치하고, 애플리케이션 파일을 컨테이너 내의 /app 디렉토리로 복사한 후 애플리케이션을 실행하는 명령어를 정의합니다.

이제 도커 이미지를 빌드하고 컨테이너를 실행합니다. 이때, 포트 매핑을 수행하여 호스트 시스템의 특정 포트와 컨테이너 내의 포트를 연결합니다.

$ docker build -t flask-app .
$ docker run -d -p 8080:5000 flask-app

위의 명령어는 flask-app이라는 이름으로 도커 이미지를 빌드하고, 호스트 시스템의 8080 포트와 컨테이너 내의 5000 포트를 연결하여 컨테이너를 실행합니다.

이제 웹 브라우저에서 http://localhost:8080에 접속하면 Hello, World! 메시지가 출력됩니다. 이는 호스트 시스템의 8080 포트가 도커 컨테이너 내의 5000 포트로 포트 매핑되어 요청이 전달되기 때문입니다.

도커 컨테이너와 호스트 간의 포트 매핑은 컨테이너화된 애플리케이션을 외부에서 접근 가능하게 만들기 위해 중요한 개념입니다. 이를 통해 도커를 사용하여 효율적이고 격리된 애플리케이션 실행 환경을 구축할 수 있습니다.