CS 스터디 9주차 - 도커와 리눅스 컨테이너

Lilac-_-P·2023년 6월 19일
0

Docker란?

Docker는 컨테이너 기술 기반의 오픈소스 가상화 플랫폼이다. 좀 더 자세하게 말하자면, 애플리케이션 런타임을 지향하는 컨테이너 런타임이다.

참고. 컨테이너에는 시스템 컨테이너와 애플리케이션 컨테이너가 있다. 궁금하다면 추가적으로 찾아볼 것.

도커를 사용하는 이유

  1. 변화하지 않는 실행환경으로 멱등성을 확보 할 수 있다.

  2. 코드를 통한 실행환경 구축 및 어플리케이션 구성이 쉽다.

  3. 실행환경과 어플리케이션의 일체화로 이식성이 향상된다.

  4. 시스템을 구성하는 어플리케이션 및 미들웨어의 관리 용이성이 높아진다.

  5. 도커이미지(Dockerfile)로 구성을 코드로 관리 할 수 있기에 빠르고 쉽게 기존 컨테이너를 폐기 및 재구축 할 수 있다.

  6. 도커는 도커가 설치된 머신 이라면 어디에서든지 실행 할 수 있다.

  7. 여러서버에 걸쳐있는 여러 컨테이너를 관리 할 수 있는 도커 스웜(Docker Swarm) 및 쿠버네티스 같은 도구들을 사용하여 관리를 할 수도 있다.

이러한 장점들을 가진 도커는 운영측면에서나, 배포 및 관리 측면에서나 기존의 가상머신보다 월등하게 편리한 점이 많고, 성능면에서도 스케일 아웃이 쉽고 오버헤드가 적다는 장점이 있다.

가상머신 VS 컨테이너

Linux Container란?

운영체제 수준의 가상화 기술로 리눅스 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술이다.

이러한 컨테이너 기술이 필요한 이유는 무엇일까? 혹은 컨테이너 기술을 사용함으로써 얻을 수 있는 장점이 뭐가 있길래 모두 도커를 사용하려고 하는 것일까?

  1. 프로세스를 "격리된 환경" 에서 실행한다.
    • 컨테이너가 실행되는 환경이 독립적이기 때문에 다른 컨테이너에게 영향을 주지 않는다.
  2. 이식성이 높다
    • 모든 컨테이너는 호스트의 환경이 아닌 독자적인 실행환경을 가지고 있다. 환경은 파일들로 구성되며 이미지 형식으로 공유되기 때문에, 리눅스 커널을 사용하고 같은 컨테이너 런타임을 사용할 경우 컨테이너의 실행 환경을 공유하고 손쉽게 재현할 수 있다. 즉, 배포 및 관리의 효율성 증대로 이어진다.
  3. 운영체제 수준의 가상화 + 빠른 속도와 효율성
    • 아래의 비교 이미지에서 추가적 설명

결론적으로 리눅스 컨테이너 기술을 사용하면, 격리 기술덕에 호스트 머신에게는 프로세스로 인식되지만 컨테이너 관점에서는 독립적인 환경을 가진 가상 머신처럼 보인다.(하지만, 실제로는 가상머신이 아님) 또한, 운영체제 수준의 가상화 기술로 리눅스 커널을 공유하기 때문에 하드웨어를 가상화하는 가상머신과는 달리 오버헤드가 매우 적다.

컨테이너 기술을 존재하게 하는 리눅스 커널의 기능들

  • Namespace
  • cgroup(Control group)
  • 루트 디렉터리 격리 (chroot)
  • etc.

Reference

https://jsqna.com/linux-namespaces-1/

https://www.44bits.io/ko/post/why-should-i-use-docker-container#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0-%EC%99%9C-%EB%8F%84%EC%BB%A4docker%EB%A5%BC-%EC%8D%A8%EC%95%BC%ED%95%98%EB%82%98%EC%9A%94

https://www.44bits.io/ko/post/is-docker-container-a-virtual-machine-or-a-process

https://www.44bits.io/ko/keyword/linux-container

profile
열심히 하자

0개의 댓글