2023. 3. 31. 21:51ㆍCS
지금까지 도커를 한번도 써본 적 없이 살아왔고 별 문제 없이 살아왔습니다만,
이번에 프로젝트를 진행하던 와중에
다른 사람이 만든 Chronium 확장 프로그램을 가져다 사용할 일이 생겼는 데
제작자가 해당 프로그램을 도커로 배포했다고 하기에
이번 기회에 도커에 대해 배워보도록 하겠습니다.
먼저 설명을 하기에 앞서,
해당 영상을 보고 오면 본 글을 읽을 때 더 도움이 될거라 생각하고 올리겠습니다.
https://www.youtube.com/watch?v=hWPv9LMlme8
도커란?
도커는 애플리케이션과 그에 필요한 의존성들을 가상화된 환경인 컨테이너에 패키징하는 기술입니다.
이를 통해 소프트웨어 개발과 배포를 더욱 쉽게, 빠르게, 그리고 안정적으로 할 수 있습니다.
도커의 주요 구성 요소와 개념은 다음과 같습니다.
- 도커 이미지(Docker Image): 이미지는 애플리케이션과 그 실행에 필요한 모든 종속성 및 설정을 포함한 패키지로서, 컨테이너를 생성하기 위한 템플릿 역할을 합니다. 이미지는 응용 프로그램 코드, 라이브러리, 환경 변수, 실행 파일 등을 포함할 수 있습니다. 이미지는 Docker Hub와 같은 레지스트리에서 공유하거나 개인적으로 저장할 수 있습니다.
- 도커 컨테이너(Docker Container): 컨테이너는 도커 이미지의 실행 가능한 인스턴스, 즉 이미지를 기반으로 실행되는 독립적이고 격리된 프로세스 환경입니다. 컨테이너를 실행할 때 이미지를 바탕으로 새로운 컨테이너가 생성되며, 필요한 경우 여러 개의 컨테이너를 동시에 실행할 수 있습니다. 컨테이너는 독립적인 실행 환경을 제공하므로, 서로 다른 컨테이너 간에 충돌이나 의존성 문제가 발생하지 않습니다.
- 도커 클라이언트(Docker Client)와 도커 데몬/서버(Docker Daemon/Server): 도커 클라이언트는 사용자가 도커와 상호 작용할 수 있는 CLI(Command Line Interface)나 GUI(Graphical User Interface) 도구를 제공합니다. 클라이언트와 도커 데몬은 REST API를 통해 통신합니다. 도커 데몬은 이미지를 빌드하고, 컨테이너를 관리하며, 도커 서비스를 제공하는 역할을 합니다.
- 도커 레지스트리(Docker Registry): 도커 레지스트리는 도커 이미지를 저장하고 공유하는 서비스입니다.
Docker Hub는 가장 대표적인 공개 도커 레지스트리이며, 사용자는 여기에서 다양한 이미지를 가져와 사용할 수 있습니다. 또한, 개인적인 사용을 위해 프라이빗 레지스트리를 구축할 수도 있습니다. - 도커파일 (Dockerfile) : 도커 파일은 이미지를 생성하기 위한 스크립트로, 애플리케이션과 필요한 환경 설정을 정의합니다. 도커 파일은 순차적인 명령어 집합으로 구성되며, 도커 엔진은 이를 사용하여 자동으로 이미지를 빌드합니다.
Docker vs Virtual Machine?
도커에 대한 설명을 찾다보면, 항상 비교되는 개념으로 Virtual Machine(VM, 가상화 머신) 이 있다.
그리고 항상 그 설명은 다음과 같다.
가상화 머신 은 컴퓨타 자원을 정적으로 나누게 되지만, 도커는 모든 컨테이너가 공유하기 때문에 컴퓨터 자원을 제한시키지 않는다.
그렇다면 VM 은 도커보다 더 좋은 개념인가? 라는 의문이 들었습니다.
하지만 으레 기술이 그렇듯 언제나 절대적으로 다른 하나가 더 좋은 경우는 없고
장단점이 있고, 상황에 따라 더 적합한 기술이 있습니다.
각각의 장점에 대해 알아보고, 각각이 더 적합한 예시 상황을 알아보겠습니다.
도커의 장점:
- 경량화: 도커 컨테이너는 가상화 머신보다 더 적은 시스템 리소스를 사용합니다. 컨테이너는 호스트 OS의 커널을 공유하므로, 별도의 게스트 OS가 필요하지 않습니다.
- 빠른 시작 및 종료: 컨테이너는 게스트 OS를 부팅할 필요가 없기 때문에, 시작 및 종료가 가상화 머신보다 빠릅니다.
- 이식성: 도커 컨테이너는 이미지에 모든 응용 프로그램 및 의존성을 포함하므로, 다양한 플랫폼에서 일관된 환경을 제공합니다.
가상화 머신의 장점:
- 완전한 격리: 가상화 머신은 하드웨어 수준에서 격리되어 있어, 보안 요구 사항이 높거나 서로 다른 OS를 필요로 하는 경우에 적합합니다.
- 다양한 OS 지원: 가상화 머신은 다양한 게스트 OS를 지원하므로, 여러 OS 환경에서 개발 및 테스트를 진행할 수 있습니다.
- 더 정교한 자원 관리: 가상화 머신은 자원 할당 및 관리에 대한 더 세밀한 제어를 제공합니다.
예를 들어, 여러 애플리케이션을 개발하고 배포하는 환경에서는 도커가 더 적합할 수 있습니다.
도커는 개발, 테스트, 배포를 빠르게 진행할 수 있으며, 리소스를 효율적으로 활용할 수 있습니다.
반면, 서로 다른 OS 환경에서 작동하는 여러 애플리케이션을 동시에 테스트하거나, 보안 요구 사항이 높은 시스템에서 작업해야 하는 경우에는 가상화 머신이 더 적합할 수 있습니다.
보안 요구 사항이 더 높은 상황?
보안 요구 사항이 높다는 것은 해당 시스템이 보안 위협으로부터 더 많은 보호가 필요하다는 것을 의미합니다.
이러한 요구 사항은 민감한 데이터를 처리하거나,규제 준수가 필요한 경우 등에서 발생할 수 있습니다.
가상화 머신과 도커 컨테이너는 각각 다른 수준의 격리를 제공합니다.
가상화 머신은 하드웨어 수준에서 격리되어 있어, 게스트 OS간에 완전한 격리가 가능합니다.
이러한 격리 수준은 서로 다른 OS에서 작동하는 애플리케이션의 보안을 보장하며, 공격자가 한 가상화 머신에서 다른 가상화 머신으로 침투하는 것을 방지할 수 있습니다.
반면, 도커 컨테이너는 호스트 OS의 커널을 공유하기 때문에, 상대적으로 더 낮은 격리 수준을 제공합니다.
이는 컨테이너 간의 리소스 공유를 가능하게 하지만, 보안 측면에서는 가상화 머신보다 더 취약할 수 있습니다.
구체적인 예시로, 은행이나 금융 기관의 경우, 고객 정보 및 거래 데이터를 처리하고 저장해야 합니다.
이러한 데이터는 매우 민감하므로, 악의적인 공격자로부터 보호해야 합니다. 이런 경우 가상화 머신을 사용하여
서로 다른 응용 프로그램을 완전하게 격리하고, 보안 위협으로부터 더 안전한 환경을 제공할 수 있습니다.
다른 예로, 헬스케어 분야에서는 환자 데이터를 보호하는 것이 중요합니다.
이 데이터는 개인 정보 보호 및 규제 준수를 위해 안전하게 유지되어야 합니다. 이런 경우에도
가상화 머신이 더 나은 격리 수준을 제공하여 데이터를 보호할 수 있습니다.
요약하면, 보안 요구 사항이 높은 시스템에서는 가상화 머신이 더 나은 선택일 수 있습니다. 가상화 머신은 완전한 격리를 제공하여 서로 다른 애플리케이션 간의 보안 위협을 최소화하는 데 도움이 됩니다.
'CS' 카테고리의 다른 글
JIT 컴파일러의 이해와 자바와 자바스크립트에서의 활용 (0) | 2023.04.03 |
---|---|
프로토콜 스택: 웹 브라우저와 운영체제 간의 통신 이해하기 (0) | 2023.04.02 |
URL Encoding 이란? (0) | 2023.03.29 |
DNS란? eTLD란? (0) | 2023.03.28 |
데이터베이스(Database) 란? (0) | 2023.03.22 |