본문 바로가기

서버개발스터디/0주차 (Spring\Docker\Kubernetes)

#01 Docker 개념 정리

이번 포스팅은 Docker의 간단한 개념만 정리한다.

(자세한 내용은 추후 DevOps에서 정리 할 예정...)

 

Docker란 Go언어로 작성 되었으며 리눅스의 응용 프로그램들을 프로세스 격리 기술을 사용해 컨테이너로 실행하고 관리하는 오픈소스 프로젝트 이다. 도커의 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다. 여기에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 무엇이든 포함되기 때문에 환경에 관계 없이 언제나 동일하게 실행 될 것을 보증한다.

 

대부분 개발은 로컬 > 개발 > 을 거쳐서 운영에 올리는 순서로 진행이 되는데  의외로 여러 금융사 프로젝트를 하면서 개발환경이 각각 달라서 애를 먹기도 한다. 한번은 기존에 사용하는 운영 서버를 window 서버에서 linux로 변경하는 작업이 있었는데 새벽에... 예상치 못한... 이런저런 에러가 터져서 아침이 돼서야 겨우 집에 갔던적도 있다...  이러한 경험으로 생각해 봤을 때 도커는 내가 앞에서 겪었던 (스트레스받고 집중하고 또 집중해야되는... ) 어려움을 모두 해결 할 수 있을 것 같다 

 

도커를 사용하면 운영 서버 OS가 바뀌어도 전혀 상관없이 도커엔진 위에서 독립 적으로 동작 가능한 이미지를 Run 실행만 하면 된다. 또한 기존의 하이버바이저를 통한 Gest OS를 설치하는 등의 overhead가 발생하지 않아서 생성 속도가 매우 빠르다. (사실 아직 한번도 안써봤지만 SpringBoot로 Rest API 개발 중인데 이 서버를 시험삼아서 도커에 올려볼 예정이다.)

 

 

컨테이너 

도커 공식 문서에 따르면, 컨테이너는 코드 및 종속성을 함께 패키징(Packaging)하는 Application계층의 추상화라고 정의됩니다. 그리고 이 말은 여러 종류의 컨테이너가 동일한 시스템(내PC 등)에서 실행되고 OS커널을 다른 컨테이너와 공유할 수 있으며, 각 컨테이너는 사용자 공간에서 분리된 프로세스로 실행된다는 의미를 가집니다. 추가적으로, 컨테이너는 VM보다 메모리 공간을 적게 차지하고 (컨테이너 이미지의 크기는 일반적으로 수십 MB/s), 더 많은 Application을 처리할 수 있으며 더 적은 수의 VM 또는 운영 체제(OS)를 필요로 합니다.

 

도커 허브 

도커 이미지의 용량은 매우 큰데 이를 서버에 저장하고 관리하기 어렵다. 이를 도커 허브를 통해 공개 이미지를 무료로관리해준다. 이덕분에 내가 만든 이미지를 도커허브에 올리고 원할 때 원하는 위치에 이미지를 내려받아 실행할 수 있다.  그리고 오픈소스 (Jenkins, ngrinder ...) 도커 허브에 이미지를 누구나 사용할 수 있게 되어 있어서 굉장히 편리하게 사용할 수 있다.