도커란?

컨테이너를 만들고 관리하기위한 도구

소프트웨어 개발에서 컨테이너는 소프트웨어의 표준화된 유닛(코드 패키지)이다.

  • 코드 패키지란
    중요하고 코드를 실행하는데 필요한 종속성과 도구

    nodeJs로 앱을 만들고있다면 nodeJs는 java script 런타임으로 서버에서 java script 코드를 실행할 수 있다.
    Docker로 빌드된 컨테이너와 응용프로그램이 있다면 그 컨테이너에 응용프로그램 소스도 있을 수 있다.
    nodeJs 런타임과 해당 코드를 실행하는데 필요한 다른 도구도 마찬가지.
    따라서 응용 프로그램은 동일한 nodeJs 코드와 동일한 nodeJs 코드를 사용할 수 있다.

    장점
    1. 편리한 관리 : 서비스 운영환경을 이미지로 생성했기 때문에 이미지 자체만 관리하면 된다.
     특히 이미지를 중앙관리하여 체계적인 배포와 관리를 할 수 있다.
     또한 이미지 생성 설정도 파일로 되어있기 때문에 버전관리 시스템을 활용할 수 있다.
    2. 확장 : 이미지 하나로 서버를 계속 찍어낼 수 있다.
     따라서 클라우드 플랫폼의 자동확장 (Auto Scaling) 기능과 연결하면 서비스를 쉽게 확장할 수 있다.
    3. 테스트 : 개발자의 PC나 테스트 서버에서 이미지를 실행하기만 하면 서비스 운영 환경과 동일한 환경이 구성되기 때문에 테스트가 쉽다.
    4. 가볍다 : 운영체제와 서비스 운영환견을 분리하여 가볍고 어디서든 실행 가능한 환경을 제공한다.

Docker를 써야하는 이유

기존의 가상운영체제는 컴퓨터 (호스트 운영체제) - 윈도우 or MacOs or Linux 위에 가상컴퓨터를 설치하고 그 안에서 추가 도구를 설치하는식으로 진행되어왔다.

이 경우 

-라이브러리 설치

-종속성 설치

-도구 설치

-소스복사

등의 과정을 거쳐 환경을 구축하고 다중서버일 경우 동일한 환경을 다시 구축한 후 확인 작업이 필요하다.

이 경우 가장 큰 문제는 여러 가상머신에서 발생하는 오버헤드.

컴퓨터 위에 실행되는 독립 실행 컴퓨터가 여러대 있는 경우 공간과 리소스가 많이 낭비되며, 기계 내부에 새 컴퓨터를 설치할 때마다 메모리, CPU, 하드 드라이브의 공간을 많이 잡아먹는다.

또한 애플리케이션에 직접 필요하지는 않지만 여전히 기본값으로 설정되어있는 많은 도구가 모든 가상머신에 설치되어 있을 수 있다.

 

가상 머신의 장단점

장점 단점
분리된 환경을 만들 수 있다. 낭비되는 공간을 중복해야한다.
각각 고유한 설정을 할 수 있다. 성능이 느리고 부팅 시간이 길 수 있다.
신뢰할 수 있는 코드를 공유하고 재생산할 수 있다. 복제와 조작이 가능은 하나, 까다롭다.
  배포시 개발~프로덕션까지 가상머신과 동일한 방식으로 구성해야한다.

 

Docker Container

 

- 운영체제와 시스템에 미치는 영향이 적다

- 게스트 OS를 설치하지 않고 이미지에 서버운영을 위한 프로그램과 라이브러리만 격리해서 설치하고 OS 자원(시스템콜)은 호스트와 공유할 수 있기 때문에 이미지 용량을 크게 줄일 수 있다.

- 가상화하는 계층이 없기 때문에 메모리 접근, 파일시스템, 네트워크 속도가 가상머신에 비해 월등히 빠르다.

- 이미지 버전관리 기능을 제공하고, 중앙관리를 위해 저장소에 있는 이미지를 올리고 받을 수 있다.

+ Recent posts