Docker란?

자바클린·2024년 1월 10일

Docker(a.k.a docker engine)

Linux Container에 여러가지 기능을 추가함으로써 애플리케이션 컨테이너를 좀 더 쉽게 이용할 수 있도록 만들어진 오픈소스 프로젝트

도커 엔진이라고 불리어지는데 도커를 생성,관리하는 주체로서 이 자체만으로 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 주 프로젝트이기 때문이다.

가상 머신 vs 도커 컨테이너

  1. 가상 머신
    Hypervisor위에 각각의 독립적이고 완전한 OS가 생성되어 진다.
    하지만, 라이브러리와 커널 등을 전부 포함하기 때문에 이미지로 만들었을 때 크기가 커지면서 애플리케이션 배포에 부담이 있다.
    각종 시스템 자원을 가상화하고 독립적인 공간을 만들기 위해서는 Hypervisor를 거치면서 성능 손실이 있다.

  2. 도커 컨테이너
    chroot, namespace, cgroup 등을 사용하여 프로세스 단위의 격리 환경 제공하여 성능 손실 거의 없음
    컨테이너에 필요한 커널은 Host의 커널을 공유해서 사용하고, 컨테이너 안에는 라이브러리 및 실행 파일만 존재하기 때문에 이미지 크기 부담이 없다.

도커 사용 이유

  1. 개발/배포가 쉬워짐
    도커 컨테이너는 '호스트 OS'라는 서버를 부팅할 때 실행하는 운영체제 위에서 실행되는 격리된 공간이다.
    컨테이너에 특별한 권한을 주지 않는 이상 컨테이너 내부에 다양한 작업을 하더라도 호스트 OS에는 영향이 가지 않는다.
    컨테이너 작업 후 운영환경 배포 시 해당 컨테이너를 '도커 이미지'로 만들어서 운영 서버에 전달하면 끝.
    서비스를 개발했을 때의 환경을 다른 서버에서도 컨테이너로서 똑같이 복제할 수 있어서 개발/운영 환경의 통합이 가능하다.
    도커는 이미지 내용을 레이어 단위로 구성하며, 중복된 레이어를 재사용하기 때문에 배포하는 속도가 빠르다.

  2. 독립성/확장성 높아짐
    이전에 많이 사용했던 모놀리스 구조는 소프트웨어의 여러 모듈이 상호작용하는 로직을 한 프로그램에서 구동할 수 있도록 하는 구조이다.
    서비스가 거대해질수록 이런 구조는 유연성과 확장성이 떨어진다는 단점이 있어서 이를 대체하기 위해 마이크로서비스 구조가 급부상했다.
    마이크로서비스 구조는 여러 모듈을 독립된 형태로 구성하기 때문에 언어에 종속되지 않고 변화에 빠르게 대응 가능하다.
    컨테이너는 수 초내에 생성, 시작이 가능하고 여러 모듈에게 독립적이니 환경을 제공 가능하여 마이크로서비스에서 가장 많이 사용하고 있는 가상화 기술이다.
    컨테이너 기반의 마이크로서비스는 개발자가 직접 구현하기 보다는 도커 스웜 모드, 쿠버네티스 등 컨테이너 오케스트레이션 플랫폼을 사용하여 만드는것이 일반적이다.

profile
재미있고 고통스러운 개발 공부

0개의 댓글