곰돌이 놀이터

[Docker] 도커란? 본문

Tool/Docker

[Docker] 도커란?

달나라 곰돌이 2019. 10. 20. 10:51

도커란?

도커

도커란 컨테이너 기반의 오픈소스 가상화 플랫폼으로 환경 분리를 도와준다.

ex) 나의 작업 환경은 윈도우고, 서버는 리눅스일때 작업물을 서버에 올렸는데 작동하지 않는경우 

이때 도커를 통해 다른 머신에서도 같은 환경을 조성해 줄 수 있다.


도커의 특징

  1. 하이퍼바이저(Hypervisor) 없이 리눅스 컨테이너(LXC) 기술을 바탕으로 애플리케이션을 격리된 상태에서 실행하는 가상화 솔루션
  2. 플랫폼에 상관없이 실행될 수 있는 애플리케이션 컨테이너를 만드는 기술
  3. 리눅스 컨테이너 기술을 바탕으로 애플리케이션을 격리된 상태에서 실행하는 가상화 솔루션
  4. 리눅스 컨테이너 가상화 기술을 활용하여 애플리케이션 샌드박스를 자동 생성하는 기술

도커의 장점

1. 빠르고 가벼운 가상화 솔루션

호스트의 운영체제를 공유해 필요한 최소한의 리소스만 할당받아 동작하는 방식으로 단일 호스트에서 다중 워크로드를 구동할 수 있기 때문에 하이퍼바이저 기반 가상화솔루션에 비해 훨씬 더 가볍게 가상화 환경을 구성할 수 있다.


2. 개발자에게 자유로운 개발보장

개발 언어나 툴에 상관없이 어떠한 애플리케이션이라도 만들 수 있으며, Docker에서 만들어진 애플리케이션은 이동성이 좋아지고 어디서나 실행될 수 있다.


3. 뛰어난 보안성

서비스가 해킹도더라도 격리되어있어 원래의 서버에 영향을 미치지 않는 구조로 되어있다.


도커 이미지

  • 이미지는 컨테이너를 생성할 때 필요한 요소이며, 가상 머신을 생성할 때 사용하는 ISO 파일과 비슷한 개념
  • 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고, 변하지 않는다.
  • 컨테이너는 이미지를 실행한 상태라고 볼 수 있고 한 이미지로 여러개의 컨테이너를 생성할 수 있다.
  • 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 더 이상 의존성 파일을 컴파일 하고 이것저것 설치할 필요가 없다.
  • docker 이미지는 docker hub에 등록하거나, docker registry 저장소를 직접 만들어 관리할 수 있다.


도커 이미지파일

  • 이미지를 만들기 위해 dockerfile이라는 파일에 DSL(Domain-specific-language 언어를 이용하여 이미지 생성과정을 적는다.) 
  • docker에서 사용하고 싶은 환경을 설정한다.(우분투, 파이썬, 깃 등)
  • 이 파일을 통해 로컬에서와 서버에서 같은 환경을 조성해준다.


도커 컨테이너

  • 도커 컨테이너는 이미지가 실행된 상태를 뜻한다. 
  • 도커 이미지를 기반으로 생성되며, 파일 시스템과 애플리케이션이 구체화돼 실행되는 상태. 즉, Dockerfile 을 실행시키면 도커 컨테이너가 되는것이다.
  • 이미지 하나로는 수백개의 컨테이너를 생성할 수 있다. 마치 이 관계는 실행파일과 프로세스의 관계 같은 것이다.


도커 동작방식

  1. 도커 이미지를 빌드하기 위해 Dockerfile 을 작성한다.
  2. Dockerfile 과 함께 도커 빌드 요청을 보낸다.
  3. 도커 서버에서는 도커 이미지를 빌드하여 로컬 저장소에 저장한다.
  4. 도커 push 명령을 받으면 도커 서버는 로컬의 도커 이미지를 도커 레지스트리에 올린다.
  5. 도커 run 명령을 배포할 도커 서버에 전송한다.
  6. 도커 run 명령을 받은 도커 서버는 도커 레지스트리에 이미지를 로컬 저장소로 다운 받는다.
  7. 도커 이미지를 이용하여 컨테이너를 시작한다.


도커와 가상머신의 차이

가상 머신은 한 컴퓨터 안에 하이퍼바이저가 물리 서버 자원들을 추상화하고, 공간을 분할하여 가상머신 이라는 독립적인 가상 환경의 서버를 이용한다. 즉, 한 컴퓨터에 있는 자원을 분배하여 사용하기 때문에 성능에 대한 이슈가 발생 할 수 있다. 반면 도커는 하이퍼 바이저와 게스트 os 가 필요가 없어서 비교적 가볍고 컨테이너안 실행 환경들이 독립적으로 돌아가는것이여서 좋은 성능을 발휘할 수 있다.


[왼쪽 가상머신 오른쪽 도커]


도커

도커는 반가상화 환경보다 더 발전한 형태로 Host OS 바로 위에서 동작하기 때문에 가상머신과 Guest OS를 동작시키기 위한 가상화 비용이 발생하지 않는다. 

도커 이미지에 운영을 위한 어플리케이션 및 라이브러리만 격리하여 설치 가능하며, OS 시스템 자원은 Host와 공유한다. 따라서 이미지의 용량도 가상머신을 이용할때보다 훨씬 줄어들었다.

또한 이미지 용량뿐만 아니라 하드웨어를 가상화하는 계층이 없기 때문에 메모리 접근이나 네트워크 등을 이용하는 속도가 가상머신보다 훨씬 빠른데, Docker 1.1.2 버전 기준으로 벤치마킹 당시에는 Host OS로만 동작했을때와 속도 차이가 거의 3%도 나지 않는다.

가상머신

가상 성능이 좋지 못한 단점이 있다. CPU에 가상화를 위한 기능들이 추가되긴 했지만 물리적으로 하나의 환경으로 존재하는 것을 논리적으로 가상화해야 하기 때문에 그런 작업에 필요한 비용(overhead)이 추가적으로 발생하기 때문이다.

현재는 전가상화(Full Virualization)의 느린 속도를 개선하기 위한 반가상화(Paravirtualization) 방식이 개발되었고, 현재 널리 쓰이고 있다


Comments