본문 바로가기
C.W.K.
Stream
Lesson 06 of 13 · published

Docker-in-Docker

~9 min · docker, dind, isolation

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

컨테이너 안에서 컨테이너 빌드

GitHub가 제공하는 호스티드 러너에는 Docker가 미리 깔려 있어. 하지만 셀프 호스티드 러너를 쓸 때, 특히 러너 자체를 컨테이너로 띄운다면 러너 안에서 Docker 명령을 실행할 방법을 고민해야 해.

세 가지 패턴

  1. 호스트 Docker 소켓 마운트/var/run/docker.sock을 러너에 연결하는 방식이야. 제일 간단하지만 안전하지는 않아. 작업이 호스트로 빠져나갈 수 있거든.
  2. Docker-in-Docker (dind) — 러너 안에 별도의 Docker 데몬을 띄우는 거야. 더 안전하지만 속도는 느려. --privileged 옵션이나 rootless dind 설정이 필요해.
  3. Buildkit 단독 — 이미지 빌드만 한다면 dockerd 없이도 Buildkit을 쓸 수 있어. 가볍고 빠르지.

권장 사항

  • 신뢰할 수 있는 코드: 소켓 마운트를 써도 괜찮아. 쉽고 빠르니까.
  • 신뢰할 수 없는 코드: rootless dind나 Kaniko, Buildkit을 활용해.
  • Apple Silicon: Mac의 Docker Desktop이 데몬을 알아서 처리하니까 러너 에이전트가 정상적으로 통신할 수 있어.

Code

마운트된 Docker 소켓을 가진 러너·yaml
# docker-compose.yml for self-hosted runner
services:
  runner:
    image: ghcr.io/myorg/runner:latest
    environment:
      RUNNER_TOKEN: ${RUNNER_TOKEN}
      RUNNER_REPOSITORY_URL: https://github.com/my-org/my-repo
      RUNNER_LABELS: self-hosted,linux-x64,docker
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - runner-cache:/home/runner
    restart: unless-stopped

volumes:
  runner-cache:

External links

Exercise

셀프 호스티드 러너에서 Docker 이미지를 빌드한다면, 지금 Docker를 어떻게 쓰고 있는지 분류해 봐. 소켓 마운트, dind, Buildkit, 아니면 다른 방식인지. 그리고 돌아가는 코드의 신뢰 수준에 맞는지 확인해. 필요하면 다른 방식으로 마이그레이션해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.