Dockerfile 에서 포트 노출
Docker 이미지를 생성할 때, Dockerfile 에서 EXPOSE 명령어를 사용하여 컨테이너 내부에서 노출할 포트를 지정할 수 있습니다.
포트 노출 구문
Dockerfile 에서 EXPOSE 명령어는 다음 구문을 따릅니다.
EXPOSE < port > [ < port > / < protocol > ...]
여기서 <port>는 포트 번호를 나타내고, 선택적인 <protocol>은 프로토콜을 지정하며, tcp(기본값) 또는 udp일 수 있습니다.
예를 들어, 컨테이너에서 포트 80(HTTP) 과 포트 22(SSH) 를 노출하려면 다음 EXPOSE 명령어를 사용합니다.
EXPOSE 80 22
실행 시 노출된 포트 매핑
이미지를 기반으로 컨테이너를 실행할 때 docker run 명령어의 -p 또는 --publish 플래그를 사용하여 노출된 포트를 호스트 머신의 포트에 매핑할 수 있습니다.
docker run -p <host-port>:<container-port> <image-name>
예를 들어, 컨테이너의 포트 80 을 호스트의 포트 8080 에 매핑하려면 다음 명령어를 사용합니다.
docker run -p 8080:80 my-app
이렇게 하면 외부 클라이언트가 호스트 머신의 포트 8080 에 연결하여 컨테이너 내부의 포트 80 에서 실행되는 서비스에 액세스할 수 있습니다.
여러 포트 노출
Dockerfile 에서 여러 포트를 노출하려면 여러 EXPOSE 명령어를 사용할 수 있습니다. 이는 컨테이너에서 여러 서비스 또는 애플리케이션이 호스트에서 접근 가능해야 하는 경우 유용합니다.
EXPOSE 80
EXPOSE 22
EXPOSE 3306
컨테이너를 실행할 때 -p 또는 --publish 플래그를 사용하여 이러한 노출된 각 포트를 호스트의 포트에 매핑할 수 있습니다.
docker run -p 8080:80 -p 2222:22 -p 3306:3306 my-app
이러한 방법을 따르면 모든 필요한 포트가 노출되어 호스트 머신에서 접근 가능하도록 할 수 있습니다.