하나의 물리적 서버에서 웹 서비스(A)를 운용하고 있고, 다른 웹 서비스(B)를 만들어 새로 배포하려고 합니다. 하지만 기존에 운용하고 있던 웹 서비스 A와 새로 배포하려는 웹 서비스 B와의 기술 스펙이 달라서 두개의 서비스를 동시에 수행시킬수 없는 문제가 발생하게 됩니다.
이러한 문제를 해결해주기 위해서는 다른 서버를 구매해서 새로 배포하려는 웹 서비스(B)를 배포하는 방법도 있습니다.
하지만 만약 현재 운용하고 있는 서버가 너무너무 비싸고 좋은거라 하나에서 사용하고 싶을때, 하나의 환경에서 다수의 서비스를 운용할 수 있도록 여러 환경을 생성하는 기술을 가상화
라고 합니다.
위의 그림과 같이 가상화는 하드웨어의 OS(Host OS)위에 여러 OS(Guest OS)를 생성하여 각각 다른 환경으로 서비스를 제공해줄 수 있습니다.
이때, 각각의 다른 환경을 구성하는 시스템을 VM(Virtual Machine)
이라고 하며, 가상화 기술을 통해 여러개의 OS를 하나의 OS에 생성하여 VM을 생성하고 구동하는 시스템을 Hypervisor
라고 합니다.
어떤 시스템의 상태를 사진으로 찍듯 저장한 파일을 뜻합니다.
가상환경에서 프로그램 파일이나 설정들을 이미지화하여 각 가상환경에 이미지를 받아 실행할수 있습니다.
위 사진에서 App1
, App2
나 Bins/Libs
등이 이미지가 될 수 있습니다.
하나의 물리적 서버에서 가상화된 격리된 공간을 사용하지만 별도의 운영체제를 운용하지 않고 서버의 OS를 공유하는 기술을 Container
라고 합니다.
Container는 별도의 운영체제를 생성하지 않는 대신 linux의 커널에서 제공하는 cgroup이나 namespace기능을 사용하여 프로세스를 격리시킵니다.
그렇기 때문에 운영체제를 별도로 생성하지 않아도 격리된 프로세스를 통해 프로세스가 필요한 리소스(CPU, 메모리)만 Host OS에서 제공하여 Container를 독립적으로 수행할수 있게 됩니다.
Docker란, Container기술을 사용해서 애플리케이션에 필요한 환경을 빠르게 구축하고 테스트 및 배포할 수 있게 해주는 플랫폼.
위의 이미지에서 Container기술을 사용한 Docker를 내부적으로 잘 설명해주고 있습니다.
각 Container는 커널을 이용해서 Host OS에서 Container에서 사용할 프로세스에게 필요한 리소스를 제공해주고 있음을 확인할 수 있습니다.
이렇게 Container가 프로세스를 Host OS에서 격리시켜 관리하기 때문에 Container에서 어떠한 설정을 하든 Host OS에 영향을 미치지 않고 독립적인 환경을 보장받을 수 있게됩니다.
그리고 Docker는 이러한 Container들을 Docker Engine을 통해 관리할 수 있습니다.
Docker Engine은 사용자가 Docker를 쉽게 사용할 수 있도록 해주는 주체
https://www.youtube.com/watch?v=IiNI6XAYtrs