본문 바로가기

Program

Docker 컨테이너 포트 열기(Publishing Ports) 완전 정복 가이드

반응형

 

🚀 Docker 컨테이너 포트 열기(Publishing Ports) 

Docker를 처음 사용하는 분들이 가장 자주 마주하는 질문 중 하나는 바로 이것입니다.

"내가 실행한 Docker 컨테이너에 외부에서 접속하려면 어떻게 해야 하나요?"

정답은 컨테이너의 포트를 외부에 열어주는 것, 즉 Docker의 Port Publishing 기능을 활용하는 것입니다. 이번 글에서는 Docker 컨테이너에서 포트를 노출(publish) 하는 방법과 동작 원리를 자세히 알아보겠습니다.


🔍 Docker에서 "포트를 연다"는 의미는?

컨테이너 내부에서 실행되는 애플리케이션(예: 웹 서버)은 특정 포트(예: 80번 포트)에서 요청을 대기합니다.
하지만 이 포트는 기본적으로 외부에서는 접근할 수 없습니다.

즉, docker run 명령어로 컨테이너를 실행하더라도, 포트를 명시적으로 publish 하지 않으면 외부 브라우저나 API 클라이언트에서 접속할 수 없습니다.


🔐 포트 퍼블리시의 기본 구문

docker run -p [호스트포트]:[컨테이너포트] [이미지명]

예를 들어, 컨테이너 내부에서 80번 포트로 웹 서버가 열려있을 경우:

docker run -d -p 8080:80 nginx

위 명령은 다음과 같은 의미입니다:

  • 컨테이너 내부의 80번 포트를 호스트의 8080번 포트에 연결
  • 사용자는 웹 브라우저에서 http://localhost:8080 으로 접속 가능

🧪 실전 예제

1. Nginx 웹 서버 실행

docker run -d --name webserver -p 8080:80 nginx
  • 컨테이너 이름: webserver
  • 브라우저에서 http://localhost:8080 접속 → Nginx welcome page 확인 가능
반응형

 

2. Flask 앱 실행

Dockerfile 예시:

FROM python:3.11-slim
WORKDIR /app
COPY . .
RUN pip install flask
CMD ["python", "app.py"]

app.py:

from flask import Flask
app = Flask(__name__)

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

app.run(host="0.0.0.0", port=5000)

빌드 후 실행:

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

→ http://localhost:8080 에 접속하면 Flask 앱이 동작!


⚙️ Docker Compose에서 포트 열기

docker-compose.yml에서 ports 옵션으로 지정할 수 있습니다:

services:
  web:
    image: nginx
    ports:
      - "8080:80"

→ docker compose up -d 실행 시 포트 자동 매핑


🌐 여러 포트를 동시에 노출할 수 있을까?

네. 다음처럼 여러 포트를 열 수 있습니다:

docker run -d -p 8080:80 -p 443:443 nginx
  • 8080 → HTTP
  • 443 → HTTPS (SSL 인증서 연동 시 사용)

🛑 퍼블리시 안 한 포트는?

만약 -p 옵션 없이 컨테이너를 실행했다면:

docker run -d nginx

이 경우, 컨테이너 안에서는 정상적으로 작동하더라도 외부에서는 접근이 불가능합니다. 이는 보안 측면에서는 장점이지만, 개발/테스트 목적이라면 명시적으로 포트를 열어줘야 합니다.


💡 Tip: 랜덤 포트 할당도 가능

docker run -d -P nginx

-P 옵션은 Docker가 컨테이너의 노출 가능한 모든 포트랜덤 호스트 포트에 매핑해줍니다.

확인 방법:

docker ps

→ PORTS 열에서 0.0.0.0:49153->80/tcp 와 같은 랜덤 포트 확인 가능


🧭 마무리

Docker 컨테이너에서 외부와 통신하려면 반드시 포트 퍼블리시(port publishing) 를 해주어야 합니다.
-p 호스트포트:컨테이너포트 형태만 이해하면 대부분의 웹/서버 기반 프로젝트에 Docker를 적용하는 데 문제가 없습니다.

이제 여러분도 Docker로 웹 서버, API 서버, DB 등을 자유롭게 외부와 연결해보세요!


📌 공식 문서 참고
https://docs.docker.com/get-started/docker-concepts/running-containers/publishing-ports/


Docker Desktop 설치 가이드 (윈도우 & 맥 완전 정복)

 

Docker Desktop 설치 가이드 (윈도우 & 맥 완전 정복)

🐳 Docker Desktop 설치 가이드 (윈도우 & 맥 완전 정복)Docker는 현대 소프트웨어 개발에서 필수 도구로 자리잡았습니다. 다양한 운영체제에서 컨테이너를 실행할 수 있게 해주며, 개발부터 배포까지

jjig810906.tistory.com

 

Docker Hub API 완전 정복 가이드

 

Docker Hub API 완전 정복 가이드

🚢 Docker Hub API 완전 정복 가이드 (최신 버전 기준)Docker는 현대 DevOps 환경에서 빼놓을 수 없는 컨테이너 기술입니다. 이 중 Docker Hub는 이미지 저장소 역할을 하며, 공식 이미지부터 커스텀 이미지

jjig810906.tistory.com

 

반응형