Docker란?

  • 하이퍼바이저(hypervisor) 없이 리눅스 컨테이너(Linux Container, LXC)기술을 바탕으로 애플리케이션을 격리된 상태에서 실행하는 가상화 솔루션
  • 플랫폼에 상관 없이 실행될 수 있는 어플리케이션 컨테이너를 만드는 기술

[ 도커의 주요 특징 ]

특징 설명
공유 * 하이퍼바이저처럼 애플리케이션 각각에 운영체제를 제공하는 것이 아니라 호스트의 운영체제를 공유하는 방식
격리 * 애플리케이션이나 프로세스가 해당 컨테이너 안에서 샌드박스 처리되어 외부 요인에 영향 받는 일 없이 안전하게 구동

[ 도커와 하이퍼바이저의 비교 ]

도커 하이퍼바이저
* 호스트 운영체제 공유와 어플리케이션 격리 * 호스트 컴퓨터 운영체제 상에서 다수의 운영체제를 가상화
  • 하이퍼바이저는 호스트OS와 하이퍼바이저 위에 Guest OS와 응용 어플리케이션들이 설치되어 있다.
  • 도커는 하이퍼바이저 없이 도커 엔진 기반으로 호스트 OS를 공유하며 App(실행하고자 하는 프로그램), Bin/Library( 프로그램이 실행하는데 필요한 환경과 관련된 파일)을 격리시켜서 쓴다.

 

[ 컨테이너의 역사 ]

원래는 화물을 트럭으로 부두까지 실어온 후 선박에 도착하면 다른 화물들과 함께 배의 측면으로 옮겨 부두노동자가 포장해서 적재했는데 이러한 적재시간이 오래 걸려서 말콤이라는 사람이 컨테이너가 발명한다. 컨테이너 박스만을 분리하여 통으로 배에 싣는 방식으로 적재함으로써 적재 비용을 절감시켰다.

 

화물 컨테이너의 내부 화물은 운송에 중요하지 않는다. 세계의 모든 선박과 트럭과 크레인이 컨테이너 규격에 적합해야 한다. 마찬가지로 도커 컨테이너도 어떤 애플리케이션(관련 파일, 프레임워크, 의존성 등) 내부에 있는지 중요하지 않다. 컨테이너는 모든 리눅스 배포판에서 실행되며, 아마존 AWS, Microsoft Azure, Google Cloud Platform, Rackplace 등 모든 퍼블릭 클라우드 환경에서 운영된다. 

 

우리가 해외로 이사간다면 컨테이너에 이삿짐을 넣어서 이동한 뒤 배에 실어서 운송하게 될 것이다. 이와 같은 개념으로 개발자가 로컬 시스템에 개발한 것을 테스트하고 어플리케이션에 Push 할 수 있다. 이 부분을 모두 도커와 컨테이너를 활용해서 배포를 하면 시스템 환경을 그대로 물리서버 혹은 가상화, 클라우드와 같이 상이한 환경에서도 배포하고 운영할 수 있게 된다. 이것이 바로 기존의 가상화와 같이 밴더 종속성 없이 리눅스의 기본 기능만으로 손쉽게 컨테이너 환경을 구축하는 것이다. 

 

[ 도커의 구성 요소 ]

구성요소 설명
이미지 * 필요한 프로그램과 라이브러리, 소스를 설치한 뒤 파일로 만드는 것
컨테이너 * 이미지를 실행한 상태
* 여러 개의 애플리케이션을 단일 호스트에서 구동하기 위한 개념
LXC(Linux Container) * LXC로 만든 컨테이너는 고유의 파일시스템, 프로세스, 네트워크 공간을 가짐.
* 마치 가상머신처럼 독립적이고 격리된 공간
도커 엔진 * 사용자가 컨테이너를 생성하고 사용할 수 있도록 함
도커 허브 * SaaS 기반의 서비스로 도커 서비스를 생성하고 공유할 수 있도록 함

[ 도커의 상태와 명령어 ]

도커의 상태와 명령어

도커 이미지를 처음에 create를 해서 만들 수 있고 기존에 있는 이미지나 SaaS 기반의 Docker hub에서 가져다가 쓸 수 있다. 이것을 run을 통해서 실행된 컨테이너로 만들 수가 있고 혹은 본인이 직접 만든 Docker이미지를 start해서 Running 시킬 수가 있다. Running된 도커 컨테이너는 Pause로 멈추고나 Unpause로 다시 Running 상태로 바꿀 수 있다. stop으로 Exited 상태, start로 다시 Running 상태로 바꾼다. 실행 되기전에 Exited 상태 혹은 Created 상태일 때 rm 명령어로 Deleted 상태로 바꿀 수 있다. 

 

[ Docker Workflow ]

  • docker build로 Dockerfile 실행해서 도커 이미지를 만들 수 있다.
  • docker pull로 도커 레파지토리에 있는 이미지를 클라이언트로 가져온다. 
  • docker run으로 Docker Image가 컨테이너로 실행화되게 한다. 
  • 혹은 docker pull은 외부에 레파지토리에 있는  nginx나 apache나 스프링 부트 등의 이미지가 있는 완성된 레파지토리에서 클라이언트로 받아서 바로 실행시킬수도 있다. 

웍플로우

+ Recent posts