보람찬 코기의 개발자 블로그
article thumbnail
반응형

2023 대학교 스터디 4주차 학습

도커(Docker)란?

서비스 형태의 플랫폼(Platform-as-a-service, PaaS)이며, 

이것은 서비스 제공업체가 고객에게 플랫폼을 제공함으로써 고객이 일반적으로 소프트웨어 개발 프로세스에 필요한 인프라를 구축하고 유지할 필요 없이 비즈니스 애플리케이션을 개발, 실행, 관리할 수 있도록 하는 클라우드 컴퓨팅 기술이다.

 

도커는 리눅스의 응용프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다.

즉, 다시 말해 컨테이너 기반 오픈소스 가상화 플랫폼이다.

 

docker compare VM

도커의 이전 시대에서는,

기존 시스템에 어플리케이션을 적용하려면 서버를 구입하여 OS를 설치하고 계정설정과 각종 RPM과 라이브러리, 환경설정을 일일히 해줘야하는 번거로움이 있었다.

 

하지만 도커를 사용한다면 도커 엔진으로 개발자가 어플리케이션과 그에 필요한 환경설정, 라이브러리를 함께 묶어 컨테이너 이미지로 빌드하고 그대로 운영서버에 컨테이너 이미지를 통해 컨테이너를 생성 및 구동시키면, 전통적으로 진행했던 서버구축에 필요한 작업에 시간소요를 줄일 수 있다. 

 

하드웨어의 모든 자원을 복제하려는 VM(Virtual Machine/가상머신)과는 실행 속도, 용량 에서 큰 차이가 존재한다.

 

 

도커 이미지( Docker Image )란?

 

 

개발 환경을 구축하기 위해 필요한 라이브러리 및 패키지를 모아 하나의 파일로 만든 것

  • Base Image : Docker hub를 통해 배포된 각 Application의 공식 이미지
  • Docker Image : 사용자가 Base Image를 사용하여 그위에 프로그램, 라이브러리, 소스를 설치한뒤 하나의 파일로 만드는 것

특징

  • 가상머신의 이미지에 비하면 도커의 이미지의 용량은 광장히 적은 용량이다
  • 이미지는 상태 값을 가지지 않고 편하지 않는다
  • 하나의 이미지는 여러 컨테이너를 생성할  수 있고(container1 ,2, 3...) 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남는다.
  • 도커 허브를 통해 이미지를 관리 및 배포(pull and push) 가능 (github와 유사)
  • 다양한 API제공으로 원하는 만큼 자동화 가능
  • Dockerfile로 이미지를 만들기에 Dockerfile에는 소스와 의존성 패키지 등 사용했던 설정 파일을 버전으로 나눠 관리하기 쉽다.

도커 레이어( Docker Layer )란?

도커 이미지는 레이어(Layer)라는 개념을 사용한다.

기존 이미지에 추가적인 파일이 필요할 때 다시 다운로드받는 방법이 아니라 해당 파일을 추가하기 위한 개념이다.

 

예를 들어 apache 이미지를 만든다고 하면, 기존의 Ubuntu 이미지를 base Image로 이용하고, 그 위에 필요한 다른 레이어들을 얹어서 만들 수 있다.

 

이렇게 레이어 방식을 사용하면 기존의 이미지 레이어를 이용해 다양한 이미지를 새로 만들 수 있다. 또한, 기존 이미지를 이용하기 때문에 용량을 절약할 수 있다. 

 

컨테이너를 생성할 때도 레이어 방식을 이용해 기존의 이미지 레이어 위에 읽기/쓰기 레이어를 추가한다.

이미지 레이어를 그대로 사용하면서 컨테이너가 실행중에 생성하는 파일이나 변경된 내용은 읽기/쓰기 레이어에 저장되므로 여러 개의 컨테이너를 생성하더라도 최소한의 용량만 사용하게 된다.

도커 컨테이너( Docker Container)란?

도커 이미지를 실행한 상태로 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징, 캡슐화 하여 격리된 구역에서 프로세스를 동작시키는 기술

운영체제에 비유하자면 이미지는 실행파일(.exe) - 컨테이너는 프로세스(process) 이다.

 

  • 컨테이너는 이미지 Layer에 읽기/쓰기 하는것으로 생성 및 실행이 된다. 컨테이너는 최소한의 용량으로만 사용하게 되며, 바뀐 부분을 읽기 쓰기 layer에 적는다
  • 컨테이너를 종료되었다 해도 메모리에서 삭제되지 않는다. 삭제하려면 명시적으로 삭제해야한다. 즉, 종료일 뿐 컨테이너의 읽기,쓰기 layer가 존재하기에 다시 시작할 수 있음
  • 한 서버에서 여러 개의 컨테이너를 가져도 상관없고, 각각 독립적으로 실행된다.
  • 컨테이너는 커널 공간과 호스트OS 자원을 공유한다
  • 버전 의존성 문제가 없다.

 

장점

  • 부팅이 매우 빠르다
  • 메모리 사용량이 적다

 

단점

  • 자원의 격리와 쿼터 제한이 어렵다
  • 호스트 운영체제에 실행 환경이 묶인다.

 

다음 포스트는 간단한 도커의 실습에 관하여 포스팅이 될 예정입니다.

 

반응형
profile

보람찬 코기의 개발자 블로그

@BoChan

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!