Docker 컨테이너에서 여러 포트 노출
다양한 유형의 통신이 인터넷에서 이루어지며 가장 일반적인 통신에는 파일 전송, 이메일 전송 및 웹 페이지 제공이 포함됩니다. 이 통신이 가능하도록 통신 유형을 식별하는 데 도움이 되는 포트 번호를 활용합니다.
예를 들어 파일 전송 프로토콜은 포트 20과 21을 사용하고 단순 메일 전송 프로토콜은 25를 사용하며 하이퍼텍스트 전송 프로토콜은 25를 사용합니다.
마찬가지로 Docker 컨테이너는 포트를 사용하여 월드 와이드 웹에서 서로 다른 장치 간의 통신을 가능하게 합니다. 이 자습서에서는 Nginx 애플리케이션을 사용하여 Docker 컨테이너에서 여러 포트를 노출하는 방법을 배웁니다.
NGINX 애플리케이션 생성
WebStorm IDEA를 열고 파일>새로 만들기>프로젝트
를 선택합니다. 열리는 창에서 Empty Project를 선택하고 프로젝트 이름을 untitled
에서 web-app
으로 변경합니다.
마지막으로 Create라고 표시된 버튼을 눌러 빈 프로젝트를 만듭니다.
어떤 개발 환경이 사용되는지는 중요하지 않으므로 다른 개발 환경을 사용할 수도 있습니다. NGINX는 정적 콘텐츠를 제공하는 데 사용되므로 다른 구성 파일이 필요하지 않습니다.
프로젝트가 생성되면 web-app
폴더에 index.js
라는 파일을 만들고 다음 코드를 파일에 복사하여 붙여넣습니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Welcome to Nginx !</h1>
</body>
</html>
이 파일에는 응용 프로그램을 테스트하는 데 도움이 되는 제목이 있는 간단한 웹 페이지가 포함되어 있습니다. 원하는 콘텐츠를 표시하도록 HTML 콘텐츠를 수정합니다.
Dockerfile 만들기
web-app
폴더에 Dockerfile
이라는 파일을 만들고 다음 지침을 복사하여 파일에 붙여넣습니다.
FROM nginx:1.23.1-alpine
ADD . /usr/share/nginx/html
FROM
- 커스텀 이미지를 생성할 기본 이미지를 설정합니다. 여기서는alpine
을 사용하여 경량 버전의 NGINX를 가져왔습니다.ADD
- 현재 폴더의 파일과 폴더를/usr/share/nginx/html
에 있는 이미지의 파일 시스템에 복사합니다.
이미지 구축
키보드 단축키 ALT+F12를 사용하여 개발 환경에서 새 터미널 창을 열고 다음 명령을 사용하여 web-app:latest
태그가 있는 이미지를 만듭니다.
~/WebstormProjects/web-app$ docker build --tag web-app:latest .
이 명령은 Dockerfile
을 실행하며 아래와 같이 두 명령이 순차적으로 수행되는 것을 볼 수 있습니다.
=> [1/2] FROM docker.io/library/nginx:1.23.1-alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c3740 0.2s
=> => resolve docker.io/library/nginx:1.23.1-alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c3740 0.2s
=> CACHED [2/2] ADD . /usr/share/nginx/html
여러 포트로 Docker 컨테이너 실행
이미지를 빌드하는 데 사용된 동일한 터미널 창에서 다음 명령을 사용하여 컨테이너의 포트 80을 수신하는 호스트의 포트 3000 및 5000으로 web-app-prod
라는 컨테이너를 실행합니다.
~/WebstormProjects/web-app$ docker run --name web-app-prod -d -p 3000:80 -p 5000:80 web-app:latest
컨테이너에 여러 포트를 노출하기 위해 컨테이너의 포트 80에서 수신 대기하도록 호스트에 두 개의 서로 다른 포트를 할당하는 두 개의 연속 -p
플래그를 사용했습니다.
포트 테스트
컨테이너가 예상대로 작동하는지 확인하려면 브라우저를 열고 localhost:3000
(http://localhost:3000/) 및 localhost:5000
(http://localhost:5000/)에 대한 요청을 발행하십시오. 포트가 동일한 컨테이너를 수신하고 있기 때문에 아래와 같이 두 요청에 의해 반환된 NGINX 애플리케이션의 동일한 페이지를 얻습니다.
결론
이 튜토리얼에서는 NGINX 애플리케이션을 활용하여 Docker 컨테이너에서 여러 포트를 노출하는 방법을 배웠습니다. 이것은 여러 포트를 노출하는 가장 일반적인 방법이지만 동일한 목표를 달성하는 데 사용할 수 있는 다른 접근 방식이 있습니다.
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub