Home Docker
Post
Cancel

Docker

도커란?

도커는 컨테이너를 생성하고 관리하기 위한 도구입니다.

  • 리눅스 컨테이너에 여러 기능을 추가하여 애플리케이션을 컨테이너로 조금 더 쉽게 사용할 수 있도록 만들어진 오픈소스 프로젝트로 go 언어로 작성되어 있습니다.
  • 기존에 쓰이던 가상화 방법인 가상 머신과 달리 도커 컨테이너는 성능의 손실이 거의 없어 클라우드 인프라 솔루션으로 주목받고 있습니다.
  • 도커에 관련된 프로젝트로 도커 컴포즈, 레지스트리, 도커 허브 등 여러가지가 있지만 일반적으로 도커는 도커 엔진 or 도커에 관련된 모든 프로젝트를 의미합니다. 도커 엔진은 컨테이너를 생성하고 관리하는 주체로 컨테이너를 제어할 수 있고 다양항 기능을 제공합니다.
  • 도커의 생태계에 있는 여러 프로젝트들은 도커 엔진을 좀 더 효율적으로 사용하기 위한 것에 불과하기 때문에 핵심이 되는 것은 도커 엔진입니다.

컨테이너란?

소프트웨어에서 컨테이너란 표준화된 소프트웨어 단위입니다.
기본적으로 코드 패키지로 해당 코드를 실행하는데 필요한 종속성과 도구가 포함되어 있습니다.

왜 컨테이너를 사용해아할까?

  • 독립된 개발환경을 보장받을 수 있습니다.
    • 서버를 부팅할 때 실행되는 운영체제를 일반적으로 호스트 OS라고 부르는데 도커 컨테이너는 호스트 OS 위에서 실행되는 격리된 공간입니다. 따라서 컨테이너 내부에 수많은 소프트웨어를 설치하고 설정 파일을 수정해도 호스트 OS 에는 영향을 끼치지 않는 독립된 개발환경을 보장받을 수 있습니다.
  • 도커가 실행되는 모든 곳에서 동일한 애플리케이션을 실행할 수 있습니다.
    • 애플리케이션의 코드를 실행하는데 필요한 종속성과 도구가 포함되어 보관할 수 있으며 도커가 실행되는 모든 곳에서 이를 가져올 수 있기 때문에 어디서든 정확히 동일한 애플리케이션을 실행할 수 있게 됩니다. 모든 것이 컨테이너에 있기 때문에 애플리케이션을 실행하려는 위치에 추가 도구를 설치하는 것에 대해 걱정할 필요가 없습니다.

가상 머신 VS Docker 컨테이너

가상머신

장점

  • 분리된 환경을 생성할 수 있습니다.
  • 그 안에 환경별 구성을 가질 수 있습니다.
  • 모든 것을 안정적으로 공유하고 재생산이 가능합니다.

단점

  • 중복 복제로 낭비되는 공간이 발생하게 됩니다.
  • 호스트 시스템 위에 추가 시스템이 실행되고 있기 때문에 성능이 나빠질 수 있으며 특히 이러한 시스템이 여러 개 있는 경우 실제로 그 성능은 저하될 것입니다.
  • 개발에서 생산한 제품을 배포하려면 가상 머신과 동일한 방식으로 프로덕션 머신을 구성해야 합니다. 재상산 및 공유가 가능하더라도 원하는 모든 시스템이 해당 버츄얼 머신을 설정해야 하고 정확히 동일한 방식으로 구성해야 하기 때문에 까다로울 수 있습니다.

Docker 컨테이너

도커 컨테이너는 가상 머신의 단점을 해결할 수 있습니다.

장점

  • 컨테이너를 사용하면 호스트 운영체제(윈도우, 맥 OS, 리눅스)가 존재하지만 하나의 머신에 몇 대의 머신을 설치하지는 않습니다. 대신 컨테이너 애뮬레이트를 지원하는 내장 컨테이너를 활용합니다.
  • 구성파일을 사용하여 컨테이너를 구성하고 설명할 수 있습니다. 그 파일을 다른 사람들과 공유하여 다른 사람들이 컨테이너를 다시 만들 수 있도록 하거나 컨테이너 이지미라 불리는 것을 빌드할 수 있습니다. 또 그 이미지를 다른 사람과 공유하여 모든 사람이 자신의 시스템에서 동일한 컨테이너를 시작할 수 있도록 할 수 있습니다.

예를 들어, 도커 컨테이너는 아래와 같은 문제점을 해결해 줄 수 있습니다.

  • 로컬 환경인 개발 환경에만 애플리케이션이 동작되는 버전이 설치되고 실제 프로덕트 환경에서는 버전이 일치하지 않아 동작하지 있을 수 있습니다.
  • 팀이나 회사 내의 각각의 개발 환경의 버전이 다를 수 있습니다.(관리하고 설치해야 하는 복잡한 종속성이 있는 복잡한 프로젝트가 있을 수도 있다.) 같은 코드 기반에서 함께 작업할 수 없다면 항상 작동될 것이라는 보장이 없습니다.
  • 혼자서 작업하는 프로젝트가 여러 개인 경우 충돌하는 버전이 있을 수 있습니다.

도커 컨테이너는 특정 환경을 도커 컨테이너에 고정하여 제공하여 컨테이너에서 실행되기 때문에 코드가 항상 정확한 버전에서 실행되도록 할 수 있습니다. 따라서 동일한 환경을 것을 가지고 있다는 점에서 항상 동일한 동작과 결과를 제공한다는 이점이 있습니다.

이와 같은 장점이 도커와 컨테이너를 사용하는 이유입니다.

This post is licensed under CC BY 4.0 by the author.