Docker 컨테이너와 호스트 간 포트 매핑 방법

DockerBeginner
지금 연습하기

소개

Docker 는 개발자가 일관되고 재현 가능한 방식으로 애플리케이션을 패키징하고 배포할 수 있도록 지원하는 강력한 컨테이너화 플랫폼입니다. Docker 를 사용할 때 중요한 측면 중 하나는 컨테이너와 호스트 시스템 간의 포트 매핑을 통해 통신 및 컨테이너화된 애플리케이션에 대한 액세스를 가능하게 하는 것입니다. 이 튜토리얼에서는 Docker 의 포트 매핑 프로세스를 기본 사항과 실제 응용 분야를 포함하여 안내합니다.

Docker 포트 매핑 소개

Docker 는 개발자가 일관되고 격리된 환경에서 애플리케이션을 패키징하고 배포할 수 있도록 지원하는 인기 있는 컨테이너화 플랫폼입니다. Docker 의 주요 기능 중 하나는 컨테이너와 호스트 머신 간의 포트를 매핑하여 컨테이너화된 애플리케이션과 외부 세계 간의 통신을 가능하게 하는 것입니다.

포트 매핑이란 무엇인가요?

포트 매핑 (포트 포워딩이라고도 함) 은 호스트 머신의 한 포트에서 Docker 컨테이너 내의 특정 포트로 트래픽을 리디렉션하는 프로세스입니다. 이를 통해 컨테이너는 특정 포트에서 서비스를 노출하고, 호스트 머신은 다른 포트를 사용하여 해당 서비스에 액세스할 수 있습니다.

포트 매핑이 중요한 이유는 무엇인가요?

포트 매핑은 다음과 같은 여러 가지 이유로 필수적입니다.

  1. 접근성: 포트 매핑 없이는 컨테이너화된 애플리케이션이 컨테이너 외부에서 접근할 수 없어 활용도와 다른 시스템과의 통합이 제한됩니다.
  2. 유연성: 포트 매핑을 통해 동일한 호스트 머신에 여러 컨테이너를 실행하고 각 컨테이너가 서로 다른 포트에서 서비스를 노출할 수 있습니다.
  3. 보안: 특정 포트를 매핑하여 컨테이너화된 애플리케이션에 대한 액세스를 제어하고 제한하여 시스템의 전반적인 보안을 향상시킬 수 있습니다.

Docker 포트 매핑 구문 이해

Docker 컨테이너와 호스트 머신 간의 포트 매핑 구문은 다음과 같습니다.

-p <호스트_포트>:<컨테이너_포트>

여기서 <호스트_포트>는 컨테이너화된 애플리케이션에 액세스하는 데 사용될 호스트 머신의 포트이고, <컨테이너_포트>는 애플리케이션이 대기 중인 컨테이너 내의 포트입니다.

예를 들어, 호스트 머신의 포트 80 을 컨테이너 내의 포트 8080 으로 매핑하려면 다음 명령을 사용합니다.

docker run -p 80:8080 my-app

이렇게 하면 호스트 머신의 http://localhost:80을 방문하여 컨테이너화된 애플리케이션에 액세스할 수 있습니다.

컨테이너와 호스트 간 포트 매핑

포트 매핑 프로세스 이해

Docker 컨테이너와 호스트 머신 간의 포트 매핑 프로세스는 다음 단계를 포함합니다.

  1. 컨테이너화된 애플리케이션이 수신 대기하는 포트 (들) 식별: 일반적으로 애플리케이션 문서 또는 Dockerfile 에 명시되어 있습니다.
  2. 애플리케이션에 액세스하기 위해 사용할 호스트 머신의 포트 (들) 결정: 호스트 머신의 사용 가능한 포트를 사용할 수 있습니다.
  3. Docker 컨테이너를 실행할 때 -p 또는 --publish 플래그 사용: 이를 통해 호스트 포트를 컨테이너 포트에 매핑할 수 있습니다.

컨테이너 생성 시 포트 매핑

컨테이너 생성 시 포트를 매핑하려면 docker run 명령과 함께 -p 또는 --publish 플래그를 사용할 수 있습니다. 구문은 다음과 같습니다.

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

예를 들어, 호스트 머신의 포트 80 을 컨테이너 내의 포트 8080 으로 매핑하려면 다음 명령을 사용합니다.

docker run -p 80:8080 my-app

실행 중인 컨테이너의 포트 매핑

docker port 명령을 사용하여 이미 실행 중인 컨테이너의 포트를 매핑할 수도 있습니다. 구문은 다음과 같습니다.

docker port <컨테이너_이름_또는_ID> <컨테이너_포트>

이렇게 하면 지정된 컨테이너 포트에 매핑된 호스트 포트가 표시됩니다.

여러 포트 노출

컨테이너와 호스트 머신 간에 여러 포트를 매핑하려면 -p 플래그를 여러 번 사용할 수 있습니다. 예를 들어:

docker run -p 80:8080 -p 443:8443 my-app

이렇게 하면 호스트의 포트 80 을 컨테이너의 포트 8080 에, 호스트의 포트 443 을 컨테이너의 포트 8443 에 매핑합니다.

포트 매핑의 실제 활용 사례

컨테이너 내 웹 서버 실행

포트 매핑의 가장 일반적인 용도 중 하나는 Docker 컨테이너 내에서 웹 서버를 실행하는 것입니다. 컨테이너의 웹 서버 포트를 호스트 머신의 포트에 매핑하면 웹 브라우저를 통해 웹 애플리케이션에 쉽게 액세스할 수 있습니다.

예를 들어, Docker 컨테이너에서 Nginx 웹 서버를 실행하고 호스트의 포트 80 을 컨테이너의 포트 80 으로 매핑하려면 다음 명령을 사용할 수 있습니다.

docker run -p 80:80 nginx

데이터베이스 포트 노출

포트 매핑의 또 다른 일반적인 용도는 컨테이너의 데이터베이스 포트를 호스트 머신에 노출하는 것입니다. 이를 통해 외부 애플리케이션이 컨테이너 내에서 실행되는 데이터베이스에 연결할 수 있습니다.

예를 들어, Docker 컨테이너에서 MySQL 데이터베이스를 실행하고 호스트의 포트 3306 을 컨테이너의 포트 3306 으로 매핑하려면 다음 명령을 사용할 수 있습니다.

docker run -p 3306:3306 mysql

원격에서 컨테이너화된 서비스에 액세스

포트 매핑을 통해 원격 위치에서 컨테이너화된 서비스에 액세스할 수도 있습니다. 호스트 머신의 포트를 컨테이너의 포트에 매핑하면 호스트 머신에 액세스할 수 있는 모든 머신에서 컨테이너화된 서비스에 연결할 수 있습니다.

이는 웹 애플리케이션, API 또는 모니터링 도구와 같이 여러 사용자 또는 다양한 위치에서 액세스해야 하는 서비스에 특히 유용합니다.

컨테이너화된 애플리케이션 확장

컨테이너화된 애플리케이션의 여러 인스턴스를 실행할 때 포트 매핑은 로드 밸런싱 및 확장에 필수적입니다. 서로 다른 호스트 포트를 동일한 컨테이너 포트에 매핑하면 들어오는 트래픽을 여러 컨테이너 인스턴스에 분산할 수 있습니다.

이를 통해 포트 충돌이나 액세스 문제에 대해 걱정하지 않고 수요에 따라 애플리케이션을 쉽게 확장하거나 축소할 수 있습니다.

요약

이 튜토리얼에서는 Docker 에서 포트 매핑의 중요성과 Docker 컨테이너와 호스트 시스템 간의 포트를 효과적으로 매핑하는 방법을 배웠습니다. 포트 매핑의 개념과 실제 응용 사례를 이해함으로써 컨테이너화된 애플리케이션과의 원활한 통신 및 액세스를 보장하고 Docker 워크플로우를 더욱 효율적이고 다용도로 만들 수 있습니다.