System Engineering/Docker

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

ZunoXI 2020. 1. 28.

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

 

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

 

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

 

 

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

 

 

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

 

온프레미스 시스템이 적합한 경우 : 높은 가용성이 요구되는 경우(절대 끊어지면 안 되는 경우), 높은 기밀성을 요구하는 경우

 

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

 

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

 

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

 

 

 

2. Docker란 무엇일까??

 

 

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

 

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

 

일반적으로 VM을 운영해본 사람이라면 Docker를 처음 접할 때 "VMware, virtualBox와 같은 경우, vm자체가 서비스 역할도 하지만 OS의 역할로 시스템 단위 서버 역할도 수행 중일 수 있을 텐데, 컨테이너도 이런 기능을 제공할까? 아니면 서비스만 제공하는 개념으로 접근해야 할까?"라고 생각할 수 있다.

 

이에 대한 답은 "서버처럼 사용할 수 있다. 그러나 container가 궁극적으로 지향하는 MSA개념과는 맞지 않다"라고 할 수 있을 것 같다. 어차피 리눅스 서버라는 것은 시스템이 아니라 OS개념이고, 실제 시스템은 그 위에 데몬으로 돌아가는 것처럼 컨테이너도 마찬가지로 베이스 OS 이미지 위에 시스템을 띄워서 사용하게끔 하면 된다. 다만 앞서 언급했던 것처럼 도커는 MSA를 지향하기 때문에 한 개의 컨테이너 위에 일반 리눅스 서버처럼 모든 서비스를 다 얹어 사용하는 것이 아닌, 명령어 한 줄 단위(아주 작은 리소스 단위)로 실행될 수 있게끔 쪼개어 컨테이너를 돌리는 것이 이상적이다.

 

 

 

 

 

 

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

 

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

 

 

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

 

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

 

완벽한 IT 인프라 구축을 위한 Docker

인프라 기초 지식+인프라 환경 구축 입문서의 결정판!이 책은 컨테이너 기술을 사용한 애플리케이션 실행 환경 플랫폼인 ‘Docker’를 사용하여 인프라를 구축하기 위한 입문서이다. 특히 온프레

www.yes24.com

 

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

 

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

 

 

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

Linux 4. 하이퍼바이저(Hypervisor)에 대한 이해

개요 하이퍼바이저(hypervisor) 에대한 이해 목차 리눅스 메모리 사용량 확인 buffer? cache? Top활용 프로세스별 메모리 확인 why hypervisor? 리눅스와 도커를 공부하고 사용하다보면 하이퍼바이저라

zunoxi.github.io

 

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

 

✓ 절대 도커 이미지 자체가 변경되거나 저장되는 것이 아니다. 도커는 리눅스의 chroot를 응용한 기술이다. 이는 다음 링크를 참고하면 이해에 도움이 될 것.

 

컨테이너 기초 - chroot를 사용한 프로세스의 루트 디렉터리 격리

chroot는 프로세스의 루트 디렉터리를 변경하는 리눅스 시스템콜/명령어입니다. 루트를 변경함으로써 아주 기초적인 단계의 컨테이너를 구현해볼 수 있습니다. chroot는 아주 단순한 프로그램입니

www.44bits.io

 

 

 

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

 

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

 

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

 

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

 

Kubernetes 1. 쿠버네티스(Kubernetes)란 / 쿠버네티스의 기능

개요 Kubernetes 란, 쿠버네티스에 대한 개념이해 목차 가상화기술 vm vs container container란 쿠버네티스의 강점 쿠버네티스 구조 What is Kubernetes? 요즘은 인프라엔지니어 뿐만아니라 개발자들 사이에서

zunoxi.github.io

 

 

 

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

 

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

 

 

 


* 해당 포스팅은 아래 블로그로부터 이관되었습니다.

 

링크 : zunoxi.github.io/devops/2020/01/28/devops-docker-why-docker/

 

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

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

zunoxi.github.io

 

반응형

댓글