Docker 컨테이너 사용자 지정 포트를 호스트에 매핑하는 방법

DockerBeginner
지금 연습하기

소개

Docker 는 일관되고 격리된 환경에서 애플리케이션을 패키징하고 배포할 수 있는 인기 있는 컨테이너화 플랫폼입니다. Docker 의 주요 기능 중 하나는 컨테이너의 포트를 호스트 머신으로 매핑할 수 있는 기능으로, 외부에서 컨테이너화된 애플리케이션에 액세스할 수 있도록 합니다. 이 튜토리얼에서는 Docker 컨테이너의 사용자 지정 포트를 호스트에 매핑하는 방법을 탐색하여 Docker 기반 애플리케이션을 효과적으로 관리하고 액세스하는 지식을 제공합니다.

Docker 포트 매핑 소개

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

Docker 컨테이너를 실행하면 일반적으로 자체 내부 네트워크에서 실행되고 특정 포트에서 수신 대기합니다. 컨테이너 내에서 실행 중인 애플리케이션에 액세스하려면 컨테이너의 포트를 호스트 머신의 포트로 매핑해야 합니다.

포트 매핑은 다양한 용도에 필수적입니다.

  1. 웹 애플리케이션: Docker 컨테이너 내에서 웹 서버를 실행할 때 사용자가 웹 브라우저를 통해 애플리케이션에 액세스할 수 있도록 컨테이너의 포트 (예: 80 또는 8080) 를 호스트 머신의 포트로 매핑해야 합니다.

  2. 데이터베이스: Docker 컨테이너 내에서 데이터베이스 서버를 실행할 때 다른 애플리케이션이 데이터베이스에 연결할 수 있도록 컨테이너의 포트 (예: MySQL 의 경우 3306) 를 호스트 머신의 포트로 매핑해야 합니다.

  3. 마이크로서비스: 마이크로서비스 아키텍처에서 각 서비스는 자체 Docker 컨테이너에서 실행될 수 있습니다. 포트 매핑은 서로 다른 서비스와 외부 세계 간의 통신을 허용하는 데 필요합니다.

Docker 포트 매핑 개념을 이해함으로써 컨테이너화된 애플리케이션의 네트워크 연결을 효과적으로 관리하고 호스트 머신 또는 다른 네트워크 클라이언트에서 액세스할 수 있도록 할 수 있습니다.

Docker 컨테이너에 사용자 지정 포트 매핑

호스트 머신에서 Docker 컨테이너로 사용자 지정 포트를 매핑하려면 docker run 명령을 실행할 때 -p 또는 --publish 플래그를 사용할 수 있습니다.

기본 구문은 다음과 같습니다.

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

예제는 다음과 같습니다.

docker run -p 8080:80 nginx

이 예제에서 호스트 머신의 포트 8080은 Nginx 컨테이너 내부의 포트 80으로 매핑됩니다. 즉, 호스트 머신에서 http://localhost:8080에 액세스하면 컨테이너 내에서 실행 중인 Nginx 웹 서버에 연결할 수 있습니다.

여러 포트를 매핑하려면 -p 플래그를 여러 번 지정할 수 있습니다.

docker run -p 8080:80 -p 3306:3306 mysql

이렇게 하면 호스트의 포트 8080이 컨테이너의 포트 80으로, 호스트의 포트 3306이 컨테이너의 포트 3306으로 매핑됩니다.

호스트 머신의 사용 가능한 임의의 포트를 컨테이너에 매핑하려면 다음 구문을 사용할 수 있습니다.

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

예를 들어:

docker run -p 80 nginx

이 경우 Docker 는 호스트 머신의 사용 가능한 포트를 자동으로 할당하고 컨테이너의 포트 80으로 매핑합니다.

docker ps 명령을 실행하여 포트 매핑을 확인할 수 있습니다. 이 명령은 매핑된 포트를 표시합니다.

CONTAINER ID   IMAGE   COMMAND                  PORTS                 NAMES
abc123def456   nginx   "/docker-entrypoint.…"   0.0.0.0:8080->80/tcp   romantic_babbage

Docker 컨테이너에 사용자 지정 포트를 매핑하는 방법을 이해함으로써 컨테이너화된 애플리케이션을 외부 세계에 효과적으로 노출하고 컨테이너와 호스트 머신 또는 다른 네트워크 클라이언트 간의 통신을 가능하게 할 수 있습니다.

실제 사용 사례 및 예제

웹 서버 실행

컨테이너 내부에서 포트 80에서 수신 대기하는 Docker 컨테이너 내의 웹 애플리케이션이 있다고 가정합니다. 호스트 머신에서 애플리케이션에 액세스하려면 컨테이너의 포트 80을 호스트의 사용자 지정 포트, 예를 들어 8080으로 매핑할 수 있습니다.

docker run -p 8080:80 my-web-app

이제 호스트 머신에서 http://localhost:8080을 방문하여 웹 애플리케이션에 액세스할 수 있습니다.

데이터베이스 서버 노출

Docker 컨테이너에서 실행 중인 데이터베이스 서버 (예: MySQL) 가 있다면 컨테이너의 데이터베이스 포트 (예: 3306) 를 호스트의 사용자 지정 포트로 매핑할 수 있습니다.

docker run -p 3306:3306 mysql

이렇게 하면 호스트 머신에서 실행 중인 다른 애플리케이션이 호스트의 포트 3306을 사용하여 컨테이너 내의 MySQL 데이터베이스 서버에 연결할 수 있습니다.

여러 포트 매핑

더 복잡한 시나리오에서는 웹 서버, 애플리케이션 서버, 데이터베이스와 같은 서로 다른 구성 요소가 별도의 Docker 컨테이너에서 실행되는 다중 계층 애플리케이션이 있을 수 있습니다. 이러한 구성 요소를 노출하기 위해 여러 포트를 매핑할 수 있습니다.

docker run -p 8080:80 -p 8000:8000 -p 3306:3306 my-app

이렇게 하면 호스트의 포트 8080이 컨테이너의 포트 80(웹 서버), 호스트의 포트 8000이 컨테이너의 포트 8000(애플리케이션 서버), 호스트의 포트 3306이 컨테이너의 포트 3306(데이터베이스 서버) 으로 매핑됩니다.

임의 포트 매핑 사용

호스트 머신의 특정 포트를 지정하지 않고 Docker 가 사용 가능한 포트를 자동으로 할당하도록 할 수 있습니다.

docker run -p 80 my-web-app

이 경우 Docker 는 컨테이너의 포트 80을 호스트 머신의 사용 가능한 포트로 매핑합니다. 할당된 포트는 docker ps 명령을 사용하여 확인할 수 있습니다.

이러한 실제 사용 사례와 예제를 이해함으로써 Docker 의 포트 매핑 기능을 효과적으로 활용하여 컨테이너화된 애플리케이션 및 서비스를 외부 세계에 노출하고 원활한 통신 및 애플리케이션 액세스를 가능하게 할 수 있습니다.

요약

이 튜토리얼에서는 Docker 컨테이너의 사용자 지정 포트를 호스트 머신에 매핑하는 방법을 배웠습니다. 포트 매핑 프로세스를 이해함으로써 이제 호스트에서 컨테이너화된 애플리케이션에 액세스하여 Docker 기반 서비스를 더 효과적으로 상호 작용하고 관리할 수 있습니다. 이 가이드에서 제공하는 실제 사용 사례와 예제를 통해 이러한 개념을 사용자의 Docker 기반 프로젝트 및 배포에 적용하는 데 도움이 될 것입니다.