이 글은
docker run -p 8888:80 -v /Users/jk/wanted/2308/docker-pro-2308/lecture/1st:/usr/local/apache2/htdocs httpd
의 의미를 Docker Network와 연결지어 완벽히 이해하는데 목적을 두고 있다.
웹 서버의 역할
브라우저의 요청에 따라, 파일시스템에서 파일을 찾고, 그걸 브라우저에게 전송하는 역할을한다.
ex) 대표적으로 apache, Nginx가 있고 express도 웹 서버이다.
포트의 역할
각 검퓨터마다 65,536개의 포트를 가지고 있으며, 이 포트들은 컴퓨터에 설치되어 있는 여러 소프트웨어들을 네트워크적으로 구분해주는 역할을 한다.
웹 서버 애플리케이션은 일반적으로 80번 포트를 사용하기 때문에 위 그림을 보면 웹 서버가 80번 포트에서 접속을 대기하고있다.
보는거와 같이 웹 서버는 컨테이너안에 설치된다.
그리고 이 컨테이너가 설치된 운영체제를 호스트라고 한다.
호스트에는 여러 개의 컨테이너가 존재할 수 있다.
컨테이너와 호스트는 독립적인 환경이기 때문에 호스트 또한 포트 번호와 파일 시스템을 갖는다.
이 때문에 브라우저가 웹 서버에 접근을 하려면, 호스트 포트와 컨테이너 포트를 연결하는 포트 포워딩(port fowarding)이라는 과정이 필요한 것이다.
이제 다음 명령어를 이해할 수 있다.
docker run -p 8888:80 httpd
"pull로 가져웠던 이미지 httpd를 실행하는데, 포트 포워딩은 8888:80으로 설정할꺼야."
볼륨마운트는 내 디스크에 컨테이너의 파일을 마운트 시키는 행위이다.
볼륨마운트가 필요한 이유는 다음과 같다.
-v 명령어를 통해 우리의 나의디렉토리:컨테이너에서 정의된 디렉토리
를하면 연결이 된다.
예시)
docker run -p 8888:80 -v /Users/jaeyunim/study/test:/usr/local/apache2/htdocs httpd
연결은 지었지만 컨테이너의 /usr/local/apache2/htdocs 폴더가 비어저 있는 상태라 다음과 위와 같이 뜬다.
연결지었던 내 디렉토리에서 index.html을 생성해주고, 새로고침해보자
이러면 컨테이너의 /usr/local/apache2/htdocs
에 index.html
파일이 생성된다.
확인해볼까?!
docker exec [컨테이너_이름] cat [위에명령한 컨테이너경로]
명령어를 통해 진짜로 컨테이너의 폴더에 내가 정의한 html이 들어갔는지 확인할 수 있다.
후.. 뒤늦지만 이제서야 이해가 완벽하게 된듯하다.
도커 네트워크 부분이 이해가 되지 않을 때 이 글이 도움 됐으면 한다.
<참고>
원티드 백엔드 챌린지 자료
생활코딩 도커편