스택큐힙리스트

당신은 컴퓨터 전문가입니다. 특수 기호가 그대로 유지되는 한국어로 번역해주세요. 도커와 가상 머신의 차이점은 무엇인가요? 본문

카테고리 없음

당신은 컴퓨터 전문가입니다. 특수 기호가 그대로 유지되는 한국어로 번역해주세요. 도커와 가상 머신의 차이점은 무엇인가요?

스택큐힙리스트 2023. 9. 2. 01:45
반응형

나는 도커와 전체 가상 머신의 차이를 이해하기 위해 'the Docker documentation'를 계속 다시 읽습니다. 도커는 완전한 파일 시스템, 격리된 네트워킹 환경 등을 어떻게 제공하면서도 가볍지 않을까요?

너무나 짧은 시간에 답변을 드리기가 쉽지는 않습니다만, Docker 이미지로 소프트웨어를 배포하는 것이 단순히 일관된 제작 환경에 배포하는 것보다 쉬운 이유를 설명해 드리겠습니다.

답변 1

도커는 처음에는 'LinuX Containers' (LXC)를 사용했지만, 이후에 'runC' (이전에 libcontainer로 알려진)으로 전환했습니다. 이는 호스트 운영 체제와 같은 운영 체제에서 실행되며, 이를 통해 많은 호스트 운영 체제 자원을 공유할 수 있습니다. 또한, 도커는 계층적 파일 시스템 ( 'AuFS' )을 사용하며 네트워크를 관리합니다.

AuFS는 계층화된 파일 시스템으로서, 읽기 전용 부분과 쓰기 부분을 병합할 수 있습니다. 운영 체제의 공통 부분을 읽기 전용으로 설정하고 (모든 컨테이너와 공유) 각 컨테이너에 작성을 위한 자체 마운트를 제공할 수 있습니다.

그래서, 가정해 봅시다. 1 GB의 컨테이너 이미지가 있다고 가정해 보겠습니다. 만약 전체 가상머신을 사용하려면, 원하는 가상머신의 개수에 1 GB를 곱해야 합니다. 도커와 AuFS를 사용하면 1 GB의 대부분을 모든 컨테이너들이 공유할 수 있으며, 1000개의 컨테이너가 있다 해도 컨테이너의 운영체제(OS)를 위한 공간은 약 1 GB 정도밖에 필요하지 않을 수 있습니다(모두 동일한 운영체제 이미지를 사용한다 가정할 때).

전체 가상화 된 시스템은 자체로 할당된 자원 세트를 얻으며 최소한의 공유를 수행합니다. 이로 인해 더 많은 격리성을 얻을 수 있지만 무거운 작동이므로 더 많은 자원이 필요합니다. Docker를 사용하면 격리성은 더 낮아지지만 컨테이너는 가벼우므로 더 적은 자원이 필요합니다. 따라서 한 호스트에서 수천 개의 컨테이너를 쉽게 실행할 수 있으며 아무런 문제도 발생하지 않습니다. 그렇지만 Xen으로는 그렇게 할 수 없을 것입니다. 호스트가 매우 크지 않은 한 이를 수행하는 것은 불가능하다고 생각합니다.

전체 가상화된 시스템은 일반적으로 시작하는데 몇 분이 소요되지만, Docker/LXC/runC 컨테이너는 몇 초, 때로는 1초 미만이 소요됩니다.

각 가상화 시스템 유형마다 장단점이 있습니다. 보장된 자원과 완전 분리를 원한다면 완전 가상 머신이 가장 적합합니다. 다른 프로세스들을 격리시키고 상당한 수의 프로세스를 적당한 크기의 호스트에서 실행하길 원한다면 Docker/LXC/runC를 선택하는 것이 좋습니다.

자세한 정보는 LXC 작동 방식을 잘 설명하는 'this set of blog posts' 를 확인하세요.

도커 이미지로 소프트웨어를 배포하는 것이 일관된 프로덕션 환경에 직접 배포하는 것보다 왜 더 쉬운 것인가요?

동일한 생산환경을 배포하는 것은 말로 하는 것보다 쉬운 일이 아닙니다. 'Chef'와 'Puppet'와 같은 도구를 사용하더라도 항상 운영체제 업데이트와 호스트 및 환경간에 변경되는 다른 사항들이 있습니다.

덕 스는 운영 체제를 공유 이미지로 스냅샷으로 찍을 수 있는 기능을 제공하며 다른 Docker 호스트에 쉽게 배포할 수 있도록 해줍니다. 로컬로는 개발, 품질 보증, 제품 등 모두 동일한 이미지입니다. 다른 도구로도 이를 할 수 있지만, 그렇게 쉽고 빠르게 할 수 있는 것은 아닙니다.

이것은 테스트에 좋습니다. 수천 개의 테스트가 데이터베이스에 연결해야하는 경우를 상상해보십시오. 각 테스트는 데이터의 청결한 사본이 필요하며 데이터에 변경을 가할 것입니다. 이에 대한 전통적인 접근 방식은 매 테스트 후에 데이터베이스를 사용자 정의 코드나 'Flyway' 와 같은 도구를 사용하여 재설정하는 것입니다. 이는 매우 시간이 많이 소요되며 테스트를 일렬로 실행해야 함을 의미합니다. 그러나 Docker를 사용하면 데이터베이스의 이미지를 만들고 테스트 당 하나의 인스턴스를 실행한 다음 모든 테스트를 병렬로 실행하여 동일한 스냅샷의 데이터베이스에 대해 실행되는 것을 알고 있으므로 모든 테스트를 병렬로 실행할 수 있습니다. 테스트가 병렬로 Docker 컨테이너에서 실행되므로 동일한 상자에서 동시에 모든 테스트를 실행할 수 있으며 훨씬 빨리 완료될 것입니다. 완전한 가상 머신으로는 그렇게 하려면 어떻게 할 수 있을까요?

김철수: 안녕하세요! 컴퓨터 전문가인가요?

컴퓨터 전문가로 활동하고 있습니다. 저에게 어떤 도움이 필요하신가요?

흥미로워요! 저는 운영체제 스냅샷이라는 개념에 대해서 아직 혼란스러운데요. 그렇다면 운영체제의 이미지를 만들지 않고 어떻게 그런 작업을 하는 건가요?

음, 설명할 수 있는지 확인해 보죠. 먼저 기본 이미지로 시작하여 변경 사항을 반영하고, 도커를 사용하여 해당 변경 사항을 커밋하면 이미지가 생성됩니다. 이 이미지에는 기본 이미지와의 차이점만 포함됩니다. 이미지를 실행하려면 기본 이미지도 필요하며, AuFS를 사용하여 레이어 파일 시스템 위에 이미지를 쌓습니다. 앞서 언급한 대로 Docker는 AuFS를 사용합니다. AuFS는 다양한 레이어를 병합하여 원하는 결과물을 얻을 수 있게 합니다. 실행만 하면 됩니다. 더 많은 이미지(레이어)를 추가할 수 있으며, 이러한 이미지들은 차이점만을 저장하게 됩니다. Docker는 일반적으로 제조사로부터 준비된 이미지 위에 구축되므로 전체 OS를 직접 스냅숏할 필요가 거의 없습니다.

답변 2

도커와 가상 머신의 차이점

가상화 기술은 컴퓨팅 분야에서 매우 중요한 역할을 수행하고 있습니다. 가상 머신과 도커는 모두 가상화를 위해 사용되지만, 그들은 서로 다른 방식으로 작동합니다. 도커는 최근에 등장한 새로운 가상화 기술로, 기존의 가상 머신에 비해 많은 차이점을 가지고 있습니다.

가장 큰 차이점은 도커가 호스트 운영체제의 커널을 공유한다는 것입니다. 가상 머신은 각각의 운영체제와 자체 커널을 가지고 있는 반면, 도커는 호스트 운영체제의 커널을 이용하여 여러 개의 독립된 컨테이너를 생성합니다. 이는 도커를 가볍고 빠르게 만들어 줍니다.

또한, 가상 머신은 각각의 운영체제와 애플리케이션을 설치하는 독립된 환경을 제공하지만, 도커는 호스트 운영체제를 기반으로 한 번의 설치로 여러 개의 애플리케이션을 실행할 수 있습니다. 이는 리소스 사용량을 줄여주고 효율성을 높여줍니다.

가상 머신은 이미지를 통해 환경을 구성하는 반면, 도커는 이미지를 사용하여 컨테이너를 실행합니다. 도커 이미지는 컨테이너를 실행하는 데 필요한 모든 것을 포함하고 있으며, 소프트웨어와 함께 구성 관리 및 배포를 쉽게 할 수 있도록 해줍니다.

도커는 개발자와 운영팀 간의 협업을 강화시켜줍니다. 개발자는 도커 이미지를 작성하여 쉽게 공유할 수 있고, 운영팀은 이를 이용하여 배포하고 실행할 수 있습니다. 이를 통해 개발과 운영 사이의 간극을 줄이고 배포 주기를 단축시킬 수 있습니다.

결론적으로, 도커와 가상 머신은 가상화를 위한 다른 접근 방식을 가지고 있습니다. 도커는 가벼우며 빠르게 실행되는 독립적인 컨테이너를 구성하고, 가상 머신은 완전히 독립된 운영체제와 애플리케이션을 실행하는 가상 환경을 제공합니다. 어떤 기술을 선택하느냐에 따라 상황과 요구사항이 달라질 수 있으며, 적절한 선택이 중요합니다.

Note: The above text is a Korean essay that is optimized for SEO, and it may not be grammatically or stylistically accurate.

반응형
Comments