[Docker] 도커 처음 시작하기


도커가 무엇인지 알아봅니다.

도커란?

Capture

  • 도커는 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스입니다.
  • 기존에 사용하던 가상 머신과는 달리 도커 컨테이너는 성능의 손실이 없고 효율적으로 이미지(프로세스 실행 환경)을 구축할 수 있도록 해줍니다.

가상머신과 도커 컨테이너

  • 가상머신을 실행하는 호스트 머신에 가상화된 하드웨어와 OS를 구축함으로써, 호스트와는 다른 환경을 구축하고 개발과 테스트를 비롯한 다양한 목적으로 사용할 수 있습니다.
  • 각종 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업을 가상화 작업이라고 합니다.
  • 이러한 가상화 작업은 하이퍼바이저를 사용하여 Guest OS를 만듭니다.
  • 하나의 컴퓨터에 다른 컴퓨터를 통째로 만든다고 생각하면 쉽고, 어떠한 작업을 할 때 하이퍼바이저를 반드시 거치기 때문에 일반 호스트에 비해 성능이 떨어집니다.
  • 추가적으로, 가상 머신은 Guest OS를 사용하기 위한 라이브러리, 커널 등을 전부 포함하기 때문에 가상머신을 배포하기 위한 이미지로 만들었을 때 이미지의 크기가 커집니다.

Capture

  • 위의 그림을 보시면 알겠지만, 오른쪽의 Docker Engine을 사용한 container가 Volume이 더 작은 것을 알 수 있습니다.
  • Docker container는 호스트의 커널을 공유해서 사용할 수 있고, Docker Engine 위에 Application 실행에 필요한 라이브러리 및 바이너리 파일만 존재합니다.
  • 이러한 특징 때문에 container를 이미지로 만들었을 때 용량이 가상 머신에 비해 대폭 줄어들게 됩니다.
  • 결론적으로 container를 이미지로 만들어 배포하는 시간이 가상 머신에 비해 빠르며, 가상화된 공간을 사용할 때의 성능 손실이 거의 없다는 장점이 있습니다.

  • 물론 container가 가상 머신에 비해 안좋은 점도 있습니다. 바로 보안 문제입니다.
  • container가 host의 커널을 공유하기 때문에 container가 보안에 뚫리게 된다면, host 커널도 위험할 수 있습니다.
  • 반면 가상 머신은 host와 커널을 공유하지 않기 때문에 공격을 당해도 다른 가상 머신이나 host가 보호됩니다.
  • 따라서 사용자가 가상 머신을 쓸지, Docker container를 쓸지 판단해야합니다.
  • 보안이 엄청 중요한 프로젝트가 아니라면, 배포가 쉽고 경량화된 Docker container를 사용하는 것이 바람직합니다.

컨테이너(Container)? 이미지(Image)? 엔진(Engine)?

컨테이너(Container)

  • 가상화 된 유저 공간을 컨테이너(Container)라고 부릅니다.
  • 컨테이너 가상화 방식은 원래부터 리눅스에 있었던 기능입니다.
  • LXC(Linux Container)라고 하며, 이 기술은 namespaceCgroup이라는 기능을 이용해 구현되었다.
  • namespace는 사용자에게 영역별로 독립된 공간을 만들어주며, Cgroup은 독립된 공간에 시스템 자원을 할당하여 제한된 자원만 사용할 수 있도록 합니다.
  • 주의할 점은 컨테이너도커는 같은 개념이 아니라는 것이며, 도커 이외에도 Java 컨테이너, OpenVZ등 여러가지 컨테이너 기술들이 있습니다. 하지만 컨테이너의 표준은 도커라는 것은 분명합니다.

이미지(Image)

  • container를 실행하기 위해서 필요한 파일, 프로그램, 라이브러리, 설정을 묶어서 만든 파일입니다.
  • 실행환경을 그대로 패키지로 묶는다고 생각하면 쉽습니다. 이러한 Docker Image를 실행하면 Docker container가 됩니다.

엔진(Engine)

  • Docker-Engine은 Docker container를 실행, 중지, 이미지 빌드 등 전반적인 실행에 관여하는 도구입니다.
  • 일반적으로 Docker라고 부르는 것은 Docker-Engine을 말합니다.

도커를 사용해야 하는 이유(도커의 득징)

  1. 도커는 게스트 OS를 설치하지 않는다.
    • 이미지에 서버 운영을 위한 실행 파일과 라이브러리만 격리해서 설치한다.
    • OS설치가 없기 때문에 이미지 용량이 크게 줄어든다.
    • HOST와 OS자원을 공유한다.
  2. 도커에는 하드웨어 가상화 계층이 없다.
    • 메모리 접근, 네트워크 전송 속도가 기존의 가상 머신보다 압도적으로 빠르다.
    • Host PC와 도커 컨테이너는 성능 차이가 거의 없다.
  3. 도커는 이미지 생성과 배포에 특화되어있다.
    • Git과 같은 소스 형상관리처럼 이미지 버전 관리도 제공하고, 중앙 저장소에 이미지를 올리고 받을 수 있다.
    • GitHub와 비슷하게 도커 이미지를 공유하는 Docker Hub를 제공한다.
    • 다양한 API를 제공해서 사용자가 필요한 만큼 자동화가 가능하기 때문에 개발을 할때나 서버 운영을 할 때 매우 유용하다.
    • 서비스를 개발했을 때 사용했던 환경을 다른 서버에서도 컨테이너로서 똑같이 복제할 수 있기 때문에 개발/운영 환경의 통합이 이루어짐.

참고자료

  1. https://www.44bits.io/ko/post/easy-deploy-with-docker
  2. https://medium.com/@darkrasid/docker%EC%99%80-vm-d95d60e56fdd
  3. 용찬호(2020), 시작하세요 도커/쿠버네티스,
  4. https://www.leafcats.com/152





© 2020. by GeonKimdcu

Powered by aiden