[Docker] 도커< 3 : 포트포워딩>
이전글
[Docker] 도커<1>
[Docker] 도커<2>
도커 Image를 통해 컨테이너를 만들었다면 해당 컨테이너를 외부에 노출시켜야 외부에서 사용이 가능해진다.
1. 호스트머신의 포트와 컨테이너의 포트를 바인딩하기(포트포워딩)
- 호스트 머신의 포트: 외부에서 호스트 머신에 접근할 때 사용되는 포트
- 컨테이너의 포트: 컨테이너 내부에서 애플리케이션이 리스닝 하는 포트
즉 호스트 포트와 컨테이너 포트를 바인딩하는 것은 외부에서 애플리케이션에 접근할 수 있도록 해주는 것이다.
그림에서는 클라이언트와 호스트가 8000번 포트를 통해 통신하고
호스트포트 (8000번)이 컨테이너의 포트(80번)과 포트포워딩 되어 있다.
2. 포트포워딩 방법
2.1 명령어로 포트포워딩
도커에서 이미지를 실행할 때 이하의 명령어를 사용하면 호스트 포트와 컨테이너 포트를 연결할 수 있다.
1
docker run -d -p 호스트포트:컨테이너포트 이미지이름
이때 -p는 publish이다.
2.2 도커 이미지에서 포트포워딩
도커파일의 expose
구문을 사용하면 외부로 노출할 컨테이너의 포트를 지정해 줄 수 있다.
1
EXPOSE 80
주의할 점은 단순히 이 구문으로만 노출될 컨테이너 포트를 지정해주고, 도커이미지 실행 시, 포워딩할 호스트 포트를 지정해주지 않으면 랜덤으로 배정된다.
지정해주지 않는 경우
1 2
docker run -d -P 이미지이름 # 이때 반드시 -P를 써야한다. -p를 쓰면 매개변수를 요구하기 때문
결과
랜덤포트 55000과 포워딩됐다.
지정해 주는 경우
1
docker run -d -p 8000:80 이미지이름
결과
지정해준 포트와 제대로 포워딩 된 것을 볼 수 있다.
2.3 도커 컴포즈 파일에서 포트포워딩
만약 여러 이미지를 한번에 컨테이너화 하기 위해 도커 컴포즈를 사용한다면, 이곳에서도 포트포워딩을 할 수 있다.
1
2
3
4
5
6
7
version: '3'
services:
web:
build: .
ports:
- "8000:80"
... 이하생략