04. docker-registry 설치

루다소프트·2019년 12월 6일
1

1. YAML 파일 가져오기

설치를 위해, 사전에 작성해 둔 YAML 파일들을 가져옵니다.

git clone https://github.com/rudasoft/pipeline.git
cd pipeline

2. docker-registry-pv.yaml 수정

apiVersion: v1
kind: PersistentVolume
metadata:
  name: docker-registry-pv
  namespace: pipeline
spec:
  storageClassName: docker-registry-pv
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 20Gi
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /host_mnt/d/data/docker-registry/

3. PersistentVolume 생성

Kubernetes 에서 실제 물리적 디스크를 PersistentVolumeClaim 과 PersistentVolume 을 통해 사용합니다. 이전 수정한 설정 파일로 PersistentVolume 을 생성하고 확인합니다.

kubectl create -f docker-registry-pv.yaml
kubectl get pv --namespace=pipeline
kubectl describe pv docker-registry-pv --namespace=pipeline

4. Docker imagePullSecrets 생성

Docker Registry 에 로그인 계정 정보를 만들고 저장하기 위해서, Kubernetes 의 Secret 를 사용합니다.

kubectl create secret docker-registry docker-registry-users --namespace=pipeline --docker-server=registry.pipeline.internal --docker-username=admin --docker-password=admin --docker-email=developers@rudasoft.com

5. host 파일 수정

Docker Registry Secret 생성 에서 docker server 의 도메인을 registry.pipeline.internal 으로 설정하였습니다. 해당 도메인이 Host 머신을 가르킬 수 있도록 host 파일을 수정해야 합니다.
127.0.0.1 으로 설정하는 경우, connection refuesed 오류가 나게 됩니다. host 파일에 본인의 실제 IP를 맵핑하여 호스트 머신을 찾을 수 있도록 하였습니다.

  • C:\Windows\System32\drivers\etc\hosts 파일 (본인 IP 로 수정 필요)
192.168.43.183	registry.pipeline.internal 

6. docker-registry-values.yaml 수정

  • 이전 생성한 imagePullSecrets 을 설정합니다.
imagePullSecrets:
  - name: "docker-registry-users"
  • 이전 생성한 PersistentVolume 을 설정합니다.
persistence:
  accessMode: "ReadWriteOnce"
  enabled: true
  size: 10Gi
  storageClass: "docker-registry-pv"

7. Docker Registry 설치

Docker Registry 를 설치 후 확인합니다.

helm install docker-registry stable/docker-registry -f docker-registry-values.yaml --namespace=pipeline
kubectl get pods --namespace=pipeline

정상적으로 설치가 되었다면 docker-registry pod 이 Running 상태가 됩니다.

8. Service 생성

Kubernetes 에서는 pod 들에 접근하기 위한 정책을 정의한 추상적 개념을 Service 를 통해 관리합니다. Running 상태가 된 Docker Registry pod에 접근하기 위해서 Service 를 생성합니다.

kubectl expose deployment docker-registry --type=LoadBalancer --name=docker-registry-svc --namespace=pipeline
kubectl get svc --namespace=pipeline

9. Docker Daemon 설정

Private Docker Registry 의 설치는 완료되었지만, docker pull, push 등을 사용하기 위해서는 https 설정이 되어야 합니다. 지금은 http 만 설정된 상황이므로, Docker Daemon 설정을 수정하여 registry.pipeline.internal 도메인에 대한 http를 허용합니다.

9. Docker Push 테스트

  • Docker Hub 에서 hello-world 이미지를 받습니다.
docker pull hello-world 
  • hello-world 이미지의 tag 를 변경합니다.
docker tag hello-world registry.pipeline.internal:5000/hello-world 
  • Private Docker Registry에 로그인 합니다. (4번 에서 만든 정보로 로그인)
docker login registry.pipeline.internal
Username: admin
Password: admin
  • 변경한 tag 로 이미지를 push 합니다.
docker push registry.pipeline.internal:5000/hello-world 
profile
루다소프트 기술 블로그입니다.

0개의 댓글