2026년 도커 대체제: 포드맨·리마·컨테이너드, 도커 독점 끝

발행: (2026년 5월 24일 AM 05:23 GMT+9)
8 분 소요
원문: Dev.to

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 → nginx
  • localhost: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
0 조회
Back to Blog

관련 글

더 보기 »

내 스킬

프로젝트를 위한 AI 지시문을 만들고, 설치하고, 관리하세요 — 코딩이 필요 없습니다. CREATE 이름을 정하고, 카테고리를 선택하고, 원하는 것을 설명하세요 — 마법사가 자동으로 구성합니다.