도커를 사용하기 위해서는 네트워크에 대해 알아야 합니다. 도커에서 동작하는 많은 소프트웨어들이 네트워크를 이용하기 때문입니다. 이전 시간까지 도커 이미지를 받아 컨테이너로 생성한 아파치 웹서버도 네트워크 위에서 동작합니다. 따라서 네트워크에 대한 이해가 필요합니다.
이전 글에서 도커를 설치하고, 도커 허브에서 httpd 이미지를 다운로드하고, 컨테이너를 생성해보았습니다. 만약 도커가 처음이라면 저의 예전 글을 참고하시길 바랍니다.
도커 컨테이너 실행 방법(Docker Container Run)
이전 시간에는 도커 허브에서 이미지 가져오는 방법, 즉 Docker Image pull 방법에 대해 알아보았습니다. 앱스토어에서 앱을 설치했으면 그다음 단계는 실행하는 것이죠. 마찬가지로 가져온 이미지
ssonny.tistory.com
다시 돌아가서 지금까지 설치하고 컨테이너로 실행시킨 아파치 웹서버, httpd도 네트워크 위에서 동작합니다. 도커 없이 웹서버를 사용하는 방법과 도커를 사용하여 웹서버를 사용하는 방법 두 가지에 대해 비교하여 설명드리겠습니다.
도커 없이 웹서버를 사용하는 방법
웹서버를 사용하기 위해서는 두대의 컴퓨터가 필요합니다. 한대의 컴퓨터는 웹 브라우저가 설치되어 있고, 다른 한대의 컴퓨터에는 웹서버가 설치되어 있습니다. 이해를 돕기위해 브라우저가 설치된 컴퓨터를 "노트북"이라고 하고, 웹서버가 설치된 컴퓨터는 "서버 컴퓨터"라고 하겠습니다.
서버 컴퓨터에는 웹서버가 설치되어 있고, 웹페이지의 파일이 특정 디렉토리에 저장되어 있습니다. 웹페이지 등이 저장된 공간을 "파일 시스템"이라고 부르겠습니다.
예를 들어서 파일 시스템 내에 있는 "/usr/local/apache2/htdocs/" 디렉터리에 index.html 파일을 위치시켰다고 가정합시다. 웹서버에게 "웹서버야 누가 웹페이지를 요청하면 '/usr/local/apache2/htdocs/' 디렉터리에서 찾아야 해."라고 설정해둡시다.
한편 서버 컴퓨터에는 65,535개의 Port가 있습니다. 이 컴퓨터에 설치되어 있는 여러 소프트웨어들을 Port로 구분해줍니다. 만약 Port가 없다면 이 컴퓨터로 접근할 때 어떤 소프트웨어로의 접근인지 구분할 수 없기 때문입니다.
서버 컴퓨터의 웹서버는 80번 포트에서 접속을 대기하고 있도록 설정되어 있다고 합시다. 웹서버가 설치된 서버 컴퓨터의 주소는 example.com 이라고 가정합시다.
서버 컴퓨터의 웹서버 세팅이 끝났습니다. 그러면 다시 "노트북"으로 돌아가 웹서버에 접속해봅시다. 접속을 위해 주소창에 아래와 같이 입력할 것입니다.
http://example.com:80/index.html
이렇게 되면 80번 포트로 접근을 할 것이고, 80번 포트에는 웹서버가 대기중이기 때문에 웹서버로 요청이 전달될 것입니다. 웹서버는 /usr/local/apche2/htdocs/에서 index.html 파일을 찾습니다.
index.html 파일을 읽어서 노트북의 웹브라우저에게 index.html의 코드를 전달하면 이 과정이 종료됩니다.
도커를 이용한 웹서버 접근 방법
지금까지는 서버 컴퓨터에 웹서버를 직접 설치했지만, 도커를 이용하면 웹서버가 컨테이너에 설치됩니다. 컨테이너가 설치된 운영체제를 Docker Host라고 부릅니다. 하나의 Docker Host에는 여러 개의 Container가 만들어질 수 있습니다.
Container와 Host 모두 독립적인 실행 환경이기에, 각자 독립적인 포트와 파일시스템을 가지고 있습니다. 즉, Host에도 65,535개의 포트, 파일 시스템이 있고, 그 안의 Container에도 65,535개의 포트와 파일 시스템이 있는 것이죠.
이제 노트북으로 돌아가 웹브라우저 통해 웹서버로 접속해봅시다. 접속이 안됩니다. 이유는 Host와 Container간 연결하지 않았기 때문입니다.
연결하려면 Host의 80번 포트와 Container의 80번 포트를 연결하면 됩니다. 이전에 컨테이너를 실행할 때 아래의 명령어를 써서 실행했을 것입니다.
docker run httpd
그렇기에 host와 연결이 안되었죠. 다시 아래의 코드로 컨테이너를 실행시켜봅시다. 그러면 호스트와 컨테이너의 포트가 연결된 것입니다. 명령어 앞의 80은 호스트의 80번 포트, 뒤의 80은 컨테이너의 포트입니다.
docker run -p 80:80 httpd
이렇게 연결된 포트로 신호를 전달하는 것을 Port Forwarding이라고 합니다. 포트가 연결됐으니 노트북 웹브라우저의 요청 신호가 웹서버로 전송이 되고 나머지 과정은 이전 설명과 동일합니다.
만약 접속 포트가 8000으로 변경됐다면 어떻게 해야 할까요? 아래와 같이 컨테이너를 실행하면 됩니다.
docker run -p 8000:80 httpd
이해가 되셨다면, 실습을 해봅시다.
지난 글에서 httpd 이미지를 삭제했습니다. 따라서 컴퓨터에 httpd가 없으니 다시 설치를 해봅시다. 기억이 잘 나지 않으시면 아래의 글을 참고하여 재설치하시길 바랍니다.
도커(Docker) 이미지 다운로드 방법
이번 글에서는 도커(Docker) 이미지 다운로드 방법에 대해 알아보려 합니다. 글을 시작하기 전 도커를 사용하기 위해서 이해해야 할 개념이 몇 가지 있습니다. 비유적으로 설명을 하겠습니다. 도
ssonny.tistory.com
설치를 마쳤다면, 네트워크 연결을 이어 진행하겠습니다.
Docker Desktop에서 도커 네트워크 연결
대시보드의 Images를 클릭합니다. 방금 설치한 httpd가 보입니다. Run을 클릭하여 Optional Settings를 클릭합니다. 아래의 사진과 같이 Container Name을 설정하고 Local Host Port를 8080으로 설정하고 Run을 클릭합니다.
외부에서 Host의 8080으로 들어왔을 때 Container의 80포트로 Port Forwarding 하겠다는 뜻입니다. ws2라는 컨테이너가 생성이 되었습니다.
Command line에서 도커 네트워크 연결
커맨드라인에서는 docker run 명령어의 Option을 지정하면 됩니다. 여러 옵션 중 우리는 -p 옵션을 사용할 것입니다. -p는 publish의 줄임말입니다. 컨테이너의 Port를 Host로 공개/연결시킨다는 설정입니다.
docker ps로 현재 올라와있는 컨테이너를 봅시다. 아까 Docker Desktop에서 만든 ws2 Container가 올라와 있는 것을 볼 수 있습니다. 하나 더 만들어봅시다. 아래의 명령어를 입력하세요.
docker run --name ws3 -p 8081:80 httpd
docker ps로 실행 중인 컨테이너를 확인해봅시다. 방금 커맨드라인(터미널)에서 만든 ws3 httpd container도 올라와 있는 것을 볼 수 있습니다.
생성한 httpd를 실행할 수 있는 상태가 된 것입니다. 이로써 도커 네트워크에 대한 간략한 이해가 되셨길 바랍니다.
댓글