Docker 를 사용하여 Service 분리해보기(1) - Docker란?

홍현기·2025년 3월 31일
0

앞서

작성자는 도커를 실제 업무에 사용해본 경험이 없다. 공부하면서 알게된거지만 도커는 생각보다 많은 개발자들이 업무에 활용하고 사용하고 있었다.. (난 왜 항상 뒤쳐지는가..) 물론 이번에 개발하게된 서비스가 도커를 사용하여 서비스가 관리가 되고 있었기에 관심을 가지게 되었다. 도커를 사용하여 서비스를 관리하는 방법에 대하여 알아보자

Docker 란?

구글에 도커란 이라고 검색만 해도 도커에 대한 개념을 알 수 있지만 내가 보고, 읽은 개념중 재밌고, 또 실무에 적용될만한 개념만 적어보도록 하겠다.

먼저 도커에 어원이 재밌다. 도커는 컨테이너 기반의 가상화 플랫폼이다. 부두에서 컨테이너를 옮기고 관리하는 직업인 docker에서 따 온 이름에 걸맞게 컨테이너를 잘 다룰 수 있게 도와 주는 도구 라고 한다. 나중엔 java, spring 등 다양한 어원을 알아봐야겠다..

그림을 보게되면 OS(Host Operationg System)위에 Docker가 있고, 그 위에는 다수의 애플리케이션 서비스가 올라가 있는 형식을 볼 수 있다. 대~충 감이 오지 않나.

Docker 의 기능

도커는 애플리케이션을 컨테이너라는 개념으로 환경을 격리시켜 실행하고 관리하게 해주는 엔진이라고 한다.

도커를 사용하게 되면 크게 네 가지 정도의 장점이 있는거 같다.

  • 환경의 일관성
  • 애플리케이션 배포
  • 리소스 관리
  • 개발 편의성

1. 환경의 일관성

도커는 앞서 말한것처럼 컨테이너라는 개념으로 환경을 격리시켜 애플리케이션을 실행하므로, 컨테이너 내의 환경 (운영체제, 라이브러리, 패키지 등)은 항상 동일하다. 또한 컨테이너 내부에서 애플리케이션이 읽고 쓰는 파일 시스템이나 환경 변수가 격리되어 있어, 호스트 시스템이나 다른 컨테이너와 충돌하지 않는다.

2. 애플리케이션 배포

애플리케이션과 그에 필요한 모든 것을 하나의 컨테이너 이미지라는 개념으로 묶어서 배포할 수 있다.

3. 애플리케이션 배포

컨테이너는 리소스(메모리, CPU 등)를 효율적으로 사용하며, 여러 컨테이너가 동일한 호스트 운영체제에서 독립적으로 실행될 수 있다. 로 격리된 환경을 제공하면서도 경량화되어 있어 가상 머신에 비해 더 적은 리소스를 사용한다.

가상머신에 비교는 밑에서 따로 설명하겠다.

4. 개발 편의성

개발자는 Docker로 로컬에서 다양한 환경을 쉽게 재현할 수 있다.  예를 들어, 특정 운영체제나 데이터베이스, 애플리케이션 서버가 필요한 경우에도 Docker를 사용해 몇 줄의 명령어로 해당 환경을 설정할 수 있다고 하는데..

이건 못해봄..ㅋ

Docker vs VM

출처: https://www.linkedin.com/pulse/docker-containers-virtual-machines-explained-mesut-oezdil-shsfe

[도커는 아파트 단지를 상상해보자. 이 단지 내에서 Docker 컨테이너는 아파트와 같다. 즉, 거주자(=애플리케이션)에게 필요한 모든 것을 제공하는 독립형 생활 공간이다 다만  동일한 배관 및 전기 시스템(호스트 OS 및 하드웨어)을 공유한다.]

  • 컨테이너 : 각 컨테이너는 애플리케이션(앱 1, 앱 2, 앱 3)이 실행되는 격리된 환경이다. 컨테이너는 호스트 OS 커널을 공유하지만 파일 시스템, 라이브러리 및 종속성을 유지한다.
  • Docker Engine : 컨테이너를 만들고, 운송하고, 운영할 수 있는 중앙 플랫폼이다. 아파트 단지의 있는 시설들이 원활하게 운영되도록 보장하는 관리부서 개념이다.
  • Host OS : Docker Engine이 실행되는 물리적 또는 가상 머신의 기본 운영 체제
  • Infrastructrue: 컴퓨팅 리소스를 제공하는 물리적 또는 클라우드 기반 서버를 말한다. 아파트를 건설할 수있는 단지 내 공간을 의미한다고 보면 된다.

[VM은  도커 컨테이너가 단지 내의 아파트라면, 가상 머신은 각각 독립적인 시설과 시스템을 갖춘 주택과 같다.]

  • App/Guest OS가 있는 VM : 각 VM은 완전한 게스트 운영 체제(게스트 OS)와 그 위에서 실행되는 애플리케이션(앱)을 포함하여 물리적 머신의 완전한 에뮬레이션이다. 즉 VM은 물리적인 하드웨어의 모든 기능과 리소스를 모방하여, 사용자가 물리적 머신처럼 사용할 수 있게 해준다. VM은 서로 완전히 격리되어 있으며 각각 CPU, 메모리 및 스토리지 리소스를 공유해야 한다.
  • Hypervisor: 여러 VM이 단일 물리적 서버에서 실행될 수 있도록 하는 소프트웨어 계층 주택 건설을 위한 공간을 주택을 위한 별도의 구획으로 나누는 것으로 생각하면 된다.
  • Host OS : 물리적 하드웨어에서 실행되는 운영 체제로, 하이퍼바이저가 이를 분할하여 VM을 만든다.
  • 인프라 : Docker와 유사하지만 VM을 호스팅하는 실제 물리적 또는 클라우드 인프라다.

마치며

나름대로 이해하기 쉽게 정리하여 보았다. 도커를 사용함으로써 많은 이점이 있다는걸 알 수 있었다. 도커를 왜 많은 개발자들이 사용하는지 이해가 간다..

0개의 댓글