Docker

TIL24 - Docker 1. Container

Django King, Lee 2022. 5. 7. 14:18
728x90

Docker


도커를 하기 전에 컨테이너에 대한 이해가 선행되어야 합니다.

컨테이너에 대해 설명 후 Docker를 직접 사용해보겠습니다.

출처는 구글 클라우드 입니다.


✔️ Container의 의미

컨테이너는 소프트웨어 서비스를 실행하는 데 필요한 특정 버전의 프로그래밍 언어 런타임 및 라이브러리와 같은 종속 항목과 애플리케이션 코드를 포함하는 경량 패키지입니다.

컨테이너는 운영체제 수준에서 CPU, 메모리, 스토리지, 네트워크 리소스를 쉽게 공유할 수 있게 해주며 컨테이너가 실제로 실행되는 환경에서 애플리케이션을 추상화할 수 있는 논리 패키징 매커니즘을 제공합니다.

런타임 : CS에서 컴퓨터 프로그램이 실행되고 있는 동안의 동작

이렇게 운영체제 가상화를 통한 컨테이너 방식을 이용하게 되면, 프라이빗 데이터 센터에서 퍼블릭 클라우드 또는 개발자의 개인 노트북에 이르기까지 어디서나 실행됩니다.


✔️ Container의 장점

  • 책임분리
    컨테이너화를 통해 개발자는 애플리케이션의 로직과 종속 항목에 집중하고, IT팀은 특정 소프트웨어 버전 및 구성과 같은 애플리케이션의 세부 요소 대신 배포 및 관리에 집중할 수 있다는 장점이 있습니다.

  • 워크로드 이동성
    컨테이너는 Linux, Window, Mac 등의 운영체제를 가리지 않고, 가상 머신, 물리적 서버, 개발자 컴퓨터, 데이터 센터, 온프레미스 환경, 퍼블릭 클라우드 등 사실상 어느 환경에서나 구동되므로 개발 및 배포가 쉬워집니다.

  • 애플리케이션 격리
    컨테이너는 운영체제 수준에서 CPU, 메모리, 스토리지, 네트워크 리소스를 가상화하므로 개발자에게 다른 애플리케이션으로부터 논리적으로 격리된 OS환경을 제공합니다


✔️ Hypervisor 가상화 vs 컨테이너 가상화

가상화의 경우, 지금까지 설명한 Container 가상화뿐만 아니라 Hypervisor 가상화가 있습니다.


✔️ Hypervisor 가상화

Hypervisor는 물리적인 서버에서 하나 혹은 그 이상의 독립적인 운영체제가 돌아가는 구조입니다. 즉, 물리적 서버의 OS위에 여러 다른 독립적인 OS가 가상으로 돌아가는 구조입니다. 그래서 각각의 OS는 서로에 대해 알지 못하며 base OS인 물리적 서버의 OS도 알지 못합니다.

이러한 가상화의 장점은 물리적 서버의 리소스를 더 효율적으로 사용할 수 있는 것입니다. 하나의 서버에서 하나의 OS만 운영하는 경우, 해당 OS가 모든 리소스를 항상 full로 사용하기 어려우므로 서버 리소스들이 idle 상태로 낭비되어 지는 경우가 있을 수 있습니다.

다만, 독립적인 OS를 실행시키기 때문에 부팅 시간이 길 수 밖에 없으며 기술적으로 무겁다는 단점이 있습니다. 그림으로 나타내면 아래와 같습니다.

image


✔️ Container 가상화

image

도커같은 컨테이너 가상화 기술은 Hypervisor와 다르게 OS의 커널 위 유저스페이스에서 실행됩니다. 즉, 완전히 독립적인 운영체제를 가상화 하는 것이 아니라 독립적인 유저스페이스를 가상화한다고 생각하면 됩니다.

커널이란 컴퓨터 운영 체제의 핵심이 되는 컴퓨터 프로그램으로, 시스템의 모든 것을 완전히 통제한다. 운영 체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러 가지 서비스를 제공하며 핵심이라고 불리기도 한다고 합니다.

즉, 하나의 호스트 서버에서 여러 독립적인 유저 스페이스를 가상적으로 실행할 수 있으며, Hypervisor보다 가볍고 빠른 장점이 있어 쉽게 독립적인 가상환경을 실행시킬 수 있습니다. Hypervisor의 경우, base OS와 가상화 OS 사이에 커널 시스템 호출을 연결 시켜주는 emulation layer가 필요한데, 도커는 emulator가 필요없이 일반적인 API Interface를 사용합니다.

도커의 경우, Docker Image가 있으면 어디든지 쉽고 빠르게 test환경부터 Production 배포까지 할 수 있으며, MSA와 CI/CD에 아주 잘 어울리는 가상화 기술로서 각광받고 있습니다.
단점으로, 독립적인 OS가 아닌 유저 스페이스를 가상화하는 형태이다보니 운영체제가 다를 경우 실행할 수 없습니다. 예를 들어 Window를 Linux에서 실행할 수 없다는 의미입니다.