2026년 도커 대체제: 포드맨·리마·컨테이너드, 도커 독점 끝
Docker 대안 2026: Podman, Lima, containerd 그리고 Docker 독점의 종말
Docker는 이제 더 이상 유일한 선택이 아닙니다. Podman은 크게 성장했고, Lima는 macOS에서 컨테이너를 실용적으로 만들었으며, containerd는 프로덕션 표준이 되었습니다. 2026년에 컨테이너 런타임을 고를 때는 실제로 옵션을 이해해야 합니다. 솔직한 분석을 보여드립니다.
Docker가 장악력을 가졌던 이유는 기술적 우수성 때문이 아니라 편리함 때문이었습니다. 루트 권한으로 실행되는 Docker 데몬(dockerd), 독점 CLI, 폐쇄된 생태계는 모두 타협점이었습니다. 2026년 현재, 대부분의 사용 사례에 대해 대안들이 프로덕션 수준에 도달했습니다.
Podman은 보안에 민감한 팀들의 기본 선택이 되었습니다. 데몬이 없으니 루트 권한이 필요 없고, 데몬 충돌도 없으며 systemd와의 통합도 뛰어납니다.
macOS
brew install podman
podman machine init
podman machine start
Linux (Fedora/RHEL은 이미 포함)
sudo dnf install podman
확인
podman run --rm docker.io/library/alpine echo "Podman works!"
Docker: 데몬 기반 (루트 권한 필요)
dockerd가 루트로 실행되고, 모든 컨테이너는 루트 프로세스의 자식입니다.
Podman: 데몬 없이 (사용자 권한)
- 각 컨테이너는 사용자의 프로세스 자식으로 실행됩니다.
- 루트 데몬이 없으니 루트 취약점이 없습니다.
Podman 5.x (2026) 주요 기능
- 기본적으로 루트리스 컨테이너
- Kubernetes 팟과 유사한 Pods
- cgroups v2 완전 지원
- Kubernetes YAML 지원 (
podman generate kube) - Docker와 호환되는 CLI (alias
docker=podman작동)
여러 컨테이너를 하나의 팟에 묶기
podman pod create --name myapp-pod \
-p 8080:80 \
-p 5432:5432
팟에 컨테이너 추가
podman run -d --pod myapp-pod --name nginx nginx:alpine
podman run -d --pod myapp-pod --name postgres postgres:16
- 팟 안의 모든 컨테이너는 동일한 네트워크 네임스페이스를 공유합니다.
localhost:80→ nginxlocalhost:5432→ postgres
팟에서 Kubernetes YAML 생성
podman generate kube myapp-pod > myapp.yaml
# 이제 변경 없이 Kubernetes에 배포 가능
Podman은 루트가 아닌 사용자로 실행됩니다
$ podman run --rm alpine id
uid=0(root) gid=0(root)
잠깐, 루트?
컨테이너 내부에서는 루트가 맞지만, 호스트에서는 비특권 사용자에 매핑됩니다.
podman unshare cat /proc/self/uid_map
# 출력: 0 1000 1 (컨테이너 루트 = 호스트 사용자 1000)
- 컨테이너가 탈출하더라도 호스트 접근 권한이 제한됩니다.
Dockerfile 그대로 사용
podman build -t myapp:latest .
podman push myapp:latest docker://registry.example.com/myapp:latest
# 또는
podman push myapp:latest containers://registry.example.com/myapp:latest
- 레지스트리 프로토콜 지원
docker://(Docker 레지스트리)containers://(OCI 레지스트리)
Docker Desktop on macOS는 언제나 타협이었습니다: 전체 Linux VM 위에 Docker를 구동
Lima는 같은 결과를 더 적은 오버헤드로 제공합니다.
Docker Desktop
- 전체 Alpine Linux VM 실행 (2‑4 GB RAM)
osxfs를 통한 파일 시스템 공유 (느림)- 가상 USB/네트워크 스택
- 비용: $0‑$21/월 (기업 규모에 따라)
Lima
- macOS 네이티브 가상화 사용 (Hypervisor.framework)
- 성능 향상
- 네이티브 파일 공유 (
virtiofs) - 무료, 오픈소스
설치
brew install lima
템플릿 생성
limactl start
- Alpine Linux VM이 다음을 포함하도록 생성됩니다:
containerd+nerdctl- BuildKit
- Build Pull‑Through 캐시
- 루트 및 루트리스 지원
Docker처럼 사용
limactl shell default docker build -t myapp .
limactl shell default docker run -p 8080:80 myapp
lima.yaml (또는 ~/.lima/_config/ 아래의 모든 .yaml)
images:
- location: "https://deps.sh/lima/alpine/3.19.1/lima.yaml"
arch: "x86_64"
- location: "https://deps.sh/lima/alpine/3.19.1/lima.yaml"
arch: "aarch64"
provision:
- mode: system
script: |
# containerd 및 의존성 설치
apk add --no-cache \
containerd \
docker \
docker-cli-compose \
buildkit
- mode: user
script: |
# 사용자 레벨 설정
systemctl --user enable containerd
systemctl --user start containerd
provision_scripts:
- mode: system
script: |
cat > /etc/docker/daemon.json <<'EOF'
{
"registry-mirrors": ["https://mirror.gcr.io"],
"storage-driver": "overlay2"
}
EOF
rc-service docker start
mounts:
- location: "~"
writable: true
- location: "/tmp/lima"
writable: true
networks:
- lima: bridged
cpu: 4
memory: 8GB
disk: 100GB
containerd – Docker와 Kubernetes 내부에서 실제로 동작하는 엔진
직접 사용하면 더 간단하고 보안성이 높은 배포가 가능합니다.
Docker 스택 (Docker Inc. 제품)
docker CLI → dockerd (데몬) → containerd → runc → 컨테이너
containerd 직접 사용
ctr CLI (또는 nerdctl) → containerd → runc → 컨테이너
장점
- 공격 표면 감소 (dockerd 없음)
- OCI 이미지에 직접 접근
- Kubernetes와의 통합 강화
- 디버깅이 간단
설치
apt install containerd
이미지 가져오기
ctr images pull docker.io/library/nginx:alpine
이미지 목록
ctr images ls
컨테이너 실행
ctr run -t --rm docker.io/library/alpine:latest test-container ash
네임스페이스 관리 (docker ps와 유사)
ctr ns ls
ctr -n k8s.io containers ls
nerdctl 설치
brew install nerdctl
nerdctl 사용 (docker와 동일하지만 containerd 기반)
nerdctl build -t myapp:latest .
nerdctl run -p 8080:80 myapp:latest
nerdctl compose up
nerdctl 추가 기능
- 이미지 암호화 (
--encrypt) - BuildKit + containerd 스냅샷터
- 이미지 Gzip 압축
- 지연 풀링 (
stargz)
BuildKit – Docker/Podman/containerd용 최신 빌더
동시 빌드, 향상된 캐시, 효율적인 레이어 관리 등을 지원합니다.
/etc/buildkit/buildkitd.toml
[registry."docker.io"]
mirrors = ["registry.docker.io"]
[registry."gcr.io"]
insecure = true # 격리된 환경용
[worker.oci]
max-parallelism = 4 # 동시 빌드 제한
[driver]
snapshotter = "overlayfs" # 네이티브보다 빠름
인라인 캐시와 함께 빌드
docker build --build-arg BUILDKIT_INLINE_CACHE=1 -t myapp:latest .
캐시 마운트 사용 (패키지 매니저 캐시 유지)
docker build -t myapp:latest . <<'EOF'
# syntax=docker/dockerfile:1.7
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN --mount=type=cache,target=/root/.npm \
npm ci --only=production
COPY . .
EOF
- npm 캐시가 빌드 간에 유지됩니다.
npm ci가 캐시된node_modules와 함께 실행됩니다.
다중 아키텍처 동시 빌드
docker buildx create --use
docker buildx inspect --bootstrap
docker buildx build \
--platform linux/amd64,linux/arm64 \
--tag myapp:latest \
--push \
.
amd64(Intel