Dev/Infra | Cloud

Docker | 기본 개념 정리

vanss 2022. 10. 30. 18:29
본 글은 Docker에 대한 기본 개념과 심화 학습을 하면서 배운 내용들을 정리하기 위한 글입니다.
피드백은 언제든지 열려있으니 편하게 남겨주시면 감사하겠습니다. 🤩

 

Docker가 뭐예요?

  • Container를 사용하여 응용프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 도구이며
    컨테이너 기반의 오픈소스 가상화 플랫폼이며 생태계입니다.

그럼, Docker를 왜 쓰는 거예요?

  • 어떠한 프로그램을 다운로드하는 과정을 아주 쉽고 간단하게 만들기 위해서 쓰는 겁니다.


오~ 근데 Image는 뭐고 Container는 뭐예요?

  • Image는 DockerFile로 build 할 수 있으며 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같은 응용프로그램을 실행하는데 필요한 모든 것을 포함하는 소프트웨어 패키지입니다.
  • Container는 Image를 이용해서 생성되며, 코드와 모든 종속성을 패키지화하여 응용 프로그램이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 하는 소프트웨어 표준 단위입니다.
    즉, 간단하고 편리하게 프로그램을 실행시켜주는 것입니다.
     

뭔가 Docker 하나에 여러 개가 있네요. 그럼 실제로 동작될 때 흐름은 어떻게 되는 거예요?(순서와 도커 서버에 대해 좀더 자세히 알아보기)

  • docker run {Image} 형태의 명령어로 보통 Image를 실행시켜 Container를 동작하게 합니다.
    해당 명령어 실행 시 흐름은 아래와 같습니다.

 

그렇구나 그럼, Docker랑 비슷해 보이는 VM과의 차이가 뭐예요?

  • 우선, VM은 하이퍼 바이저에 의해 아래와 같이 구동되는 구조를 갖고 있어서, VM마다 독립된 가상 하드웨어 자원을 할당받을 수 있고
    논리적으로 분리(격리)되어 있어서 한 VM에 오류가 발생해도 다른 VM에 영향이 가지 않는다는 장점이 있습니다.

  • Docker와 구조를 비교해보면 아래와 같이 공통점으로는 둘 다 격리된 환경 내에서 Application을 배치하는 방법이 동일하지만  Docker Container는 VM과 비교했을 때Guest OS가 필요하지 않으므로 비교적 가볍습니다.
  • Application을 실행할 때 예시를 들어보면 Docker는 호스트 OS위에 Application의 실행 패키지인 이미지를 배포하면 끝나지만 VM은 Application을 실행하기 위해서 VM을 띄우고 자원을 할당한 다음, Guest OS를 부팅하여 Application을 실행해야 해서 Docker보다 무겁게 실행해야 합니다.

  • Docker 구조를 조금 더 자세히 살펴보기 위해 추상화를 해보면 아래와 같이 카카오톡, 크롬, 노션 각각의 컨테이너가 C Group(CPU관리)과 네임스페이스(격리 관련) 기능을 이용해 격리되어 있지만 같은 호스트의 다른 컨테이너들은 동일한 커널을 공유하게 됩니다.


아아, 근데 C-group과 네임스페이스가 뭐예요?

  • C Group과 네임스페이스는 리눅스 커널 기능들입니다.
  • C Group은 어떤 어플이 사용량이 너무 많다면 그 어플 같은 것을 C Group에 넣어서 CPU와 메모리 사용을 제한하는 기능입니다.
  • 네임스페이스는 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술로, 별개의 독립된 공간을 사용하는 것처럼
    격리된 환경을 제공하는 경량 프로세스 가상화 기술입니다.