킹의 개발일지

도커 입문(5) - 네트워크 본문

docker

도커 입문(5) - 네트워크

k1ng 2022. 7. 18. 16:18

네트워크

일반적으로 웹 서버를 사용한다는 것은 웹 브라우저와 웹 서버간의 통신이라고 볼 수 있다.

 

우선 웹 서버를 이용하기 위해서는 최소한 두대의 컴퓨터가 필요하다.

 

한 대의 컴퓨터에는  웹 브라우저가 설치돼 있고 한 대의 컴퓨터에는 웹 서버가 올라가있다.

 

그리고 웹 서버에는 웹 페이지를 파일로 만들어서 컴퓨터 특정 디렉토리에 위치시켜야한다. 이 파일이 저장된 공간을 파일 시스템이라고 부르자!

 

사용하고 있는 웹 서버가 아파치이며, 파일 시스템 내에 있는 /usr/local/apache2/htdocs 경로에 index.html 파일이 있다고 해보자.

 

그리고 어떤 사용자가 웹 서버에게 '누가 이 웹 페이지를 요청하면 이 디렉토리에서 찾아!' 라고 설정해두었다고 하자.

그래야 웹 브라우저로부터 요청이 왔을 때 해당 페이지를 찾을 수 있을 것이다.

 

웹 서버가 설치된 컴퓨터는 웹 서버 이외에도 다양한 소프트웨어가 설치돼있다. 때문에 누군가가 네트워크적으로 요청받은 소프트웨어를 네트워크적으로 구분해주어야 하는데, 포트가 그런 역할을 한다.

 

포트는 6만 5천개 정도 존재하며, 웹 서버가 설치된 컴퓨터에 있는 소프트웨어를 네트워크적으로 구분해준다.

 

때문에 특정 요청이 들어왔을 때 어떤 소프트웨어가 마중나가야 할 지 알 수 있게 해준다.

 

기본적으로 웹 서버는 80번 포트에서 접속을 대기하도록 설정돼있다. 웹 서버가 설치된 컴퓨터의 주소를 example.com이라고 해보자. 그리고 브라우저와 서버간의 소통을 잠시 살펴보자.

  1. 웹 브라우저가 검색창에다가 http://example.com:80/index.html라고 검색한다.
  2. 이후 웹 브라우저는 example.com의 80번 포트로 접속한다.
  3. 웹 서버에서 80번 포트에 대기중이므로 웹 서버로 요청이 전달된다.
  4. 그리고 웹서버는 index.html이라는 파일을 디렉토리에서 찾낸다.
  5. 마지막으로 찾은 웹 페이지를 브라우저에게 전달해준다!

이것이 도커없이하는 일반적인 웹 브라우저와 서버의 소통방식이다.

 

도커

그렇다면 도커로 httpd 컨테이너를 사용하는 방법을 알아보자.

 

도커를 이용하면 웹 서버가 컨테이너위에 올라간다. 이 컨테이너가 설치된 운영체제를 도커 호스트라고 부르는데, 하나의 도커 호스트에는 여러 컨테이너가 설치 될 수 있다. 그리고 컨테이너, 호스트 모두 독립적인 환경에 있는데,

 

따라서 각자 독릭적인 포트와 파일 시스템을 가지고 있다.

 

이제 웹 브라우저로 웹 서버에 접속을 시작해보자.

 

웹 브라우저가 호스트의 80번 포트로 인덱스 파일을 요청한다고 해보자. 아마 요청에 응답은 돌아올 수 없을 것이다. 현재 호스트와 컨테이너는 연결이 끊어져있기 때문이다.

 

아까 말했듯이 호스트와 컨테이너는 각자 독립적인 포트와 파일시스템을 가지고 있기 때문에 호스트와 컨테이너의 80번 포트를 서로 연결해주어야 한다!

 

컨테이너를 실행할 때 

 

 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

 

해당 명령어를 사용하면 된다고 했는데, 호스트와 컨테이너의 포트를 연결해주기 위해서는 옵션으로 -p 옵션을 주고 연결할 포트 번호를 입력해주면 된다.

 

docker run --name ws1 -p 80:80 httpd

 

여기서 앞 80은 호스트의 포트이고 뒤 80은 컨테이너의 포트이다. 호스트의 80번 포트로 들어온 신호는 컨테이너의 80번 포트로 전송된다.

 

이렇게 호스트로 들어온 신호를 컨테이너 혹은 회선 안의 다른 포트로 신호를 전달하는것을 포트포워딩 이라고 한다!

 

요청 신호가 웹 서버로(컨테이너의) 전송되고 나머지 과정은 일반 웹 서버에서 하는 통신과 동일하다.

 

호스트의 포트번호는 변경할 수 있기에 웹 브라우저에서 접속하는 포트가 8080으로 변경된다 하더라도 호스트의 포트를 8080으로 바꿔주면 된다.

 

이렇게 컨테이너를 실행시키고 브라우저에 localhost:8080을 검색하면?!

 

잘 작동함을 볼 수 있다!


참고자료

https://opentutorials.org/course/4781

 

생활코딩 Docker 입구 수업 - 생활코딩

수업소개 vmware, virtualbox와 같은 가상머신처럼 독립된 실행환경을 제공하면서도, 성능의 저하가 훨씬 적은 도커에 대해서 알려드립니다.  수업대상 일하는 조직에서 도커를 쓰고 있는 분 개발환

opentutorials.org