Infra/Docker

Docker 개요

최-코드 2024. 9. 9. 10:25

Docker 등장 배경 : 컴포넌트와 운영체제의 호환성 문제와 컴포넌트를 수정하거나 변경하면서도 다른 컴포넌트에 영향을 주지 않으면서 운영 체제도 수정할 수 있는 기술이 필요했다.

 

Docker 필요성 : 각각의 컴포넌트들은 해당 컴포넌트의 애플리케이션 실행에 필요한 bins와 libs를 갖춘 컨테이너로 감싸짐으로써 같은 운영체제에서 환경을 분리할 수 있다.

 

bins(바이너리) : 컴퓨터 저장과 처리 목적을 위해 이진수 형식으로 인코딩된 데이터 파일을 의미하는 것으로 코드의 컴파일 또는 압축된 결과물을 말한다.

libs(라이브러리) : 프로그램 구동 시에 필요하거나 공통으로 사용할 수 있는 특정 기능의 서브 프로그램 또는 소스 코드 집합을 의미한다. 

 

컨테이너

  • 애플리케이션의 완전히 분리된 환경을 말한다.
  • 하지만 이 때 커널은 동일한 것을 사용하게 된다. 즉, 커널이 설정되면, 이 커널을 사용하는 운영 체제에서 실행이 되는 애플리케이션을 컨테이너로 올릴 수 있다.
  • 예를 들어 리눅스 커널일 때 ubuntu, debian, cent 등을 기반으로 한 컨테이너는 사용할 수 있다. 하지만 windows를 기반으로 한 컨테이너는 올리지 못한다.

가상머신 VS 컨테이너

  • 가상 머신은 여러 개의 가상 운영 체제와 커널이 실행되기 때문에 많은 리소스가 사용된다.
  • 또한 가상 머신은 무거워서 많은 용량을 차지하게 된다.
  • 컨테이너는 가볍기에 빠르게 부트할 수 있다. 하지만 가상 머신은 운영체제, 커널을 모두 새롭게 부트해야 하므로 오래 걸린다.
  • 가상 머신을 이용하면 여러 커널을 사용할 수 있어, 다양한 운영 체제를 기반으로 한 어플리케이션을 사용할 수 있다.

 

Docker 작동 원리 : 실행할 컨테이너를 docker run 명령어로 타이핑해준다. 이 때 같은 컨테이너를 여러 개 올릴 수 있으며, 로드 밸런싱 기법을 사용하면 된다.

 

이미지 vs 컨테이너 

  • 이미지는 VM 템플릿과 같은 패키지 또는 템플릿으로 컨테이너를 만드는데 사용된다.
  • 컨테이너는 서로 분리된 이미지 인스턴스가 실행되는 공간으로 각자의 환경을 가지고 있다.