본문 바로가기
  • 🦄 창민이 개발일지
서적

docker 란?

by 창민이 개발일지 2022. 6. 4.

출처: https://cyberx.tistory.com/151 [Phytochemia Tech Blog]

docker 란?

  • docker는 컨테이너 기반 가상화 도구이다. 
  • 기존에 사용하던 가상 머신(VM)은 사용하기 위해서 항상 OS를 설치해야 했고, 이미지(시스템 이미지) 안에 OS가 포함되어 있기 때문에 용량이 매우 크고 속도도 느리다.
  • 도커는 OS 전체를 가상화하지 않고 컨테이너라는 리눅스 커널 레벨에서 제공하는 격리된 가상 공간을 사용
  • OS를 설치하지 않기 때문에 호스트와 속도 차이도 거의 없으며 기존의 VM에 비해서는 월등한 속도로 동작

이미지(시스템 이미지)

  • 이미지란 전체 하드 드라이브의 스냅샷 또는 정확한 복사본.
  • 시스템 이미지는 컴퓨터 하드 드라이브에 있는 모든 항목의 완전한 백업이므로 OS, 시스템 설정, 실행 파일, 설치된 프로그램 및 기타 모든 파일을 포함한 모든 것을 저장

docker 컨테이너 

  • 컨테이너는 영어 뜻 그대로 무언가를 담는 "그릇, 용기, 통" 등을 의미함.
  • 도커 컨테이너는 서버 이전 및 추가로 인한 재설정을 미연에 방지하고, 어느 환경이든 구애받지 않고 어플리케이션 환경을 그대로 떠서 여기서 저기로 저기서 여기로 옮기는 컨테이너같은 역할을 함.

컨테이너 라는 말 의미

컨테이너는 영어 뜻 그대로 무언가를 담는 "그릇, 용기, 통" 등을 의미한다. 도커 컨테이너는 앞선 상황같은 것을 미연에 방지하고, 어느 환경이든 구애받지 않고 어플리케이션 환경을 그대로 떠서 여기서 저기로 저기서 여기로 옮기는 컨테이너같은 역할을 한다.

도커를 사용 하기 전 배경

서버 구축하려면 언어, 웹서버, 데이터베이스, 리눅스, 자동배포툴 등등 다운 받은 다음 서로 잘 맞물려 동작할 수 있도록 이것 저것 설정해야 된다. 근데 서버를 운영하다 보면 더 좋은 서버로 옮겨가거나 늘어난 접속량을 해결하기 위해 서버를 여럿 추가해야 하게 된다. 또한 해당 서버가 내가 만든 서버 프로그램과 운영체제가 다를 수 가 있다. 그럼 그곳들에도 똑같이 해당 프로그램을 설치해야 되고 설정도 다 해주어야 된다. 그래서 대부분의 서버 개발회사들은 도커라는 프로그램(컨테이너)을 도입하기 시작했다.

도커의 특징

  • 애플리케이션 격리 : Web Server(e.g. Apache, Nginx)와 연결된 API 서버를 격리할 필요가 있는 경우가 있다. 이 경우 다른 컨테이너에서 API를 서버를 실행할 수 있다.
  • 코드관리: Docker는 일관된 환경을 제공하여 개발 및 코딩을 훨씬 편안하게 만들어준다.
  • 이식성: 어플리케이션과 설치 파일들이 하나의 컨테이너에 존재하기 때문에 호스트의 커널이나 플랫폼 버젼 등에 상관 없이 도커만 실행할 수 있으면 사용이 가능하다.

도커 이미지(Image), 컨테이너(Container)

  • 도커 이미지(Image)는 필요한 프로그램, 라이브러리, 소스 등을 설치한 뒤에 이를 파일로 만든 것이다.
  • 이렇게 만든 이미지를 레파지토리(도커 허브)에 올리고, 레파지토리에 올라와 있는 다른 이미지를 받을 수도 있다.
  • 이렇게 받은 이미지를 도커에서 실행시킨 뒤 사용하면 되는 것.
  • 이때 이미지가 실행된 상태가 컨테이너(Container)이다.
  • 즉 도커 이미지는 도커 컨테이너를 생성하기 위한 template(read only) 이고, 도커 컨테이너는 이미지가 실제 메모리에 로딩된 instance 이다.

도커 아키텍처

출처:  https://www.leafcats.com/146  [ 복세편살 개발라이프 ]

Client : 도커 Container를 관리하고 실행하기 위해서 Deamon과 상호작용하는 Binary 파일.

Registry : 도커 Image가 저장되어 있는 장소이다. 대표적으로 Docker Hub가 있다. Registry는 Public Registry와 Private Registry가 있다.

Daemon : Host에 설치되어 도커 Container를 관리하는 daemon 프로세스이다. Client와 상호작용한다.

Image : 도커 Daemon을 통해 Container로 실행 가능하도록 필요한 프로그램, 라이브러리, 소스 등이 설치된 파일이다.

Container : Image를 실행한 상태이다.

 

 

도커 컨테이너와 가상머신의 차이

출처: https://hwanine.github.io/web/Container-vs-VM/ [잡다한 IT 개발 이야기]

  • Virtual machine은  Hypervisor 위에 full host OS (리눅스/윈도우)가 올라가고 이를 기반으로 각각의 bin/libs가 구동.
  • hypervisor란 호스트 컴퓨터에서 다수의 운영 체제(operating system)를 동시에 실행하기 위한 논리적 플랫폼
  • Container는 리눅스/Windows와 Host OS 기반에 docker가 운영되고, Container 별로 각각 process 단위로 bin/libs가 구동.
  • VM은 full OS를 구동하기 때문에 overahead가 높음.