오늘 낮에 친구가 “아니 도대체 도커는 왜 쓰는거임?” 라고 물었다. 나는 mysql, nginx 같은거 한번에 관리할 수 있고 설치도 따로 하지 않아도 된다고 대답했다. 평소에 도커를 너무나도 당연하게 사용해왔기 때문에 첨언할 내용이 생각나질 않았다. 따라서 Docker 가 Base 로 사용하는 Container 기술과 Docker 에 대한 이론적인 부분을 간단하게 적고자 한다.

Docker 를 이해하기 앞서

우선 Docker 를 이해하기 위해서는 Container 에 대한 이해가 필요하다.

Container

Container 란 우리의 Application어떠한 환경이든 실행할 수 있도록 애플리케이션에서 사용되는 라이브러리 같이 필요한 모든 요소들을 하나의 패키지로 패키징하여 하나의 독립적인 프로세스로 격리시키는 기술을 의미한다.

즉, 요약하면 Container 는 어떠한 환경에서든 우리의 애플리케이션이 실행될 수 있도록 라이브러리와 같은 구성요소들을 하나로 패키징하여 격리시키는 기술을 의미한다.

Container 의 이점

  1. 하드웨어 레벨에서 가상화되는 VM 과 다르게 Containter 는 OS 레벨에서 가상화되어 OS Kernel 을 공유하기 때문에 VM 보다 훨씬 적은 메모리를 사용한다.
  2. 애플리케이션을 실행하기 위한 모든 구성요소들을 하나로 패키지하여 제공되고, 실행환경에 구애받지 않기 때문에 이식성워크로드의 이동성 이 보장된다.
  3. 개발자는 Application 과 Library 와 같은 구성요소들에만 집중할 수 있고, 운영 팀은 배포에만 집중할 수 있기 때문에 책임 분리 가 가능해진다.
  4. Linux, Windows, Mac 등의 운영체제를 가리지 않고 가상 머신, 물리적 서버, 개발자 컴퓨터, 데이터 센터, 온프레미스 환경, 퍼블릭 클라우드 등 사실상 어느 환경에서나 구동되므로 개발 및 배포가 크게 쉬워져 워크로드의 이동성 이 보장된다.

워크로드의 이동성은 작업이나 데이터가 다른 시스템, 플랫폼 또는 환경으로 자유롭게 이동할 수 있는 능력(이식성)을 의미한다. 보통 워크로드의 이동성은 가상화 기술, 컨테이너화된 환경 등을 통해 구현될 수 있다.

Docker 란

Docker 는 앞서 설명한 Container 기술을 기반으로한 오픈소스 가상화 플랫폼이다. Docker 를 통해 Container 기술을 사용하고 이러한 Container 들을 관리할 수 있다.

위키백과에서는 도커(Docker) 는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트라고 설명하고 있다.

Docker 의 특징

사실 Docker 가 Container 기술을 기반으로 하기 떄문에 앞서 설명한 Container 의 이점부분과 겹치는 부분이 많다.

  1. 확장성 및 이식성
    • Docker 가 설치되어있으면 어떤환경에서든 Container 를 실행할 수 있다.
    • 오픈소스이기 때문에 특정 서비스에 종속적이지 않다.
  2. 표준성
    • java, ruby, node, go, php 로 이루어진 애플리케이션의 배포방식은 모두 다르다. 하지만 docker 를 통해 모든 서비스들의 배포과정이 동일해진다.
  3. 이미지
    • Docker 에서 Container 를 실행하기위해서는 Image 라는 파일로 만드는 과정이 중요하다. 이러한 Image 파일은 Dockerfile 을 이용하여 이미지를 빌드할 수 있다.
    • Image 파일을 Image 저장소에 저장하여 운영서버에서 해당 Image 를 불러오면 Container 를 실행할 수 있다.
    • 또한 이러한 Image 빌드 기록이 남기 때문에 버전관리 또한 가능해진다.
  4. 설정파일
    • 설정을 환경변수 로 제어 및 관리한다.
    • Container 를 띄울 때 MYSQL_PASS=password 와 같은 환경변수를 지정할 수 있다.
  5. 자원관리
    • Container 는 삭제 후 새로 만들면 모든 데이터가 초기화된다.
    • 업로드 파일을 외부 저장소와 링크하여 사용하거나 S3 같은 별도의 저장소가 필요하다.