Docker 컨테이너 port 명령어를 사용하여 포트 매핑 나열하는 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 실행 중인 Docker 컨테이너의 포트 매핑을 검사하기 위해 docker port 명령어를 사용하는 방법을 배우게 됩니다. 먼저, 포트가 게시된 Nginx 컨테이너를 시작한 다음, 컨테이너에 대해 게시된 모든 포트 매핑을 나열하는 방법을 살펴봅니다.

또한 특정 TCP 및 UDP 포트 매핑을 나열하는 방법과 존재하지 않는 UDP 매핑을 쿼리할 때의 동작 방식을 배우게 됩니다. 마지막으로, 프로토콜을 명시적으로 지정하지 않고 특정 게시된 포트 매핑을 나열하는 방법을 시연합니다.

게시된 포트와 함께 컨테이너 시작

이 단계에서는 Docker 컨테이너를 시작하고 해당 포트를 호스트 머신에 게시하는 방법을 배우겠습니다. 포트를 게시하면 컨테이너 내에서 실행되는 서비스에 외부에서 접근할 수 있습니다.

먼저, Docker Hub 에서 nginx 이미지를 가져오겠습니다. 이 이미지는 데모에 사용할 수 있는 간단한 웹 서버를 포함하고 있습니다.

docker pull nginx

이미지가 다운로드되고 있음을 나타내는 출력을 볼 수 있습니다. 다운로드가 완료되면 다음을 실행하여 이미지가 로컬에서 사용 가능한지 확인할 수 있습니다.

docker images

이제 nginx 컨테이너를 시작하고 컨테이너 내부의 포트 80 을 호스트 머신의 포트 8080 으로 게시합니다. -d 플래그는 컨테이너를 detached 모드 (백그라운드) 로 실행하고, -p 플래그는 포트를 매핑하며, nginx는 이미지 이름입니다.

docker run -d -p 8080:80 nginx

출력은 컨테이너 ID 가 됩니다. 이는 컨테이너가 성공적으로 시작되었으며 내부 포트 80 에 LabEx VM 의 포트 8080 을 통해 접근할 수 있음을 의미합니다.

웹 서버가 실행 중이고 접근 가능한지 확인하기 위해 curl을 사용하여 호스트 머신에서 게시된 포트에 접근할 수 있습니다.

curl http://localhost:8080

터미널에서 기본 Nginx 환영 페이지 HTML 출력을 볼 수 있습니다. 이는 포트 매핑이 올바르게 작동하고 컨테이너 내에서 실행되는 서비스에 호스트에서 접근할 수 있음을 확인합니다.

컨테이너에 대한 모든 게시된 포트 매핑 나열

이 단계에서는 실행 중인 Docker 컨테이너에 대한 게시된 포트 매핑을 나열하는 방법을 배우겠습니다. 이는 어떤 포트가 노출되었는지, 그리고 호스트에 어떻게 매핑되었는지 확인하는 데 유용합니다.

docker port 명령어를 컨테이너 ID 또는 이름과 함께 사용하여 특정 컨테이너에 대한 모든 게시된 포트 매핑을 나열할 수 있습니다. 먼저, 이전 단계에서 시작한 nginx 컨테이너의 컨테이너 ID 를 얻어보겠습니다.

docker ps -q --filter ancestor=nginx

이 명령어는 컨테이너 ID 를 출력합니다. 다음 명령어에서 사용할 것이므로 이 ID 를 복사합니다.

이제 docker port 명령어를 컨테이너 ID 와 함께 사용하여 포트 매핑을 나열합니다. <container_id>를 실제로 얻은 ID 로 바꿉니다.

docker port <container_id>

80/tcp -> 0.0.0.0:8080과 유사한 출력을 볼 수 있습니다. 이는 컨테이너의 내부 포트 80(TCP 프로토콜 사용) 이 모든 호스트 인터페이스 (0.0.0.0) 의 포트 8080 에 매핑되었음을 나타냅니다.

이 명령어는 실행 중인 컨테이너에 대해 구성된 모든 포트 매핑을 빠르게 확인하는 방법입니다.

특정 게시된 TCP 포트 매핑 나열

이 단계에서는 docker port 명령어를 사용하여 프로토콜을 포함한 특정 게시된 포트 매핑을 나열하는 방법을 개선해 보겠습니다. 이는 컨테이너가 서로 다른 프로토콜로 여러 포트를 노출하는 경우 유용합니다.

특정 게시된 TCP 포트 매핑을 나열하려면 docker port 명령어에 컨테이너 포트와 프로토콜 (/tcp) 을 추가합니다. 먼저, 컨테이너 ID 가 없는 경우 다시 가져옵니다.

docker ps -q --filter ancestor=nginx

이제 docker port 명령어를 컨테이너 ID 와 함께 사용하고 내부 포트 80 을 TCP 프로토콜과 함께 지정합니다. <container_id>를 컨테이너 ID 로 바꿉니다.

docker port < container_id > 80/tcp

출력은 0.0.0.0:8080이어야 합니다. 이는 컨테이너의 내부 TCP 포트 80 이 매핑된 호스트 주소와 포트를 구체적으로 보여줍니다. 특정 매핑 및 프로토콜에만 관심이 있는 경우 모든 포트를 나열하는 것보다 더 정확합니다.

특정 게시된 UDP 포트 매핑 나열 (오류 예상)

이 단계에서는 nginx 컨테이너에 대한 특정 게시된 UDP 포트 매핑을 나열하려고 시도합니다. Nginx 는 일반적으로 웹 서버에 TCP 만 사용하므로, 이 명령어가 UDP 매핑을 찾지 못하고 잠재적으로 오류를 반환하거나 출력이 없을 것으로 예상합니다. 이는 포트 매핑을 쿼리할 때 프로토콜을 지정하는 방법과 해당 프로토콜에 대한 매핑이 존재하지 않을 때 발생하는 상황을 보여줍니다.

먼저, nginx 컨테이너의 컨테이너 ID 를 가져옵니다.

docker ps -q --filter ancestor=nginx

이제 docker port 명령어를 컨테이너 ID 와 함께 사용하고 UDP 프로토콜 (/udp) 을 사용하여 내부 포트 80 을 지정합니다. <container_id>를 컨테이너 ID 로 바꿉니다.

docker port < container_id > 80/udp

이 명령어가 출력을 생성하지 않거나 오류 메시지를 생성하는 것을 관찰해야 합니다. 이는 구성된 대로 nginx 컨테이너가 UDP 프로토콜을 사용하여 포트 80 을 노출하지 않기 때문입니다. 이는 포트 매핑을 쿼리할 때 올바른 프로토콜을 지정하는 것의 중요성을 강조합니다.

프로토콜 지정 없이 특정 게시된 포트 매핑 나열

이 단계에서는 프로토콜 (TCP 또는 UDP) 을 명시적으로 지정하지 않고 특정 게시된 포트 매핑을 나열하는 방법을 배웁니다. 프로토콜이 생략되면 docker port는 지정된 컨테이너 포트에 대한 TCP 및 UDP 매핑을 모두 나열합니다.

먼저, nginx 컨테이너의 컨테이너 ID 를 가져옵니다.

docker ps -q --filter ancestor=nginx

이제 docker port 명령어를 컨테이너 ID 와 함께 사용하고 프로토콜 없이 내부 포트 80 을 지정합니다. <container_id>를 컨테이너 ID 로 바꿉니다.

docker port < container_id > 80

nginx 컨테이너는 포트 80 에 대한 TCP 매핑만 가지고 있으므로 출력은 80/tcp -> 0.0.0.0:8080이 됩니다. 컨테이너에 포트 80 에 대한 TCP 및 UDP 매핑이 모두 있는 경우 둘 다 나열됩니다. 이는 프로토콜에 관계없이 특정 내부 포트에 대한 모든 매핑을 확인하는 편리한 방법입니다.

요약

이 랩에서는 docker run -p 명령어를 사용하여 Docker 컨테이너를 시작하고 내부 포트를 호스트 머신에 게시하는 방법을 배웠습니다. Nginx 컨테이너를 실행하고 내부 포트 80 을 호스트 포트 8080 에 매핑하여 이를 시연했으며, curl을 사용하여 접근성을 확인했습니다.

이어서, 실행 중인 컨테이너의 게시된 포트 매핑을 나열하기 위해 docker port 명령어를 탐색했습니다. 모든 게시된 포트를 나열하는 방법과 특정 TCP 또는 UDP 포트 매핑을 쿼리하는 방법을 배웠으며, 존재하지 않는 UDP 매핑을 쿼리하면 오류가 발생한다는 것을 이해했습니다. 또한 프로토콜을 명시적으로 지정하지 않고 특정 포트 매핑을 나열하는 연습을 했습니다.