Containerization/Docker

[Docker] 도커 포트 포워딩하기 (웹서비스 사용하기)

쉬지마 이굥진 2024. 5. 13. 15:14

이 글은 2024 05월 원티드 프리온보딩 BE 챌린지 프로그램 도커편 1회차 수업을 회고하며 정리한 글입니다.


들어가기 전, 네트워크 관련 기본 용어들을 짚고 넘어가도록 하겠다.

네트워크 기본 용어

공식문서

  • host        - 호스트의 네트워크를 직접 사용.
  • bridge    - 기본 네트워크 드라이버, 동일한 도커 호스트에서 컨테이너 간의 통신을 도와줌.
  • overlay   - 서로 다른 도커 호스트의 컨테이너 간 통신을 도와줌

이론

현재까지 docker 없이는 컴퓨터 웹 서버를 직접 설치했지만,  도커를 이용하면 웹 서버가 도커의 컨테이너에 설치된다.

  • 이 컨테이너가 설치된 운영 체제를 host라고 부른다. 

host

 

 

  • 컨테이너와 호스트 모두 독립적인 환경에서 실행되기 때문에, 각자 독립적인 포트와 파일 시스템을 갖고 있다.

 

현재는 웹브라우저로 웹 서버에 접속을 시도하더라도 접속이 안 된다.  왜일까? 호스트와 컨테이너간의 연결이 지금은 끊겨있기 때문이다. 

 

  • 접속을 성공시키기 위해선 Host의 80번 포트와 Container의 80번 포트를 연결시켜 줘야한다.

 

  • docker run -p 80:80 httpd    :   앞 80은 host의 포트 번호를 의미하고 뒤 80은 container의 포트 번호를 의미한다.

이렇게 설정해주면 호스트의 80번포트로 들어온 신호가 컨테이너의 80번 포트로 전송된다.

 

  • port forwarding    :  이렇게 연결된 포트로 신호를 전달(forwarding)하는 것을 포트 포워딩이라고 한다.

 

  • 이후 컨테이너 80번 포트의 요청 신호가 웹서버로 전달되고, 나머지 과정은 이전과 동일하다. 


  • 만약 접속 경로가 80번에서 8000번 포트로 변경됐다면?  Host 포트번호 자리를 8000으로 바꿔주면 된다.

         url 요청 주소는 http://example.com:8000/index.html 이 될 것이고, 

         명령어는 $ docker run -p 8000:80 httpd  가 될 것이다. 


실습

  • (도커 desktop ver) 컨테이너 run 

도커 desktop에서 로컬 이미지를 run 시켜준 후, 옵션을 하단처럼 설정해주자.

  • 참고: 컨테이너의 80번 포트는, 이 이미지를 만든 사람이 '이 이미지에 설치 프로세스로 접속할 때 80번 포트로 접속하도록 설정해뒀기 때문'에 80으로 고정된 것 

 

  • (Command Line ver)  컨테이너 run 

도커 데스크탑을 통해 ws2라는 이름의 컨테이너를 만들어주었으니 이번엔 CLI를 통해 다른 이름의 컨테이너를 만들어보자.

docker run --name ws3 -p 8081:80 httpd

이름은 ws3로, 호스트 포트번호는 8081로 들어오면 컨테이너의 80번 포트로 run하겠다.라는 명령어이다.  (p는 publish의 첫 자)

 

다른 창을 열어, docker ps 명령어로 확인해 봤을 때 PORT 번호가 잘 설정된 것을 볼 수 있다.

 

 

  • 확인 

커맨드 라인을 통해 설정해준 컨테이너를 확인해보자.

 

새 시크릿 창을 열어 설정한 포트번호를 넣어 url을 입력해줬다.

localhost:8081/index.html

성공 !!!!!!!!!!!!!!

로그도 확인 해보자.

 

<다음 글>

 

[Docker] 도커 컨테이너 명령어 실행 (pwd, exec, -it, /bin/sh)

이전 포스팅에선, 우리가 만든 컨테이너에 접속해서 그 안의 index.html 파일을 읽어 띄우는 작업을 해봤다. [Docker] 도커 포트 포워딩하기 (웹서비스 사용하기)이 글은 2024 05월 원티드 프리온보딩

developer-jinnie.tistory.com


References 

https://www.youtube.com/watch?v=SJFO2w5Q2HI&list=PLuHgQVnccGMDeMJsGq2O-55Ymtx0IdKWf&index=5