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

도커 컨테이너는 가상화된 환경에서 독립적으로 실행되는 소프트웨어 유닛입니다. 컨테이너는 호스트 시스템과 격리되어 있으며, 필요한 리소스만 사용하여 가볍고 빠르게 실행될 수 있습니다.

도커 컨테이너 내부에서 실행되는 애플리케이션은 컨테이너 내부에서만 접근 가능한 포트를 가지고 있습니다. 이러한 상황에서 호스트 시스템과 컨테이너 간에 네트워크 통신을 하기 위해서는 포트 매핑이 필요합니다.

도커는 호스트 시스템의 포트와 컨테이너의 포트를 매핑하여 호스트 시스템의 포트를 통해 컨테이너의 애플리케이션에 접근할 수 있도록 합니다. 이를 통해 컨테이너의 애플리케이션을 외부에서 접근할 수 있게 되고, 네트워크 통신이 가능해집니다.

포트 매핑 설정하기

도커에서 컨테이너와 호스트 간 포트 매핑을 설정하는 방법은 매우 간단합니다. -p 또는 –publish 옵션을 사용하여 호스트 포트와 컨테이너 포트를 지정합니다.

docker run -p <호스트 포트>:<컨테이너 포트> <이미지 이름>

예를 들어, 호스트 포트 8080으로 컨테이너의 80 포트에 매핑하는 경우 다음과 같이 명령어를 실행할 수 있습니다.

docker run -p 8080:80 <이미지 이름>

예제

다음은 Python Flask를 사용한 간단한 웹 애플리케이션의 도커 컨테이너와 호스트 간 포트 매핑 예제입니다.

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, Docker!"

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

위 예제는 Flask로 작성된 웹 애플리케이션 코드입니다. 컨테이너 내부에서는 80 포트로 애플리케이션이 실행됩니다.

도커 이미지를 빌드하고 포트 매핑을 설정하기 위해 다음과 같은 Dockerfile을 작성합니다.

FROM python:3.9-slim

WORKDIR /app

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

COPY . .

EXPOSE 80

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

위 Dockerfile을 통해 도커 이미지를 빌드하고 호스트 포트와 컨테이너 포트를 매핑하여 컨테이너를 실행할 수 있습니다.

docker build -t myapp .
docker run -p 8080:80 myapp

위 명령어를 실행하면 호스트의 8080 포트로 컨테이너의 80 포트에 접근할 수 있게 됩니다.

도커 컨테이너와 호스트 간 포트 매핑은 애플리케이션을 개발하거나 배포할 때 매우 유용한 기능입니다. 포트 매핑을 통해 도커 컨테이너를 외부에 노출시키고 네트워크 통신을 가능하게 할 수 있습니다.