Container Tools

Dongmin Lee·2024년 1월 15일
0

Kubernetes

목록 보기
6/10

1. Docker

역할

  • 컨테이너를 생성, 관리, 실행하는데 사용되는 가장 유명한 도구
  • 컨테이너 런타임과 이미지 관리 도구를 포함한다.

특징

  • Dockerfile을 사용하여 이미지를 빌드하고, 이를 Docker Hub와 같은 레지스트리에 저장한다.
  • 생성된 이미지를 기반으로 컨테이너를 실행한다.
  • docker ps 명령어를 사용하여 실행 중인 컨테이너를 확인할 수 있다.

2. Containerd

역할

  • Docker의 일부로 시작되었지만, 이후 독립적인 컨테이너 런타임으로 발전되었다.
  • OCI(Open Container Initiative) 표준을 준수하는 컨테이너 런타임

특징

  • Kubernetes와 같은 오케스트레이션 시스템에서 컨테이너를 실행하기 위한 기본 런타임으로 사용된다.
  • crictl 명령어의 설정 파일(/etc/crictl.yaml)에서 Containerd를 런타임 엔드포인트로 지정되어 있으며, 이는 Kubernetes 클러스터에서 Containerd를 사용하여 컨테이너를 관리한다는 것을 의미한다.

3. Crictl

역할

  • CRI(Container Runtime Interface) 호환 컨테이너 런타임을 관리하기 위한 CLI(Command Line Interface) 도구

특징

  • Kubernetes 환경에서 컨테이너를 관리하기 위해 사용된다.
  • crictl ps 명령어를 사용하여 실행 중인 컨테이너를 확인할 수 있으며, 이는 Kubernetes 클러스터 내의 컨테이너들을 보여준다.

4. Podman

역할

  • Docker와 유사한 기능을 제공하지만, 데몬 없이 컨테이너를 관리하는 도구

특징

  • Docker와 유사한 명령어 구조를 가지고 있으며 (podman build, podman run 등), Docker와 동일한 방식으로 이미지를 빌드하고 컨테이너를 실행할 수 있다.
  • 루트 권한 없이 사용자 수준에서 컨테이너를 실행할 수 있다는 점에서 Docker와 차이가 있다.
  • podman ps 명령어를 사용하여 실행 중인 컨테이너를 확인할 수 있으며, 이는 Podman으로 실행된 컨테이너들을 보여준다.

5. 공통점과 차이점

공통점

  • 모두 컨테이너화된 애플리케이션을 관리하고 실행하는 데 사용된다.
  • Docker와 Podman은 이미지 관리와 컨테이너 실행을 위한 풀 스택 솔루션을 제공한다.

차이점

  • Docker는 데몬 기반 구조를 가지고 있으며, Podman은 데몬 없이 작동한다.
  • Containerd는 Docker의 일부에서 발전한 독립적인 컨테이너 런타임으로, 주로 Kubernetes와 같은 오케스트레이션 시스템에서 사용된다.
  • Crictl은 CRI 호환 컨테이너 런타임을 관리하기 위한 명령줄 인터페이스로, 주로 Kubernetes 환경에서 사용된다.

6. 데몬(Daemon)이란?

  • 주로 유닉스 및 유닉스와 유사한 운영 체제에서 백그라운드에서 실행되는 프로세스
  • 사용자가 직접적으로 상호작용하지 않는 동안에도 시스템이나 다른 프로그램의 요청을 처리하기 위해 지속적으로 실행된다.
  • "데몬"이라는 용어는 "Disk And Execution MONitor"의 약자에서 유래했으며, 백그라운드 서비스나 프로세스를 의미한다.

Docker 데몬 (dockerd)

  • Docker에서 데몬은 컨테이너 생성, 실행, 관리 등의 핵심적인 작업을 처리한다.
  • 시스템이 시작할 때 실행되며, Docker CLI나 다른 Docker 클라이언트들이 Docker API를 통해 이 데몬과 통신한다.
  • 사용자가 docker run이나 docker build와 같은 명령어를 실행할 때, 실제로는 Docker 데몬이 이 명령어를 받아 처리하고 결과를 반환한다.

Podman 데몬 없는 구조

  • Docker와 유사한 기능을 제공하지만, 중앙집중식 데몬을 사용하지 않는다.
  • 대신, 각 Podman 명령은 별도의 프로세스로 실행되며, 사용자의 권한으로 컨테이너를 관리한다.
  • 이 접근 방식은 시스템 보안을 향상시키며, 각 사용자가 자신의 컨테이너를 독립적으로 관리한다.

7. Docker vs Podman

Docker

장점

  • 광범위한 사용과 지원: Docker는 컨테이너 기술 분야에서 가장 널리 사용되며, 방대한 사용자 기반과 커뮤니티 지원을 가지고 있다.
  • 표준화된 도구 세트: Docker는 컨테이너 생성, 배포, 관리에 필요한 표준화된 도구와 워크플로우를 제공한다.

단점

  • 중앙집중식 데몬 구조: Docker 데몬이 시스템의 단일 지점으로 작동하여, 보안 상의 취약점이 될 수 있다.
  • 루트 권한 필요: Docker 데몬은 일반적으로 루트 권한으로 실행되어, 시스템에 대한 광범위한 접근 권한을 요구한다.

Podman

장점

  • 데몬 없는 구조: 중앙집중식 데몬 없이 작동하여, 보안상의 위험을 줄일 수 있다.
  • 루트 권한 불필요: 사용자 수준의 권한으로 컨테이너를 실행할 수 있어서 보안이 강화된다.
  • Docker CLI 호환성: Docker와 유사한 명령어를 사용하므로, Docker 사용자가 쉽게 전환할 수 있다.

단점

  • 더 적은 사용자 기반과 지원: Docker에 비해 상대적으로 사용자 기반이 작고, 커뮤니티 지원이 덜 발달되어 있을 수 있다.
  • 일부 환경에서의 호환성 문제: 특정 환경이나 도구에서 Docker에 비해 호환성 문제가 발생할 수 있다. (특히 일부 오래된 시스템이나 도구에서는 Podman을 완전히 지원하지 않을 수 있음)

선택

  • 보안 요구사항: 높은 보안 수준을 요구하는 환경에서는 Podman의 데몬 없는 구조와 루트 권한이 필요 없는 점이 유리할 수 있다.
  • 환경 및 호환성: 이미 Docker를 사용하고 있는 경우, Docker의 통합성과 호환성이 더 나은 선택일 수 있으나 새로운 환경이나 보안이 중요한 환경에서는 Podman을 고려해보면 좋다.
  • 규모와 관리: 대규모 인프라나 복잡한 오케스트레이션을 필요로 하는 환경에서는 Docker가 더 많이 검증되고 지원되고 있다.

0개의 댓글