본문 바로가기

Programming

[docker] 도커에 대해서 알아보자

docker imageDOCKER VM


안녕하세요 

마푸입니다. 


요즘 나른해지는 봄날이라 또 공부는 안하고 탱자탱자 놀다가 머할까를 반복적으로 되내이던 중 예전에 진행했던 프로젝트 중 "Django"에서 웹 호스팅하던게 생각이 났습니다. 이곳 블로그도 있지만 여기는 "공부" + "게임"이라는 상극의 컨텐츠를 올리고있지만, 새롭게 선보일 프로젝트는 "SNS"와 연계해서 개인의 다이어트 기록을 저장하고 이를 그래프해서 보여주는 웹서비스입니다. 물런 시중엔 비슷한 프로그램은 많지만 맘에 드는게 없어서 만들어보려합니다. 


서두에서도 말씀드렸지만 기존에 Linux위에 Django와 Nginx를 이용한 구현은 이미 해봤기 때문에 요즘 핫한 docker를 이용한 배포 및 백업, 자가증식(?)이 유용한 서비스로 구축해볼까합니다. 


아직 익숙치 않아 가능할지는 모르겠지만 천천히 해볼까합니다. 

먼저 오늘은 Docker란 무엇인지 그리고 왜 이것을 도입할 생각인지에 대해 기술해 볼까합니다. 


* Docker? 

  단어를 처음 접했을때는 왠지 배와 바다 정확하게는 선척장을 연상케하는 이미지입니다. 실제로 그런뜻이기도 하지요 ㅋ;

간단히 정의한다면 Image를 이용한 서비스 어플리케이션이 독립적 실행이 가능한 virtual machine(VM)으로 정의할 수 있습니다. 즉, 프로그램화 되어있는 어플리케이션(APP)를 이미지화 해서 이 어플리케이션을 여러개의 독립적인 인스턴스로 실행할 수 있습니다.  흠.. 역시 어렵나요? 그럼 아래의 그림을 잠시 볼까요?


docker VM 소개


그럼 순서대로 위에서 부터 읽어 보겠습니다. 

먼저 파란색 판넬은 서버에 설치된 OS인 Centos 5버전(Host)입니다. 즉, 우리는 이 머신에 접속해서 작업을 하는 것이지요. 

두번째 판넬은 연두색 판넬은 Host에 깔려진 "Docker" 어플리케이션입니다. 


그림에서보면 Docker 어플리케이션에서 파생된 4개의 다른 판넬을 확인 할 수 있습니다. 각각 '다른버전의 Centos OS"와 "Mysql 5버전", "Nginx", "mysql 6버전"이 되겠습니다. 

음.. 먼가 그림이 이상하지요? 일반적인 VM의 경우에는 OS인 Ceontos(ver 7.x) 위에 mysql이나 nginx가 올라가야될것 같은데 말이죠!!

여기서 Docker와 일반적인 VM의 차이점을 확인할 수 있습니다. 일반적인 VM의 경우 VM위에 다른 OS를 설치하고 그위에 여러개의 APP을 실행해서 서비스를 진행합니다. 

하지만 Docker는 VM 위에 OS를 설치할 수 도 있지만 그냥 어플리케이션만 등록해서 사용할 수 있습니다.

즉, VM위에 Guest OS의 설치가 필요하지 않다는 것이지요!!! (헐 대박.. 신기하죠? ^^;)

대박

자 그럼 이제 등록한 이미지 중 Mysql 5버전(Mysql)을 주목해 봅시다. Mysql아래에는 3개의 서비스가 등록 되어있습니다. 즉, 이 서비스 모두가 독립된 하나의 인스턴스라고 보시면 됩니다. 독립된 서비스이기 때문에 당연하 각각의 인스턴스의 내부포트를 이용해서 서비를 하며, 이포트를 외부의 Host 포트와 포트포워딩을 할 수 있습니다. 이해하기 쉽게 포트를 포워딩 해봣는데요 Host의 1번 포트는 첫번째 Mysql 인스턴스 서비스인 A의 3306서비스에 포워딩 됩니다. 


음.. 그럼 여기까지 보신분들은 "머야.. 포트포워딩을 제외하고는 'Mysql_multi'와 다를게 없는데?" 라고 생각할 수 있습니다. 하지만 이것은 전혀 다릅니다. Mysqld_mult의 경우 Mysql 서비스를 동일한 데몬에서 다른 설정파일을 이용해서 서비스 하는것입니다 Docker의 경우 각각이 별개의 서비스로 실행되기 때문에 서비스의 격리가 가능해 집니다. 물런 서버 성능은 전자가 더 훌륭할지도 모르겠지만, 외부에서 봤을때 명백히 독립적인 서비스를 유지하고 있습니다. 이는 DB 서비스에만 적용되는게 아니라 모든 App에 동일하게 적용되기 때문에 그림에서와 같이 Nginx도 3개의 독립서비스로 운영이 가능합니다. 

(* mysqld_multi는 하나의 머신에서 mysql 서비스를 중복되지 않은 포트로 여러개의 인스턴스로 서비스 할 수 있는 기술입니다. 물런 MSSQL도 인스턴스를 여러개 설치해서 서비스가 가능합니다.)


그럼 이제 명칭에 대해서 정리해봅시다. 


1. 먼저 연두색 판넬의 Docker는 Host OS에 설치된 프로그램 입니다. 말 그대로 Docker입니다. (히익.. 당연한거겠지요 ㅠ.ㅠ)


2. 분홍색의 판넬인 "Centos (ver 7.x)", "Mysql (ver 5.x)", "Nginx", "MySQL (ver 6.x)"는 Image라고 불리는 일종의 배포버전의 설치 파일의 묶음입니다. 


3. 회색 판넬인 Server로 시작되는 인스턴스들은 분홍색 판넬인 Image에서 실행된 각각의 container입니다. 즉, 개별로 서비스 중인 서버라고 생각하시면 쉬울것 같습니다. 



정리하면 도커는 Image와 Container로 이루어 져있다는걸 알 수 있습니다. 

먼길을 돌아온것 같은데 다음시간에는 docker의 설치와 Mysql 이미지를 컨테이너에 등록하는 방법에 대해서 알아보도록 하겠습니다. 


 

반응형