Containerization/Docker

# [Docker] 도커란 무엇인가?

leehi0110 2024. 9. 28. 19:25
반응형

1. 도커(Docker)란 무엇인가?

  • 도커(Docker)는 소프트웨어 기술을 활용하여 애플리케이션을 더 쉽게 개발, 배포 및 실행할 수 있도록 도와주는 오픈 소스 플랫폼이다.
  • 애플리케이션은 격리된 환경에서 실행되기 때문에, 다른 애플리케이션이나 시스템에 영향을 미치지 않는다.

2. Docker vs Vritual Machine (VM)

  • Docker와 VM은 모두 애플리케이션이 격리된 환경에서 실행 될 수 있도록 하는 기술이지만 아래와 같은 차이가 있다.
  • Docker를 더 잘 이해하기 위해 두 기술 간 어떤 차이가 있는지 이해하는 것은 중요하다.

  Docker Vritual Machine (VM)
개념
(Concept)
컨테이너화 기술을 사용하여 애플리케이션과 그 종속성을 격리된 환경에서 실행

컨테이너는 호스트 운영체제의 커널을 공유하며 애플리케이션과 필요한 라이브러리만 포함
하이퍼바이저 (Hypervisor)를 통해 물리 하드웨어를 가상화 하여 여러 운영체제를 동시에 실행

각 가상 머신은 자체 운영체제와 애플리케이션을 포함한 전체 시스템을 가상화한다.
아키텍쳐
(Architecture)
[ 호스트 운영체제 ]

 - 도커는 호스트 OS위에서 실행된다.

[ 도커 엔진 ] 

 - 도커 엔진은 호스트 운영체제 위에서 실행되며, 컨테이너를 관리하고 실행한다.

[ 컨테이너 ]

 - 각 컨테이너는 애플리케이션과 필요한 라이브러리만 포함하여, Host OS 커널을 공유
[ 호스트 운영체제 ]

 - 하이퍼 바이저가 호스트 운영체제 위에서 실행되거나, 하이퍼바이저가 직접 하드웨어 위에서 실행될 수 있다.

[ 하이퍼바이저 ]

 - 하이퍼바이저는 물리적 하드웨어를 가상화하여 여러 VM을 실행한다.

[ 가상머신 ]

 - 각 VM은 자체 운영체제와 애플리케이션을 포함한 전체 시스템을 가상화 한다.
장점
(Advantage)
[ 경량화 ]

 - 도커 컨테이너는 호스트 운영체제의 커널을 공유하므로, VM보다 훨씬 빠르게 시작할 수 있다.

 - 컨테이너는 애플리케이션과 필요한 라이브러리만 포함하므로 VM보다 적은 자원을 사용한다.

[ 이식성 ]

 - 도커 이미지를 통해 개발, 테스트, 운영 환경에서 일관된 실행 환경을 보장할 수 있다.

 - 도커 이미지를 이용해 다양한 플랫폼에서도 동일하게 실행할 수 있다.

[ 개발 및 테스트 용이 ]

 - 컨테이너는 빠르게 배포되고, 업데이트 및 롤백이 용이하다.

 - 도커는 지속적 통합 및 배포 (CI/CD)를 파이프라인을 통해 쉽게 통합할 수 있다,
[ 높은 수준의 격리 ]

 - 각 VM은 자체 운영체제를 가지고 있기 때문에, 보다 완벽한 격리를 제공한다.

 - VM은 하이퍼바이저를 통해 격리되므로, 컨테이너보 다 높은 수준의 보안을 제공한다.

[ 다양한 운영체제 지원 ]

 - VM 환경에서는 다양한 운영체제를 실행 할 수 있다.

 - 이는 특정 OS에서만 동작하는 애플리케이션을 실행할 수 있는 장점이다.

[ 관리 도구 ]

 - VM은 오랜시간 사용되어 온 만큼 다양한 관리 도구가 존재한다.

 - 많은 기업들이 VM 기술을 사용하는 만큼, 다양한 지원과 서비스가 존재한다.
단점
(Disadvantage)
[ 보안 ]

 - Host OS와 커널을 공유하기 때문에, 커널 수준의 보안에 취약하다.

 - VM보다 격리 수준이 낮다.

[ 운영체제 제한 ] 

 - 도커는 주로 리눅스 기반이며, 다른 운영체제에서의 지원이 제한적이다.
[ 무거운 자원 사용 ]

 - 각 VM은 운영체제를 포함하기 때문에, 보다 많은 자원을 사용한다.

 - VM은 부팅 과정이 필요하기 때문에 시작 시간이 오래 걸린다.

[ 복잡한 관리 ]

 - 각 VM은 독립된 OS를 가지고 있기 때문에, 업데이트 및 패치 관리가 필요하다.

[ 이식성 ]

 - VM은 운영체제와 하드웨어에 종속적일 수 있기에, 도커 컨테이너에 비해 이식성이 떨어진다.

3. 도커의 주요 개념

  • 이미지 ( Image )
    • 도커 이미저는 컨테이너를 생성하는데 필요한 모든 파일과 설정을 포함한 템플릿이다.
    • 이미지는 애플리케이션과 의존성을 포함하고 있으며, 여러 계층으로 이루어져 있다.
    • 각 계층은 이전 계층에 대한 변경사항을 포함하며, 계층들이 쌓여 최종 이미지를 형성한다.
    • 도커 이미지들은 도커 허브 ( Docker Hub )와 같은 레지스트리에서 관리 배포 된다.

  • 컨테이너 ( Container )
    • 컨테이너는 도커 이미지를 이용해 실행된 상태를 의미하며, 애플리케이션과 의존성을 포함하고 있다.
    • 컨테이너는 독립된 환경에서 실행되기 때문에, 애플리케이션간 격리가 가능하다.
    • 또한, 도커 이미지를 활용해 여러 개의 컨테이너를 쉽게 생성 할 수 있다.

  • 도커 엔진 ( Docker Engine )
    • 도커 엔진은 도커 컨테이너를 생성, 실행, 중지, 삭제 등의 작업을 관리하는 핵심 컴포넌트 이다.
    • 클라이언트-서버 아키텍처를 기반으로하며, 주요 구성 요소는 Docker Daemon, Docker CLI, Docker REST API가 있다.

  • 도커 허브 ( Docker Hub )
    • 도커 허브는 도커 이미지를 저장하고 공유 할 수 있는 클라우드 기반 레지스트리 서비스이다.
    • 도커 허브를 통해 사용자는 공개 및 비공개 이미지 업로드가 가능하며, 이를 이용해 다른 사용자와의 공유가 가능하다.
    • 특정 조직 내에서 해당 기능을 이용해 협업이 가능하다.

 

🙋‍♂️ 궁금한 점이나 잘못된 내용을 댓글로 적어주시면 감사하겠습니다 !!

반응형

'Containerization > Docker' 카테고리의 다른 글

# [Docker] Docker Engine  (2) 2024.09.29