Kamal 배포를 위한 로컬 Docker 레지스트리 활용 가이드

How to use local Docker registry in Kamal | Deploy Linux Blog

작성자
Ruby Weekly
발행일
2025년 10월 09일

핵심 요약

  • 1 로컬 Docker 레지스트리는 DockerHub와 같은 원격 서비스 대신 이미지를 로컬에 저장 및 관리하여 비용 절감, 속도 향상, 보안 강화 및 설정 단순화 등의 이점을 제공합니다.
  • 2 Kamal 배포 시 `config/deploy.yml` 파일에서 `registry: server: "localhost:5555"`와 같이 설정하여 로컬 레지스트리를 쉽게 활용할 수 있으며, 이는 Kamal의 메인 브랜치와 Docker 28.3.3 이상 버전에서 지원됩니다.
  • 3 Kamal은 `registry` 공식 Docker 이미지를 실행하여 로컬 레지스트리를 구현하며, `kamal registry setup` 및 `kamal registry remove` 명령어를 통해 관리되지만, 로컬 환경에 국한되어 팀 공유에는 제약이 있습니다.

도입

로컬 Docker 레지스트리는 Docker 이미지를 DockerHub와 같은 원격 서비스에 의존하지 않고 로컬 컴퓨터에 저장하고 관리할 수 있는 저장소입니다. 이는 Kamal을 사용하여 배포할 때 레지스트리를 완전히 건너뛸 수 없으므로, 자체 호스팅 레지스트리에 대한 훌륭하고 간단한 대안을 제공합니다. 이 글에서는 로컬 레지스트리의 장단점, Kamal에서의 활용 방법, 작동 방식 및 대안에 대해 상세히 설명합니다.

로컬 Docker 레지스트리를 활용하는 것은 여러 가지 중요한 이점을 제공합니다. 첫째, 비용 절감입니다. 컨테이너 이미지 호스팅 비용을 절약하고 DockerHub와 같은 서비스에 대한 요금을 피할 수 있습니다. 둘째, 속도 향상입니다. 이미지를 로컬 레지스트리로 푸시하거나 풀하는 작업은 원격 제공자 레지스트리에 접근하는 것보다 훨씬 빠릅니다. 셋째, 보안 강화입니다. 이미지가 공용 인터넷에 노출될 위험을 최소화하여 환경 변수 및 소스 코드 유출 위험을 줄일 수 있습니다. 넷째, 단순성입니다. Kamal을 통한 자체 호스팅 초기 설정 단계를 줄여 하나의 비밀(secret)을 절약할 수 있습니다.

하지만 로컬 레지스트리는 Kamal 설치 환경에 로컬로 국한된다는 명확한 단점이 있습니다. 이는 노트북에서 로컬 레지스트리를 사용하는 경우 동료들과 쉽게 공유할 수 없음을 의미합니다.

Kamal에서 로컬 레지스트리 사용 방법

Kamal에서 로컬 Docker 레지스트리를 사용하려면 config/deploy.yml 파일에서 다음과 같이 localhost를 가리키도록 설정합니다:

yaml # config/deploy.yml registry: server: "localhost:5555"

포트는 자유롭게 선택할 수 있으며, 지정하지 않으면 포트 80이 기본값으로 사용됩니다. KAMAL_REGISTRY_PASSWORD를 더 이상 제공할 필요가 없습니다. 이 기능은 로컬에서 발행된 포트가 루프백(loopback)뿐만 아니라 로컬 네트워크에서도 접근 가능하도록 하는 Docker 28.3.3 이상 버전과 함께 사용하는 것이 좋습니다.

작동 방식

Kamal은 외부 레지스트리에 로그인하는 대신, 지정된 포트에서 단순히 registry 이미지를 실행합니다. registry는 레지스트리를 실행하기 위한 공식 Docker 이미지입니다.

CLI의 로그인 액션은 이를 반영하여 변경되었습니다. 새로운 setup 액션은 로컬 레지스트리 설정 또는 외부 레지스트리 로그인 모두를 위한 것이며, logout 액션은 이제 remove 액션으로 통합되었습니다:

  • kamal registry login -> kamal registry setup

  • kamal registry logout -> kamal registry remove

대안

로컬 레지스트리의 대안으로는 Kamal을 개발한 37signals처럼 완전한 Docker 레지스트리를 자체 호스팅하는 방법이 있습니다. 그들은 계약된 대역폭을 피하고, 비용을 절감하며, 자체 하드웨어에서 나머지 서비스를 자체 호스팅하면서 제어권을 확보하기 위해 이 방식을 선택했습니다. 결국 DockerHub를 사용한 후 Harbor를 선택하여 Docker 레지스트리를 배포했습니다.

결론

로컬 Docker 레지스트리는 Kamal을 이용한 배포 환경에서 비용, 속도, 보안, 단순성 측면에서 상당한 이점을 제공하는 효율적인 솔루션입니다. 특히 Kamal의 `config/deploy.yml` 설정을 통해 간편하게 구성할 수 있으며, `kamal registry setup`/`remove` 명령어로 관리됩니다. 그러나 로컬 환경에 국한되어 팀 간 공유가 어렵다는 단점이 있습니다. 따라서 개인 개발 환경이나 소규모 팀에서는 유용하지만, 대규모 팀이나 공유가 필요한 환경에서는 Harbor와 같은 자체 호스팅 레지스트리 솔루션을 고려하는 것이 바람직합니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!