Docker 저장소 동기화

  • Post author:
  • Post category:칼럼
  • Post comments:0 Comments
  • Post last modified:January 11, 2021

Docker Hub 저장소를 GitHub Private Registry로 동기화한다던가, 그 반대로 한다던가. 이런 작업이 왜 필요한가?

  • 저장소 마이그레이션을 시간을 두고 차분하게 진행하려고
  • 백업 저장소가 필요한 까닭에
  • 기타 등등

동기화 솔루션은 널려 있고 고도의 복잡도가 있는 작업도 아니니 대체로 잘 작동하리라 믿는다. xelalexv/dregsy: Keep Docker registries in sync 는 내가 쓰기에 나쁘지 않고 굳이 다른 솔루션까지 테스트해볼 생각은 안 들었다.

Kubernetes에 dregsy를 띄우는 예제가 있고 설정이 복잡하지 않기 때문에 공식문서로 충분하리라 보지만 편의상 예를 들어보자. 우선 Docker Hub의 저장소 두 개를 GitHub Private Registry로 가져오는 예이다.

apiVersion: v1
kind: Secret
metadata:
  name: dregsy
  namespace: playground
type: Opaque
stringData:
  config.yaml: |-
    relay: skopeo
    tasks:
      - name: task1
        interval: 60
        verbose: true
        source:
          registry: registry.hub.docker.com
          auth: BASE64_ENCODED_OF_{"username": "my_id", "password": "my_token"}
        target:
          registry: docker.pkg.github.com
          auth: auth: BASE64_ENCODED_OF_{"username": "my_id", "password": "my_token"}
        mappings:
          - from: unchartedsky/macgyver
            to: unchartedsky/macgyver/macgyver
            tags: ['latest']
          - from: unchartedsky/discourse
            to: unchartedsky/discourse/discourse
            tags: ['latest' , 'develop', 'master']

relay 값을 docker로 지정하면 도커 엔진을 쓰지만 구태여 그럴 필요가 없다. containers/skopeo 는 도커 엔진 없이도 충분히 잘 작동하고 저장소 복제하는데 별다른 문제가 없기 때문이다.

이제 dregsy를 띄우면 되는데 대체로 공식 문서에서 손댈 부분이 별로 없다. ConfigMap을 가져와서 마운트하는 부분만 추가했다. 참고로 LOG_LEVELdebug 정도는 되어야 작업이 실패했을 때 원인을 파악하기 쉽다.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: dregsy
  labels:
    app: dregsy
spec:
  selector:
    matchLabels:
      app: dregsy
  serviceName: dregsy
  replicas: 1
  template:
    metadata:
      labels:
        app: dregsy
    spec:
      containers:
      - name: dregsy
        image: xelalex/dregsy
        command: ['dregsy', '-config=/config/config.yaml']
        env:
        - name: LOG_LEVEL
          value: debug
        resources:
          requests:
            cpu: 10m
            memory: 32Mi
          limits:
            cpu: 2000m
            memory: 2048Mi
        volumeMounts:
        - name: dregsy-config
          mountPath: /config/config.yaml
          subPath: config.yaml
      volumes:
      - name: dregsy-config
        secret:
          secretName: dregsy
          items:
            - key: config.yaml
              path: config.yaml

Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments