도커(Docker)가 왜 필요할까?

초코칩·2022년 11월 30일
1

도커/쿠버네티스

목록 보기
1/2
post-thumbnail

기존 VM

가상화라는 개념 이전에는 하나의 서버에 하나의 어플리케이션만 구동시켰다고 한다. 하나의 서버에 남는 자원이 많았으며, 남는 자원을 이용하기 위해 등장한 기술이 가상화 기술이다. 그 중 Hypervisor 기반의 가상화가 가장 많이 이용되었다.

Hypervisor(HW)

VM을 생성하고 구동하는 소프트웨어로, GuestOS를 위해 CPU, RAM, Hard Disk 등 하드웨어를 가상화(분리)하여 VM의 생성과 관리를 지원하다.

Docker Engine

Linux Interface인 cgruop을 통해 자원(HardWare Resource)를 프로세스 단위로 제어할 수 있게 하고 Linux Namespace를 통해 파일을 네트워크 인터페이스를 가상화해서 자기 자신이 소유하게 한다.
VM에서 GuestOs와 Hypervisor를 대신한다.

출처) https://medium.com/@darkrasid/docker%EC%99%80-vm-d95d60e56fdd

윈도우 환경에서 Hypervisor가 필요하다! 따라서 Docker는 Hypervisor를 안하려고 사용하는 것이기에 되도록 Ubuntu, CentOs환경을 이용하자.

Micro Service의 등장

Service가 더욱 micro하게 쪼개지면서 각각 개발팀마다 환경이 다르다. 개발 과정에서 모든 팀들이 컨테이너 환경을 통해 독립적으로 개발을 할 수 있게 해준다.

서비스 단위로 컨테이너를 만들어서

  • 자원의 효율성
  • 개발 프로세스의 단순화
  • 빌드 타임 감소
    와 같은 이점을 얻을 수 있어 개발에 집중 가능하다.

무조건 MicroService?

위 그림은 아마존과 넷플릭스의 마이크로서비스이다. 굉장히 거대하고 서로 실처럼 얽혀 있는 것을 볼 수 있다.

서비스가 더 쪼개지면 의존성이 낮아지지만 상호의존성에 대한 부분은 완전히 없어지지 않는다. 넷플릭스는 의존성을 도큐먼트화한다 API제공하여 컨테이너의 조화를 관리한다.

컨테이너가 많아지면 관리하기 힘드니, 이를 오케스트레이션 툴인 쿠버네티스를 통해 관리한다.

도커(Docker)

도커란 무엇인가?

  • 컨테이너 기술을 지원하는 다양한 프로젝트 중 하나
  • 컨테이너 기술의 표준
  • 다양한 운영체제에서 사용 가능 (Linux, Window, MacOS)
  • 어플리케이션에 국한되지 않고 의존성 및 파일 시스템까지 패키징하여 빌드, 배포, 실행을 단순화
  • 리눅스의 NameSpace와 cgroups와 같은 커널 기능을 사용하여 가상화

이미지, 컨테이너

이미지

필요한 프로그램과 라이브러리, 소스를 설치한 뒤 만든 하나의 파일

컨테이너

이미지를 격리하여 독립된 공간에서 실행한 가상 환경

VM의 오버헤드를 컨테이너로 줄이고, 동일 시스템에서 실행하는 소프트웨어의 컴포넌트가 충돌하지 않게 서비스를 격리하는 기술

컨테이너 격리 기술 - Linux Kernel

Linux Namespace

각 프로세스가 파일 시스템 마운트, 네트워크, 유저(uid), 호스트 네임(uts) 등에 대해 시스템에 독립 뷰를 제공

Linux Control Group

프로세스로 소비할 수 있는 리소스 양 (CPU, Memory, I/O, 네트워크 대역대, Device Node 등)을 제한

도커의 한계

  • 서비스가 계속 쪼개지면, 관리해야 하는 컨테이너의 양이 급격히 증가
  • 배포 및 컨테이너 배치 전략 필요
  • scale-in, scale-out이 어려움
profile
초코칩처럼 달콤한 코드를 짜자

0개의 댓글