쿠버네틱스로 가는 발판① - Docker(도커) 기본 개념

2022. 5. 31. 01:25IT용어 아는척 하기

반응형

 

회사에서 새로운 프로젝트를 들어가면서 쿠버네틱스를 사용할 일이 생겼다.

지금까지 프론트엔드를 기반으로 개발 커리어를 쌓아왔는데 백엔드를 깊게 파볼 기회가 생겼다.

본 프로젝트에 들어가기 전에 쿠버네틱스에 대한 전반적인 내용을 정리하며 공부해 볼 계획이다.

 

찾아보니 쿠버네틱스 자격증도 존재하는 것을 알게 되었다.

이 자격증 취득을 목표로 일단은 달려볼 생각이다.

 

 

 

1.  컨테이너(Container) 기술


 

도커는 컨테이너 기술을 지원하는 여러 프로젝트들 중 하나이며 가장 인기 있는 녀석이다.

 

- 컨테이너 기술의 역사
2000년대 중반 리눅스에 내장된 LXC(LinuX Container)를 시작으로 계속 존재해 왔음
도커와 클라우드 기반 컴퓨팅 시대가 도래하면서 각광받기 시작한 기술

 

도커는 이러한 컨테이너 기술의 표준이라고 볼 수 있을 정도로 많이 쓰인다.

 

- 컨테이너 개념
어플리케이션을 구동하는 격리된 컴퓨팅 환경

 

예전에는 아래와 같은 말들을 많이 했다.

"인스턴스 하나 만들어서 서비스 띄우자."

"VM 하나 새로 만들어서 스케일 업하자."

 

새로운 어플리케이션을 구동하기 위해 가상화를 이용하자는 의미이다.

 

기본적으로 이 가상화를 위해서는 하이퍼바이저 기반의 OS(운영체제)들이 필요했다.

이는 매우 무겁고 유연하지 못한 방법이였다.

 

 

 

이에 비해 도커 등을 활용한 컨테이너 기술은 운영체제를 제외하고 어플리케이션 실행에 필요한 모든 파일 및 환경들만을 패키징 한 형태로 서비스를 구동한다.

 

기존 하이퍼바이저와 Guest OS가 하던 역할을 도커 엔진이 하게 된 것이다.

이처럼 도커 엔진을 활용한 컨테이너는 가상머신처럼 하드웨어를 전부 구현하지 않기 때문에 빠른 실행이 가능하다.

또한 하이퍼바이저가 차지하던 공간을 더 활용해 어플리케이션에 투자할 수 있게 되었다.

 

 

이러한 컨테이너 기술이 가능한 기술적 베이스는 리눅스 커널에 있다.

 

커널은 메모리나 저장장치 내에서 운영체제의 주소 공간을 분리하여 필요한 여러 서비스를 제공하는 역할을 한다.

정확히는 리눅스 커널의 네임 스페이스와 cgroups를 이용하여 가상화가 가능하다.

 

- 리눅스 네임 스페이스
각 프로세스가 파일 시스템 마운트, 네트워크, 유저, 호스트 네임 등에 대해 시스템에 독립 뷰를 제공하는 기능
이 기술로 프로세스 별 간섭이 없기 때문에 하나의 OS에서 라이브러리 충돌 등이 일어나지 않게 어플리케이션을 동작 시킬 수 있음.

 

- 리눅스 컨트롤 그룹(cgroups)
프로세스로 소비할 수 있는 리소스 양(CPU, 메모리, I/O, 네트워크 대역대, device 노드 등)을 제한하고 컨트롤 할 수 있는 기능
이 기술을 활용하여 프로세스 별 리소스 분배를 하고 어플리케이션을 여러개 동작 시킬 수 있음.

 

2.  Docker(도커)


앞서 언급했듯이 컨테이너 기반의 가상화 기술은 계속 존재해 왔다.

이러한 소프트웨어에는 OpenVZ, LXC, Lunix vServer, FreeBSD Jail, Solaris Zones, Docker 등이 있으며, 그 중 최근 가상화 및 클라우드 컴퓨팅 영역에서 가장 주목받고 있는 것이 바로 도커이다.

요즘 백엔드 개발 및 아키텍처 방식으로 각광받는 MSA(Micro Service Architect) 역시 도커를 유명하게 하는데 한 몫 했다.

 

 

도커는 PaaS, SaaS와 같은 다양한 클라우드 서비스 모델과 같이 사용이 가능 하다.

 

도커의 주요 개념들을 보자면 이미지와 컨테이너를 들 수 있다.

Java 언어와 비교하자면 class를 작성해두고 new를 통해 인스턴스를 생성하는 것과 비슷하다.

 

이미지는 class이고 인스턴스는 컨테이너로 볼 수 있다.

 

- 이미지 : 필요한 프로그램과 라이브러리, 소스를 설치한 뒤 만든 하나의 파일
- 컨테이너 : 이미지를 격리하여 독립된 공간에서 실행한 가상 환경

 

 

 

개발한 소스코드들의 레파지토리(github 등)가 존재하듯 도커의 이미지들에도 레지스트리가 있다.

 

도커 허브가 대표적이며 이곳에 만들어 둔 이미지를 pull 하거나 commit 할 수 있다.

 

 

 

Docker Hub Container Image Library | App Containerization

Build and Ship any Application Anywhere Docker Hub is the world's easiest way to create, manage, and deliver your team's container applications.

hub.docker.com

 

 

도커는 이러한 장점들을 많이 가지고 있지만 기존의 모놀리틱 애플리케이션이 서비스가 커지면서 겪어온 한계들과 마찬가지로 한계가 있다.

 

서비스가 커지면 커질 수록 관리해야 하는 컨테이너의 양이 급격히 증가하여 관리가 어려워 진다.

이에 따른 배포 및 컨테이너 배치 전략이 필요하고 스케일-인, 스케일-아웃에 어려움을 가지고 있다.

 

이런 문제를 해결하기 위해 등장한 것이 쿠버네틱스다.

 

 

쿠버네틱스는 좀 더 레벨업을 한 이후에 개념부터 차근차근 알아 볼 계획이고 도커의 실제 사용법에 대해 좀 더 알아보자.

 

 

 

1) 도커 설치

 

 

도커는 앞서 설명했듯이 컨테이너 기술을 기반으로 동작하고 이 컨테이너 기술은 리눅스 커널을 사용한다.

 

따라서 리눅스 이외의 OS에서 도커를 설치하려면 결국 하이퍼바이저 위에 리눅스 OS를 띄워서 사용해야한다.

 

매우 번거로운 작업이 아닐 수 없다.

 

도커를 맛보기로 사용해 볼 때는 여러 클라우드 서비스의 무료 티어(AWS free Tier, GCP 가입 크리딧 등)을 이용해 리눅스에서 연습해 보는 것을 권장한다.

 

 

설치는 우분투를 기준으로

 

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh

 

반드시 관리자 권한을 사용하여 설치한다.

 

 

 

2) 도커 라이프사이클

 

 

 

도커는 원하는 이미지를 레지스트리에서 pull 해와서 이미지를 다운로드하면서 시작된다.

 

다운받은 이미지를 create하여 컨테이너로 만들고 start하여 메모리에 띄운다.

 

사용이 끝나면 메모리에 떠 있는 컨테이너를 stop 하고 컨테이너를 rm으로 삭제하고

 

이미지까지 삭제하려면 rmi를 수행한다.

 

이때 컨테이너를 만든 이후 필요한 것들을 추가하여 커스텀 하면 해당 컨테이너를 이미지화 해서 commit 할 수 있다.

 

이를 push하여 레지스트리에 저장해 두고 다른곳에서 pull해서 쓸 수 있다.

 

이것이 간단한 도커의 라이프 사이클이다.

 

 

다음 포스팅에서는 실제 우분투 환경에서 도커 명령어를 사용하여 도커 라이프 사이클들을 직접 돌려보겠다.

 

 

 

 

 

 

 

 

 

반응형