본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Fly.io 프라이빗 레지스트리로 Docker 이미지 관리하기 (Managing Docker Images with Fly.io's Private Registry)

원문 보기 위키 갱신

Docker 컨테이너를 직접 빌드하고 Fly.io의 프라이빗 레지스트리에 push해 배포하는 방법을 알려드려요. fly launch가 많은 프레임워크를 지원하고 배포 구성을 자동 생성해 주지만, 직접 만든 이미지를 빌드하고 관리해야 할 때도 있답니다.

출처: 문서

본문

개요 (Overview)

Fly.io를 사용하면 Docker 컨테이너를 가벼운 Firecracker VM으로 배포해 전 세계에서 실행할 수 있어요. fly launch가 많은 프레임워크를 지원하고 배포 구성을 자동 생성하지만, 직접 만든 Docker 이미지를 Fly.io의 프라이빗 레지스트리에 빌드하고 push해서 수동으로 배포할 수도 있어요.

이 가이드는 Fly.io의 Docker 레지스트리를 통해 이미지를 빌드, push, 배포, 관리하는 과정을 안내해요.

Fly.io 레지스트리용 이미지 태깅

각 Fly.io 앱은 다음 형태의 전용 레지스트리 경로를 가져요:

registry.fly.io/<your-app-name>

새 앱을 만들려면:

fly apps create <your-app-name>

앱 이름은 전 세계적으로 고유해야 해요. 자동으로 고유 이름을 생성할 수도 있어요:

fly apps create --generate-name

그런 다음 앱의 레지스트리용 이미지에 태그를 붙이세요:

docker build -t registry.fly.io/<your-app-name>:<your-tag> .

레지스트리 인증 및 push

Docker가 Fly.io 레지스트리를 사용하도록 인증하세요:

fly auth docker

이 명령은 registry.fly.io에 필요한 인증 토큰으로 ~/.docker/config.json을 업데이트해요. 인증이 끝나면 이미지를 push하세요:

docker push registry.fly.io/<your-app-name>:<your-tag>

이미지 배포

이미지가 호스팅된 위치에 따라 Fly.io 레지스트리 또는 공개 레지스트리에서 이미지를 배포할 수 있어요.

Fly.io의 레지스트리에 push한 프라이빗 이미지를 배포하려면:

fly deploy 명령에 --image 옵션을 사용하세요:

fly deploy --app <your-app-name> --image registry.fly.io/<your-app-name>:<your-tag>

Docker Hub 또는 다른 공개 레지스트리의 공개 이미지를 배포하려면:

fly.toml 파일에 이미지를 지정하세요:

[build]
  image = "flyio/hellofly:latest"

앱 간 이미지 재사용

레지스트리 URL은 앱별로 구성되지만, 접근 권한은 조직별로 적용돼요. 이는 이미지를 registry.fly.io/app-1에 push하고 두 앱이 같은 Fly.io 조직에 있다면 다른 앱(예: app-2)에서 사용할 수 있다는 뜻이에요:

fly deploy --app app-2 --image registry.fly.io/app-1:tag

이 패턴은 한 번 빌드하고 여러 번 배포하는 SaaS 플랫폼에 유용해요.

이미지 존재 확인

Docker를 사용해 배포하지 않고 Fly 레지스트리에 이미지가 존재하는지 확인할 수 있어요:

docker manifest inspect registry.fly.io/my-app-name:my-tag

이 명령은 이미지가 존재하면 데이터를 반환하고, 없으면 코드 1로 종료해요. 앞서 fly auth docker로 인증을 해야 해요.

대부분의 워크플로우에서는 Fly Docker 레지스트리와 함께 fly deploy --image 옵션을 사용하세요. 멀티 앱 SaaS 프로비저닝 같은 고급 흐름에서는 docker manifest inspect로 이미지 태그를 추적하거나 Machine과 연결해 유지하세요.

이미지 태그 목록 보기

레지스트리의 모든 이미지 태그를 나열하는 API나 GraphQL 쿼리는 없어요. 태그는 릴리스의 일부가 될 때만 Fly에게 보여요. 배포된 이미지 참조는 다음으로 볼 수 있어요:

fly releases -a my-app-name --image

GraphQL API로 릴리스를 조회한다면 다음 쿼리 형식을 사용하세요:

{
  "query": "query($appName: String!, $limit: Int!) { app(name: $appName) { releases: releasesUnprocessed(first: $limit) { nodes { id version description reason status imageRef stable user { id email name } createdAt } } } }",
  "variables": {
    "appName": "my-app-name",
    "limit": 25
  }
}

이것은 과거 배포에서 사용된 이미지만 반환해요.

관련 사용 사례

공유 레이어와 사전 설치된 의존성으로 배포를 최적화하고 싶나요? 더 빠른 배포를 위한 base 이미지 사용 블루프린트를 확인해 보세요.

  • Dockerfile로 배포하기 Dockerfile에서 앱을 배포하는 일반 가이드 — base 이미지를 빌드할 때 유용한 맥락이에요.
  • 앱 구성 (fly.toml) fly.toml이 빌드, 이미지, 배포를 어떻게 오케스트레이션하는지에 대한 자세한 내용.

더 알아보기 (Learn more)