Post View

도커는 왜 사용하는걸까?

요즘엔 서버환경을 구축한다고 하면 도커를 사용하라고 합니다.
대체 도커가 뭐길래 이렇게 많이들 사용하는걸까요?
아래의 예를 보며 이해해봅시다.

블로그를 운영하기 위해 서버를 구매했다.

처음엔 시스템에 tomcat과 mysql만 설치해도 충분히 서비스가 가능했지만,
여러가지 기능이 들어가면서 추가적인 프로그램을 설치하게 되었다.(nginx, jenkins, redis)
이 과정에서 tomcat과 jenkis에서 각각 필요한 JDK버전이 달라 각각의 버전을 별도로 설치 및 설정했다.

이후 사용자가 점차 많아지면서 서버의 성능을 높여야 했다.(Scale up)

그러나 점점 더 많은 사용자가 방문했고 업그레이드 된 서버만으로는 부족하게 되었다.
하지만 이미 최고성능으로 업그레이드한 서버였기 때문에 다른 방법을 찾게 되었고 서버를 한대 더 추가로 구매하기로 한다. (Scale out)

그리고 여기서 문제가 발생했다.

성능향상(Scale up) 시에는 별다른 문제가 발생하지 않았지만
서버확장(Scale out)을 하니 서버의 환경을 똑같이 적용을 해야했던 것이다.

그런데 기존에 사용하던 서버는 OS의 버전이 낮아 추가되는 서버에는 보안을 위해 OS도 업그레이드 해야했고,
각종 환경을 하나의 시스템에 설치하다 보니 프로그램간의 충돌을 해결 해줘야 했으며,
설정이 복잡하지만 문서화가 되어있지 않아 다른 서버로 복사하기가 힘든 상태였다.


결국 포기한 채 기존서버의 디스크를 복사하여 오래된 버전을 그대로 사용하게 된다.

기존 서버 관리 시에는 이런 문제점이 있었습니다.
그렇다면 도커를 통해 관리하면 어떤 장점이 있을까요?

최초 운영서버 환경 작업을 도커로 진행했다.

처음엔 시스템에 docker를 통해 tomcat 컨테이너와 mysql 컨테이너를 생성하는 것 만으로 충분히 서비스가 가능했지만,
여러가지 기능이 들어가면서 추가적인 컨테이너를 생성하였다.(nginx, jenkins, redis)
이 과정에서 각 프로그램들은 별도의 container로 관리되었기 때문에 서로 영향을 주는 일이 없었고,
사용자가 점차 많아지면서 서버의 성능을 높여야 했다. (Scale up)

그러나 점점 더 많은 사용자가 방문했고 업그레이드 된 서버만으로는 부족하게 되었다.

하지만 이미 최고성능으로 업그레이드한 서버였기 때문에 다른 방법을 찾게 되었고,
서버를 한대 더 추가로 구매하기로 한다. (Scale out)

이제 도커를 통해서 현재 운영중인 컨테이너를 그대로 이미지로 저장하고,
해당 이미지를 추가한 서버에서 그대로 실행하여 동일한 환경을 만든다.
이 과정에서 OS 버전이 업그레이드 되었지만 도커의 컨테이너는 OS에 독립적으로 실행되므로 전혀 문제가 발생하지 않았다.


이렇게 간단하게 서버확장이 완료되었다.

예제를 보면 도커를 사용하게 되면서 서버 확장이나 관리가 굉장히 편해졌습니다.
단순히 이미지만 배포하여 컨테이너를 다시 실행하면 되기 때문에 서버 대수가 많아질 수록 더욱 더 편리해집니다.

도커가 어떤 역할을 하길래 이런식으로 사용할 수 있는걸까요?

도커는 호스트 OS(서버환경)에서 동작하면서 각 환경에 대한 컨테이너를 생성합니다.
여기서 말하는 컨테이너는 한번쯤 들어봤을법한 화물(컨테이너)이 맞습니다.

운송수단에 실어야 할 화물들의 규격이 모두 제각각이어서 철도, 트럭 등을 통해서 운반을 해야하는 경우 운송수단이 바뀔때마다 화물을 하나하나 옮겨야 하던 것을, 컨테이너를 통해 컨테이너 채로 옮기게 하면서 작업을 효율적으로 할 수 있게 해주었습니다.
이와같이 서버의 각 프로그램, 종속되는 프로그램, 설정 들을 하나의 컨테이너에 담아 이동하여 내부에 무엇이 있더라도 동일한 방법으로 쉽게 옮길 수 있게 됩니다.(도커의 로고에 고래 위에 화물이 있는 이유...)

이렇게 생성되는 도커의 컨테이너들은 설정에 따라 컨테이너 간의 통신이 가능하고, 호스트 OS와 파일공유 등이 가능합니다.
컨테이너 삭제 시에는 컨테이너 내부에 저장되어있던 정보들이 삭제되기 때문에 잦은 변경이 일어나는 설정파일이나 DB파일 등은 호스트 OS에 저장하도록 설정하여 사용합니다.

좀 더 깊고 자세한 정보들은 검색해보시면 워낙 많기때문에 왜 사용하는지에 대해서만 간단한 예시를 통해 적어보았습니다.
사용 방법이나 자세한 정보는 조금 더 공부한 뒤 적을 생각입니다.

혹시 궁금하거나, 잘못된 사항이 있으면 댓글에 남겨주시기 바랍니다!

Comments