컨테이너 안에서 컨테이너 빌드
GitHub가 제공하는 호스티드 러너에는 Docker가 미리 깔려 있어. 하지만 셀프 호스티드 러너를 쓸 때, 특히 러너 자체를 컨테이너로 띄운다면 러너 안에서 Docker 명령을 실행할 방법을 고민해야 해.
세 가지 패턴
- 호스트 Docker 소켓 마운트 —
/var/run/docker.sock을 러너에 연결하는 방식이야. 제일 간단하지만 안전하지는 않아. 작업이 호스트로 빠져나갈 수 있거든. - Docker-in-Docker (dind) — 러너 안에 별도의 Docker 데몬을 띄우는 거야. 더 안전하지만 속도는 느려.
--privileged옵션이나 rootless dind 설정이 필요해. - Buildkit 단독 — 이미지 빌드만 한다면 dockerd 없이도 Buildkit을 쓸 수 있어. 가볍고 빠르지.
권장 사항
- 신뢰할 수 있는 코드: 소켓 마운트를 써도 괜찮아. 쉽고 빠르니까.
- 신뢰할 수 없는 코드: rootless dind나 Kaniko, Buildkit을 활용해.
- Apple Silicon: Mac의 Docker Desktop이 데몬을 알아서 처리하니까 러너 에이전트가 정상적으로 통신할 수 있어.