지금까지 가이드들을 따라 학습했다면, 컨테이너는 application의 각 component들을 위한 격리된 프로세스들을 제공한다는 것을 앎. 각 component(React Frontend, Python API, Postgres DB)는 host 머신에서 다른 것들과 완전히 격리된 채로 자신의 고유 sandbox 환경에서 실행됨. 이러한 격리는 의존성 관리 및 보안성에는 좋으나 그것들을 직접적으로는 access할 수 없음을 의미함(EX. 브라우저에서 웹앱에 접근 X)
여기서 port publishing이 등장함
publishing port는 전달 규칙(forwarding rule)을 설정하여 약간의 네트워크 격리를 돌라할 수 있는 능력을 제공. 예를 들면, host의 포트 8080으로의 요청을 컨테이너 포트 80으로 전달하게끔 명시 가능. publishing port는 docker run
명령어와 함께 -p
(: —publish) flag를 사용해 컨테이너를 생성하는 동안 발생함
docker run -d -p HOST_PORT:CONTAINER_PORT nginx
예를 들면, 컨테이너 포트 80
을 호스트 포트 8080
에 publish하려면 :
docker run -d -p 8080:80 nginx
이제, 호스트 머신에 대한 8080
포트에 전송되는 트래픽들은 컨테이너의 80
포트로 전달됨
<aside> 🥕
포트가 publish될 때, 기본값으로 모든 네트워크 인터페이스에 publish됨. 이는 우리의 머신에 도달한 트래픽들이 publish된 애플리케이션에 액세스할 수 있음을 의미. 데이터베이스나 민감 정보들을 publish할 때는 주의 필요. Learn more about published ports here.
</aside>
때로, 우리는 host 포트를 몇 번을 사용하는 지 생각하지 않으면서 간단히 포트를 publish하기를 바랄 수 있음. 이런 경우엔, Docker가 포트를 선택하도록 할 수 있음. 그러기 위해선, 간단히 HOST_PORT
설정을 생략하면 됨
예를 들면, 다음 명령어는 컨테이너의 포트 80
를 host의 일시적 포트에 publish 할 수 있음 :
docker run -p 80 nginx
컨테이너가 실행되면, docker ps 명령을 사용해 선택된 포트를 보여줄 수 있음 :
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a527355c9c53 nginx "/docker-entrypoint.â¦" 4 seconds ago Up 3 seconds 0.0.0.0:54772->80/tcp romantic_williamson