Docker#1.Docker란? 도커와 쿠버네티스



이번 포스팅은 이미 등장한지 5년이 넘고 컨테이너 기술의 표준으로 자리잡았지만, 아직 접해보지않은 사람에게는 생소할 수 있는 Docker쿠버네티스에 대해 간단히 알아보고 인프라관련용어들에 대해 정리해보려한다.



1. 시스템 인프라 & 시스템의 이용형태

이제 도커에 대해 설명하기 전에 먼저 인프라시스템이 무엇인지 그리고 그 이용형태의 종류가 어떻게 분류되는지 부터 알아보려한다. 시스템 인프라는 일반적으로 응용프로그램을 가동시키기 위한 하드웨어, OS, 네트워크, 미들웨어 등을 의미하며, 일반적으로 기능 요구사항비기능 요구사항으로 나뉘게 된다.


그림2


최근 인프라시스템을 우리는 온프레미스클라우드 라는 것으로 분류하여 사용하고 있는데, 먼저 온프레미스 체계는 일반적으로 기업과 같은 곳에서 자사내 거대한 서버를 두고 시스템 구축부터 운용까지 모든것을 자체적으로 사용하는 시스템 이용체계를 의미한다.

이러한 체계는 초기 시스템의 구축비용이 크고, 운용에 드는 유지보수 비용도 일정량 이상을 부담해야 한다.

✓ 적합한 경우 : 높은 가용성이 요구되는 경우(절대 끊어지면 안되는 경우), 높은 기밀성을 요구하는 경우


반면, 클라우드 시스템은 아마존 웹서비스(AWS), Azure, GCP 와 같이 사용자가 기반체계를 직접 구축하여 보유하지 않고, 서버와 네트워크등의 기반체계를 제공하는 플랫폼에 일정 금액을 지불하고 사용하는 체계이다.

이는 특정사용자에게만 제공되는 프라이빗클라우드 와 불특정 사용자에게 제공되는 퍼블릭클라우드 로 분류되며 단기간에 인프라를 구축할 수 있고, 서비스 이용량 만큼만 요금이 부과되기때문에 비용이 절감된 다는 장점이 있다.

✓ 적합한 경우 : 트래픽 변동이 많은 경우(고객용 시스템), 재해 등의 초자연적인 현상으로 해외에 백업 구축이 필요한 경우. 서비스 빠르게 제공하고 싶은 경우



2. Docker란 무엇일까??

Docker는 컨테이너를 활용한 오픈소스 가상화 플랫폼이다.


컨테이너는 응용프로그램의 구동환경을 별도로 격리한 공간이라고 이해 할 수 있는데, Docker는 이러한 컨테이너들을 구동시켜주는 역할을 한다. 정확히는 Docker Engine이 그 역할을 한다고 볼 수 있다. 컨테이너 자체가 독립적인 구동환경을 갖고있기에 플랫폼에 종속적이지 않고, 프로그램을 구동해야하는 환경을 서버마다 설치할 필요없이 도커위에 컨테이너 그자체로 구동할 수 있다는 것이 장점이다.


보다 쉽게 이해하기 위해 예를 들어보자면, Window환경에서 비지니스로직단을 Springboot로 개발하고 프론트엔드 환경을 React로 개발한 후, 이를 도커 이미지로 빌드하여 AWS 서버상에 해당 도커 이미지를 실행시키면 운영서버는 자바 혹은 Node.js가 설치되지 않았고 Linux 환경임에도 불구하고 로컬에서 제작했던 프로젝트들이 정상적으로 구동되는 시스템 이라고 이해할 수 있다.


즉, 이미지 파일만 잘 만들어 놓으면 로컬개발환경과 동일하게 실제 배포환경에서도 프로젝트를 구동할 수 있다.


그림1


최근 프로젝트를 진행하며 AWS를 통해 웹솔루션을 배포하면서 Docker에대한 관심을 갖게 되었는데, 사실 Docker 없이도 기존 배포하는방식을 사용할때의 불편함을 딱히(?) 못느꼈기에 써볼 생각을 안했었다….만 주변 동료들이 ‘Docker가 그렇게 편하다고,다들 쓰고있다고 개발자라면 쓸줄 알아야 한다(?)’ 라길래 공부도 할겸 책을 잡으며 공부했다. (물론 지금은 개발자가 아니다..)

http://www.yes24.com/Product/Goods/64320759

관련된 책은 위의 도서를 참고 하며 공부했고, 현재는 웹개발 프로젝트에 적용하여 개발중이다. Docker 경험자에게 Docker를 사용한다는것은 시스템의 인프라 기술을 활용하는것을 의미함을 알지만, 인프라시스템을 직접적으로 다루지 않는 일반 개발자에게 인프라 시스템이라는 용어자체를 다소 생소하게 느껴 수도 있을 것이다.


여기서 우리가 짚고 넘어가야 할 것은 도커는 VM과 다르다 는 것이다. 이 부분은 명확하게 이해하고 넘어갈 필요가 있다. 그러려면 하이퍼바이저에 대한 개념을 이해해야 하는데, 해당 부분은 아래 포스트를 참고하면 좋을 것 같다.

하이퍼바이저에 대한 이해 : 포스트 링크

도커 이미지파일은 읽기 전용파일이며 이미지를 실행시켰을때 부터 만들어지는 모든 데이터는 컨테이너안에 쌓이거나, volume 설정을 했을 시 호스트의 저장소에 쌓이게 된다. 도커를 처음 접하는 사람들이 가장 많이 혼동하는 부분 중 하나이다. (내가 그랬다.😞)

✓ 절대 도커 이미지 자체가 변경되거나 저장되는것이 아니다.



3. 쿠버네티스는 무엇일까?

일반적으로 도커에 대해 공부하다 보면 쿠버네티스라는 것을 알게된다. 둘의 차이에 대해 헷갈려 할 수 있는데, 간단하게 말해서 도커는 컨테이너를 활용한 기술이고, 쿠버네티스는 이러한 도커 컨테이너를 관리해주는 솔루션이라 할 수 있다. 

쿠버네티스는 노드들을 생성에서 노드마다 컨테이너들을 관리하고 예약해주며 클러스터링을 제공하는 시스템이다. 더 추가적인 정보는 아래 해당 블로그의 포스트들을 참고하면 될 것 같다.

블로그 링크 : https://zunoxi.github.io/devops/2020/04/02/devops-k8s-concept/



도커는 일반적으로 개발자가 단순 개발하는것을 넘어 CI/CD를 위해 인프라 영역의 배포에 가담할 수 있게 만들어준툴이라고 할 수 있다. 이러한 개발자의 인프라영역의 침범(?) 으로 인프라 엔지니어의 위치가 애매해질것 같지만, 결국 이러한 도커 컨테이너를 충분히 활용 하기 위해서는 쿠버네티스같은 오케스트레이션 기술운용이 반드시 필요하다.

이와 같은 이유로 하드웨어위에 돌아가는 클러스터 설계와 운영을 위해서 해당 물리적, 논리적 구조를 잘 이해하고 있는 인프라 기술자에 대한 수요는 앞으로도 지속적으로 늘어날 것이라는 다소 가벼운(?) 예측을 해본다.

Docker 2부에서 부터는 실제 도커를 설치하고 AWS에 배포하여 운영하는 방법에 대해 서술할 예정🙃




© 2019.04. by zunoxi

Powered by zunoxi