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가 더 많이 검증되고 지원되고 있다.