STUDY/Data Engineering

[인프런] 왕초보도 따라하는 도커 기초 (1)

wonpick 2023. 3. 30. 06:28

1 도커와 컨테이너 소개


1.1 도커(Docker)

  • 컨테이너 기술을 지원하는 다양한 프로젝트 중에 하나
  • 컨테이너 기술을 이전에도 있었으나 도커로 인해 알려짐
  • 컨테이너 기술의 사실상 표준
  • 2014 가장 인기 있는 클라우드 오픈 소스 2위(리눅스 재단 발표)
  • 다양한 운영체제에서 사용 가능(리눅스, 윈도우, MacOS)
  • 애플리케이션에 국한 되지 않고 의존성 및 파일 시스템까지 패키징하여 빌드, 배포, 실행을 단순
  • 리눅스의 네임 스페이스 cgroups와 같은 커널 기능을 사용하여 가상화

베어메탈(운영체제 설치 안된 상태) + 운영체제(리눅스) + @ = 가상으로 돌릴 수 있는 환경 구축

도커는 다양한 클라우드 서비스 모델과 같이 사용 가능

  • 이미지: 필요한 프로그램과 라이브러리, 소스를 설치한 뒤 만든 하나의 파일
    • 도커에서 애플리케이션(주피터 노트북, 톰캣,파이썬 등등) 이미지 제공 
  • 컨테이너: 이미지를 격리하여 독립된 공간에서 실행한 가상 환경
    • 원하는걸 빠르게 설치하고 빠르게 삭제 가능한 가상환경 (이미지로 하나의 독립된 가상환경 구축이 가능하다.) 

1.2 컨테이너란?

하이퍼바이저의 필요 없는 공간을 활용하면 더 많은 자원을 앱에 투자 가능

  • 동일 시스템에서 실행하는 소프트웨어의 컴포넌트가 충돌하거나 다양한 종속성을 가지고 있음
  • 컨테이너는 가상머신을 사용해 각 마이크로 서비스를 격리(isolate)하는 기술
    -> 컨테이너 쓰면 독립환경 가능해서 충돌방지 가능
  • 컨테이너는 가상머신처럼 하드웨어를 전부 구현하지 않기 때문에 매우 빠른 실행 가능
  • 프로세스의 문제가 발생할 경우 컨테이너 전체를 조정해야 하기 때문에 컨테이너에 하나의 프로세스를 실행하도록 하는 것이 좋다. 
    • 컨테이너를 반으로 줄이면 서버가 반으로 줄기 때문에 훨씬 효율적이다. 

1.3 컨테이너 성능 비교

VM으로 실행했을 때와 컨테이너로 실행했을 때 CPU 튀는 현상 비교   /   성능 비교

도커가 네이트브와 비슷하고 vm 가상환경보다는 훨씬 좋은 성능을 내고 있다는 걸 보여줌

1.4 컨테이너를 격리하는 기술

컨테이너를 격리하는 기술이 어떻게 가상환경 없이 기술적으로 가능하게 하는가? 리눅스 커널에 있다

리눅스 네임 스페이스: 각 프로세스가 파일 시스템 마운트, 네트워크, 유저(uid), 호스트 네임(uts) 등 에 대해 시스템에 독립 뷰를 제공

  • 공간을 별도로 할당해서 파일 시스템, 네트워크 인터페이스 등을 별도로 관리할 수 있게 함.

리눅스 컨트롤 그룹: 프로세스로 소비할 수 있는 리소스 양(CPU, 메모리, I/O, 네트워크 대역대,device 노드 등)을 제한

  • 독립된 환경에서 리소스 자원을 배분시킬 수 있음

 

1.5 도커의 한계

서비스가 커지면 커질 수록 관리해야 하는 컨테이너의 양이 급격히 증가

도커를 사용하여 관리를 한다 하더라도 쉽지 않은 형태

배포 및 컨테이너 배치 전략

스케일-인, 스케일-아웃이 어려움