woniper

[Docker] Docker란 무엇인가? 본문

개발환경

[Docker] Docker란 무엇인가?

woniper1 2016. 12. 21. 21:19

  과거 서버 환경을 경험해 보지 못했지만, 적어도 내 경력 3~4년 동안 클라우드 서비스로 인해 많은 변화를 가져온 것 같다.


클라우드 서비스를 사용하지 않고 서버를 구축한다면...
  서버(하드웨어)를 구입하고 OS를 설치하고, 서버에 필요한 Web Server, WAS(Web Application Server), 기타 필요한 애플리케이션, 그 뿐 아니라 여러가지 설정과 보안도 신경써야한다. 서버가 몇대 안되면 다행이다. 수백 수천대라고 생각하면 저 작업을 일일이 해야한다. 자동화 툴이나 쉘스크립트를 사용해서 자동화 해도 되지만, 쉽지 않은 작업이다. 


그렇다면 클라우드 서비스를 사용한다면...

  나는 AWS만 사용해봤는데 클릭 몇번으로 내가 원하는 OS 셋팅이 가능하고, 보안과 여러가지 아키텍처들을 빠르고 쉽게 구축이 가능하다. 뿐만 아니라 Auto Scale Up, Auto Scale Out도 자동으로 가능하다. 그리고 조금 더 생각해보자. 클라우드를 사용하면 우린 서버를 구축하기 위해 하드웨어에 손댈 필요 없다. 그말은 즉, 하드웨어가 고장난 경우 문제가 되는 여러가지 상황도 없어진다는 말이다. 하지만 클라우드를 사용한다고 해서 서버를 구축하기 위한 애플리케이션 설치나 기타 설정이 불필요 한것일까? 그렇지 않다. 똑같이 필요하다. 


자동화를 하고 싶다면...

  이렇듯 필요한 애플리케이션이나 설정을 동일하게 관리하고 로컬환경, 테스트환경, 리얼환경을 최대한 동일하게 유지하고 싶은 경우에 Docker를 사용하면 적절하다. 뒤에서 설명하겠지만 도커에는 이미지라는 것이 존재하는데 이미지를 생성하면 얼마든지 동일한 서버 구축이 가능하다. 개발 언어로 예를 들면 클래스를 하나 만들고 인스턴스를 여러개 생성하는거와 같이 말이다.

  웹서버를 운영하고 테스트하기 위해서는 여러 서버에 수많은 설정과 씨름해야한다. 예를 들어 실제 운영하는 리얼서버(운영서버)에서 장애가 발생했다. 장애를 해결하기 위해 테스트 서버 또는 로컬 서버에서 장애와 같은 상황을 재연해야 장애를 해결하기가 쉽다. 그런데 리얼서버와 OS 또는 여러 설정이 동일하지 않다면 장애를 다른 서버에서 동일하게 재연하기 쉽지 않은 경우가 생긴다. 그 문제는 곧 장애 해결을 빠르게 처리하지 못하게된다.

  또 다른 상황을 예를 들어보자. 우리팀에 총 10명에 팀원이 있다. 팀원을 충원하기 위해 5명을 추가로 고용했다. 개발자 로컬 환경을 Docker로 설정해서 관리한다면 충원된 5명 환경도 빠르게 구축이 가능하다.


환경을 동일하게 하는 것 뿐일까?

  Docker를 사용하는 경우는 앞서 설명했듯이 여러 서버에 동일한 환경을 구축하고 싶은 경우를 예를 들었는데, 최근들어 Docker를 이용한 여러 좋은 사례들이 나오고 있다.

  Docker는 github와 비슷하게 Docker Registry Server라는 것을 제공해서 Docker 이미지를 Repository에서 버전 관리가 가능하다. A 개발자가 Docker를 수정하고 Docker Registry Server에 push를 한 후 B 개발자가 수정된 Docker를 pull 받아서 최신화 할 수 있다.

소스 버전 관리 하듯이 Docker를 통해 환경도 버전 관리가 가능하다는 뜻이다.

Comments