Post

시작하세요! 도커/쿠버네티스(1) - 도커란?

시작하세요! 도커/쿠버네티스 책 정리글입니다.

1. 도커란?

  • 도커(Docker)는 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트 Go언어로 작성.
  • 도커와 관련된 프로젝트는 도커 컴포즈(Docker Compose), 레지스트리(Private Registry), 도커 허브(Docker Hub), 등 여러가지가 있지만 일반적으로 말하는 도커는 도커 엔진(Docker Engine)이나 도커의 모든 프로젝트를 의미한다.

1.1 가상머신과 도커 컨테이너

가상화 기술 : 호스트 OS + 게스트 OS = 무겁다. -> 배포할때 무겁기에 오래 걸리고 성능또한 떨어진다. VMware,VirtualBox, 등..

도커 : 리눅스의 자체 기능인 chroot, namespace, cgroup을 사용함으로써 프로세스 단위의 격리 환경을 만들어 성능의 손실이 거의 없음.

  • 컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용.
  • 컨테이너 안에는 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재하기에 이미지의 용량이 대폭 줄어듦.

따라서 배포시간이 가상머신에 비해 빠르며 성능손실도 줄어진다는 장점이 있다.

1.2 도커를 왜 사용하는가?

  1. 애플리케이션의 개발과 배포가 편해짐.
    • 도커는 호스트 OS 위에서 실행되는 격리된 공간이기에 컨테이너 자체에 특별한 권한을 주지 않는 한, 컨테이너 내부에 수많은 소프트웨어를 설치하고 설정 파일을 수정해도 호스트OS에는 영향이 없다. 즉, 독립된 개발환경.
    • 만약 배포하려고 한다면, 컨테이너에 사용되던 패키지들을 따로 운영서버에서 설치할 필요도 없으며, 각종 라이브러리의 의존성도 생각할 필요가 없다. 도커는 도커 이미지라는 것을 통해 컨테이너를 일종의 패키지로 만들어 개발 환경을 똑같이 복제하여 운영서버로 넘길수 있기 때문이다.
    • 도커는 가상 머신과 달리 커널을 포함하고 있지 않아 이미지 크기가 크지 않다.
  2. 여러 애플리케이션의 독립성과 확장성이 높아짐.
    • msa구조에서 가장 많이 사용되고 있는 가상화 기술임.
    • 데이터베이스 컨테이너와 웹 서버 컨테이너로 분리할 수 있고, 부하시에는 동적으로 컨테이너를 늘려 부하를 분산시킬 수 있다는 장점이 있다.

1.3 도커 엔진 설치

도커는 리눅스 컨테이너를 제어하는 API를 GO언어로 작성한 libcontainer를 사용하기에 대부분의 리눅스와 호환이 됨.

맥 OS X 경우 xhyve기술을 이용해 리눅스 커널 기능과 도커 엔진 환경을 구성. 하지만 완벽히 호환될 수 없을 수 있어서 완전한 리눅스 환경을 추천.

docker info | grep Kernel 명령을 통해 가상 환경에서 실행되는 도커 엔진이 사용하는 커널 버전을 확인 할 수 있습니다.

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