Docker Private Registry - 1

zuckerfrei·2023년 1월 8일
0
post-thumbnail

0. 요약

로그인 기능을 추가한 docker private registry를 구축한 내용 정리

 


1. Docker Registry

Docker 이미지 저장소로 크게 2가지 종류로 나눌 수 있다.

public registry

  • public하게 접근 가능한 이미지 저장소
  • 예시) docker.io

private registry

  • private하게 구축한 이미지 저장소
  • 예시) docker(private registry), cloud(ECR, GCR, ACR) 등등

 

2. private registry

  • 단순하게 이미지 등록소만 필요할 경우 사용 가능
  • 관리가 필요할 경우에는 nexus, harbor쓰는 것이 좋음

 

3. 설치

1) 서버 준비

  • NCP > centOS 7.8
  • registry서버 : dpr-server
  • client 서버 : client-server
  • 서버 간의 방화벽 세팅 (client -> dpr)

 

2) docker 설치 참조

  • dpr (docker private registry) 서버 세팅

    • /etc/docker/daemon.json 파일 생성
      # private IP 입력해야 작동했음
      { "insecure-registries": ["10.41.xx.xx:5000"]}
    • 재시작
      systemctl restart docker.service
    • 설정 변경 확인
      ```
      [admin@dpr-server repositories]$ docker info
              
      ...
      Insecure Registries:
      10.41.xx.xx:5000
      127.0.0.0/8
      ...
      
      ```
      올바른 경로로 registry에 업로드하기 위해 입력하는 ip인듯
  • client 서버 세팅

    • /etc/docker/daemon.json 파일 생성

      # dpr의 public IP 입력해야 작동했음
      { "insecure-registries": ["27.96.xx.xx:5000"]}
    • 재시작

      systemctl restart docker.service
    • 설정 변경 확인

      [admin@client-server ~]$ docker info
               
      ...
      Insecure Registries:
      27.96.xx.xx:5000
      127.0.0.0/8
      ...
    • 추가) daemon.json파일에 ip및 포트를 다르게 입력하면 docker pull 명령어가 먹지 않음

      # 오타내기 5000 -> 5001
      { "insecure-registries": ["27.96.xx.xx:5001"]}
              
      [admin@client-server ~]$ docker pull 27.96.xx.xx:5000/test:2.0
      Error response from daemon: Get "https://27.96.xx.xx:5000/v2/": http: server gave HTTP response to HTTPS client

 

3) registry 설치

  • 컨테이너 띄우기

    [admin@dpr-server ~]$ docker run -d --name test --restart=always -p 5000:5000 -v /home/admin/registry_data:/var/lib/registry registry
  • tag : 태그 붙이기

    [admin@dpr-server repositories]$ docker tag httpd 10.41.xx.xx:5000/test:1.0
          
    [admin@dpr-server repositories]$ docker images
    REPOSITORY                TAG       IMAGE ID       CREATED       SIZE
    10.41.xx.xx:5000/test     1.0       73c10eb9266e   2 weeks ago   145MB
    httpd                     latest    73c10eb9266e   2 weeks ago   145MB
    registry                  latest    81c944c2288b   7 weeks ago   24.1MB
  • push : registry에 image 등록

    [admin@dpr-server repositories]$ docker push 10.41.xx.xx:5000/test:1.0
    The push refers to repository [10.41.xx.xx:5000/test]
    eeed9f7c3966: Layer already exists
    e4e39a1ab63d: Layer already exists
    7f754426121f: Layer already exists
    28a8796736c9: Layer already exists
    8a70d251b653: Layer already exists
    1.0: digest: sha256:753edbf6bf19a74c580c57f7d98e05b6b34073adc929234da6eb193a8029ab91 size: 1366
  • registry에 image 등록 확인

    [admin@dpr-server repositories]$ docker images
    REPOSITORY                TAG       IMAGE ID       CREATED       SIZE
    10.41.xx.xx:5000/test     1.0       73c10eb9266e   2 weeks ago   145MB
    httpd                     latest    73c10eb9266e   2 weeks ago   145MB
    registry                  latest    81c944c2288b   7 weeks ago   24.1MB
  • dpr에서 가져온 이미지 확인

    [admin@client-server ~]$ docker pull 27.96.xx.xx:5000/test:1.0
    1.0: Pulling from test
    3f4ca61aafcd: Pull complete
    2e3d233b6299: Pull complete
    6d859023da80: Pull complete
    f856a04699cc: Pull complete
    ec3bbe99d2b1: Pull complete
    Digest: sha256:753edbf6bf19a74c580c57f7d98e05b6b34073adc929234da6eb193a8029ab91
    Status: Downloaded newer image for 27.96.xx.xx:5000/test:1.0
    27.96.xx.xx:5000/test:1.0
          
    [admin@client-server ~]$ docker images
    REPOSITORY                TAG       IMAGE ID       CREATED       SIZE
    27.96.xx.xx:5000/test     1.0       73c10eb9266e   2 weeks ago   145MB

     

4) registry web ui 붙이기

  • 컨테이너 띄우기
    docker run -itd \
    --name=web-registry \
    -p 8080:8080 \
    -e REGISTRY_URL=http://10.41.xx.xx:5000/v2 \
    -e REGISTRY_NAME=27.96.xx.xx:5000 \
    --link test \
    hyper/docker-registry-web

 

5) registry 암호 설정

  • 네트워크 방화벽으로 어느 정도 보안을 관리할 수 있지만,
    보안 강화를 위해 로그인 해야만 pull / push 가능하도록 설정 참조
    # 사용자 정보 담을 파일 경로 생성
    cd ~
    mkdir registry_auth
          
    # 사용자 정보담은 파일 생성
    docker run --entrypoint htpasswd httpd -Bbn {user} {password} > /home/admin/registry_auth/htpasswd
          
    # registry 컨테이너 띄우기
    docker run -d \
    --name dpr \
    --restart=always \
    -p 5000:5000 \
    -v /home/admin/registry_data:/var/lib/registry \
    -v /home/admin/registry_auth:/auth \
    -e "REGISTRY_AUTH=htpasswd" \
    -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
    -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
    registry
     

4. 테스트

1) 로그인

  • 로컬

    docker login  localhost:5000 -u {user} -p {password}
  • remote

    [admin@client-server ~]$ docker login  27.96.xx.xx:5000 -u {user} -p {password}
    WARNING! Using --password via the CLI is insecure. Use --password-stdin.
    WARNING! Your password will be stored unencrypted in /home/admin/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    
    Login Succeeded

     

2) pull테스트

  • 버전1 땡겨와지는 것 확인
    [admin@client-server ~]$ docker pull 27.96.xx.xx:5000/test:1.0
    1.0: Pulling from test
    Digest: sha256:753edbf6bf19a74c580c57f7d98e05b6b34073adc929234da6eb193a8029ab91
    Status: Downloaded newer image for 27.96.xx.xx:5000/test:1.0
    27.96.xx.xx:5000/test:1.0
    [admin@client-server ~]$ docker images
    REPOSITORY                TAG       IMAGE ID       CREATED       SIZE
    27.96.xx.xx:5000/test     1.0       73c10eb9266e   2 weeks ago   145MB
    27.96.xx.xx:5000/test     2.0       73c10eb9266e   2 weeks ago   145MB
    없는 이미지 땡기면 에러
    [admin@client-server ~]$ docker pull 27.96.xx.xx:5000/test:3.0
    Error response from daemon: manifest for 27.96.xx.xx:5000/test:3.0 not found: manifest unknown: manifest unknown

 

3) push테스트

[admin@client-server ~]$ docker tag 27.96.xx.xx:5000/test:1.0 27.96.xx.xx:5000/test:1.1
    
[admin@client-server ~]$ docker images
REPOSITORY                TAG       IMAGE ID       CREATED       SIZE
27.96.xx.xx:5000/test     1.0       73c10eb9266e   2 weeks ago   145MB
27.96.xx.xx:5000/test     1.1       73c10eb9266e   2 weeks ago   145MB
27.96.xx.xx:5000/test     2.0       73c10eb9266e   2 weeks ago   145MB
    
[admin@client-server ~]$ docker push 27.96.xx.xx:5000/test:1.1
The push refers to repository [27.96.xx.xx:5000/test]
eeed9f7c3966: Layer already exists
e4e39a1ab63d: Layer already exists
7f754426121f: Layer already exists
28a8796736c9: Layer already exists
8a70d251b653: Layer already exists
1.1: digest: sha256:753edbf6bf19a74c580c57f7d98e05b6b34073adc929234da6eb193a8029ab91 size: 1366

 

4) 저장된 이미지 정보확인

사용자 추가하면 web-ui 사용에 제한이 생기는데, 어떻게 해결해야 할지 찾아봐야 한다.
일단 cli 사용해도 private registry에 저장된 이미지 정보를 조회할 수 있다.

  • 이미지 리스트
    C:\Users\user> curl --user {user}:{password} --cacert server.crt -X GET http://27.96.xx.xx:5000/v2/_catalog
    {"repositories":["auth","fhir","meta","test","tutorial-actions"]}
  • 이미지 태그 리스트
    C:\Users\user> curl --user {user}:{password} --cacert server.crt -X GET http://27.96.xx.xx:5000/v2/tutorial-actions/tags/list
    {"name":"tutorial-actions","tags":["1.0","1","0.1"]}

 


로그인 가능한 web-ui 구축법 및 사용법을 찾아야한다.

profile
무설탕 음료를 좋아합니다

0개의 댓글