소개
Docker 는 개발자가 일관되고 재현 가능한 방식으로 애플리케이션을 패키징하고 배포할 수 있도록 지원하는 강력한 컨테이너화 플랫폼입니다. Docker 를 사용할 때 중요한 측면 중 하나는 컨테이너와 호스트 시스템 간의 포트 매핑을 통해 통신 및 컨테이너화된 애플리케이션에 대한 액세스를 가능하게 하는 것입니다. 이 튜토리얼에서는 Docker 의 포트 매핑 프로세스를 기본 사항과 실제 응용 분야를 포함하여 안내합니다.
Docker 는 개발자가 일관되고 재현 가능한 방식으로 애플리케이션을 패키징하고 배포할 수 있도록 지원하는 강력한 컨테이너화 플랫폼입니다. Docker 를 사용할 때 중요한 측면 중 하나는 컨테이너와 호스트 시스템 간의 포트 매핑을 통해 통신 및 컨테이너화된 애플리케이션에 대한 액세스를 가능하게 하는 것입니다. 이 튜토리얼에서는 Docker 의 포트 매핑 프로세스를 기본 사항과 실제 응용 분야를 포함하여 안내합니다.
Docker 는 개발자가 일관되고 격리된 환경에서 애플리케이션을 패키징하고 배포할 수 있도록 지원하는 인기 있는 컨테이너화 플랫폼입니다. Docker 의 주요 기능 중 하나는 컨테이너와 호스트 머신 간의 포트를 매핑하여 컨테이너화된 애플리케이션과 외부 세계 간의 통신을 가능하게 하는 것입니다.
포트 매핑 (포트 포워딩이라고도 함) 은 호스트 머신의 한 포트에서 Docker 컨테이너 내의 특정 포트로 트래픽을 리디렉션하는 프로세스입니다. 이를 통해 컨테이너는 특정 포트에서 서비스를 노출하고, 호스트 머신은 다른 포트를 사용하여 해당 서비스에 액세스할 수 있습니다.
포트 매핑은 다음과 같은 여러 가지 이유로 필수적입니다.
Docker 컨테이너와 호스트 머신 간의 포트 매핑 구문은 다음과 같습니다.
-p <호스트_포트>:<컨테이너_포트>
여기서 <호스트_포트>는 컨테이너화된 애플리케이션에 액세스하는 데 사용될 호스트 머신의 포트이고, <컨테이너_포트>는 애플리케이션이 대기 중인 컨테이너 내의 포트입니다.
예를 들어, 호스트 머신의 포트 80 을 컨테이너 내의 포트 8080 으로 매핑하려면 다음 명령을 사용합니다.
docker run -p 80:8080 my-app
이렇게 하면 호스트 머신의 http://localhost:80을 방문하여 컨테이너화된 애플리케이션에 액세스할 수 있습니다.
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 워크플로우를 더욱 효율적이고 다용도로 만들 수 있습니다.