Dockerfile로 포트 노출

중급 Docker

Mike Metzger

Data Engineer

서비스 노출

  • EXPOSE 명령
  • 컨테이너가 런타임에 사용할 포트 지정
  • <number>, <number>/tcp, <number>/udp 형식 가능
    • 예: EXPOSE 80, EXPOSE 80/tcp
  • 여러 개 지정 가능
  • 문서화 용도
중급 Docker

-p / -P 플래그 사용

  • 컨테이너 밖에서 사용하려면 docker run-p 또는 -P가 여전히 필요합니다
  • -P는 노출된 포트에 임시 포트를 자동 매핑합니다. 어떤 포트가 매핑됐는지는 docker ps -a로 확인합니다.
  • -p<호스트 포트>:<컨테이너 포트>로 특정 포트를 지정할 수 있습니다.
중급 Docker

EXPOSE 예시

# Dockerfile
FROM python:3.11-slim
ENTRYPOINT ["python","-mhttp.server"]
# Docker 엔진에 알림: 
# 포트 8000을 사용할 수 있어야 함
EXPOSE 8000
  • 이미지로 컨테이너 생성
    docker run pyserver
    
  • 컨테이너 상태 출력
    docker ps -a
    
CONTAINER ID   IMAGE         ...   PORTS      NAMES
8c3d320255ae   pyserver      ...   8000/tcp   angry_chaum
중급 Docker

포트 연결 가능하게 만들기

  • 호스트의 임시 포트를 컨테이너에 자동 매핑
    docker run -P pyserver
    
docker ps -a
CONTAINER ID   IMAGE      ...   PORTS                     NAMES
6bb458ef25da   pyserver   ...   0.0.0.0:55001->8000/tcp   beautiful_lamarr
중급 Docker

노출된 포트 찾기

  • docker inspect는 많은 정보를 제공합니다
    docker inspect <id>
    
"NetworkSettings": {
  "Bridge": "",
  "Ports": {
    "8000/tcp": [{
                   "HostIp": "0.0.0.0",
                   "HostPort": "55001"
                    }]
            },
...
중급 Docker

연습해 봅시다!

중급 Docker

Preparing Video For Download...