[클라우드/Docker 기본(8) - 사설 저장소 이용하기(private-registry)]

SooYeon Yeon·2022년 8월 30일
1

클라우드 Docker

목록 보기
9/24

사설 저장소 만들기

이미지 저장소

먼저 인증 정보를 보내야 함

  1. public
  • docker hub
  • 불특정 다수가 접속 가능한 공간
  • 회원가입을 통해 이미지 push 가능
  • pull은 로그인이 없다면 IP 별로 하루에 100개 받을 수 있다.
  • 로그인 정보가 있다면 도커 허브에 접속시 config.json에 있는 정보를 먼저 보내서 인증정보를 확인 받음 (로그인 정보 있을 경우 IP가 아닌 사용자별로 100개 받을 수 있음)
  • docker login
  1. private
  1. local
  • 나만 사용한다.
  • 컨테이너 생성시 1차적으로 로컬 저장소를 검색한다.

사설 저장소

  • private-registry(이미지)를 이용하여 구축 가능
  • 이 이미지를 컨테이너로 배포하여 사용 가능
  • version 1 : python
  • version 2 : go
  • 일반적으로 version2 사용

[private-registry 공식 문서][https://docs.docker.com/registry/deploying/](https://docs.docker.com/registry/deploying/)

  1. registry 컨테이너 run
rapa@rapa:~/0819/board$ docker container run -d -p 5000:5000 --restart=always --name registry -v /home/rapa/registry:/var/lib/registry registry
f54dd62f569475196c9ae007f83a69c69dd87d48a9d169e44a7de3948f44d3ba

일반적으로 이미지의 이름은 아래와 같은 형식을 취해야한다.

  1. public
  • gildong/myweb:1.0
  • dockerhub의 ID가 들어간다.
  1. private
  1. local
  • myweb:1.0
  1. 이미지 tag (생성된 이미지를 도커 허브에 올리기)

localhost:5000 또는 211.183.3.114:5000으로 사용하면 된다.

rapa@rapa:~/0819/board$ docker tag centos:7 localhost:5000/mycentos:1.0
  1. push
rapa@rapa:~/0819/board$ docker push localhost:5000/mycentos:1.0
The push refers to repository [localhost:5000/mycentos]
174f56854903: Pushed 
1.0: digest: sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f size: 529
  1. 해당 장소에 이미지 올라와 있는 것 확인
rapa@rapa:~/0819/board$ ls /home/rapa/registry/docker/registry/v2/repositories/mycentos/
_layers  _manifests  _uploads
  1. 저장소를 curl을 이용해 조회
rapa@rapa:~/0819/board$ curl -XGET localhost:5000/v2/_catalog
{"repositories":["mycentos"]}
  1. hyper/docker-registry-web 이미지를 registry 컨테이너와 연결해서 사용
rapa@rapa:~/0819/board$ docker run -d -p 8080:8080 --name registry-web --link registry:private -e REGISTRY_URL=http://211.183.3.114:5000/v2 -e REGISTRY_NAME=211.183.3.114:5000 --restart=always hyper/docker-registry-web
64951382b09dcef1a6373979ee2fe02cf43366875d826d3d9a962bda8bf235bb
  1. 확인하기 (http://211.183.3.114:8080)

  1. 로컬 저장소에 있는 이미지 삭제
rapa@rapa:~/0819/board$ docker image ls
REPOSITORY                  TAG       IMAGE ID       CREATED         SIZE
xe                          1.0       7553b2134b08   3 hours ago     1.95GB
...
localhost:5000/mycentos     1.0       eeb6ee3f44bd   11 months ago   204MB
google/cadvisor             latest    eb1210707573   3 years ago     69.6MB
hyper/docker-registry-web   latest    0db5683824d8   5 years ago     599MB

rapa@rapa:~/0819/board$ docker image rm localhost:5000/mycentos:1.0
Untagged: localhost:5000/mycentos:1.0
Untagged: localhost:5000/mycentos@sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f
  1. 사설 저장소에서 pull 받아오기
rapa@rapa:~/0819/board$ docker pull localhost:5000/mycentos:1.0
1.0: Pulling from mycentos
Digest: sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f
Status: Downloaded newer image for localhost:5000/mycentos:1.0
localhost:5000/mycentos:1.0
  1. 확인하기
rapa@rapa:~/0819/board$ docker image ls
REPOSITORY                  TAG       IMAGE ID       CREATED         SIZE
xe                          1.0       7553b2134b08   3 hours ago     1.95GB
...
localhost:5000/mycentos     1.0       eeb6ee3f44bd   11 months ago   204MB
google/cadvisor             latest    eb1210707573   3 years ago     69.6MB
hyper/docker-registry-web   latest    0db5683824d8   5 years ago     599MB

실습 - 옆사람 사설저장소에서 다운

옆사람 IP : 192.168.1.124, 192.168.1.102

각자 registry만들고 옆사람한테 넘겨줌

192.168.1.x:5000/myweb:sooyeon (tag는 본인이름)

이미지만들때 기존엔 tag로 localhost:5000/mycentos:1.으로 했는데, 192.168.1.xxx(옆사람IP)로 등록해야함. 그러고 push하면 됨

  1. IP 변경

vmnet0으로 변경

rapa@rapa:~/0819/board$ sudo vi /etc/netplan/01-network-manager-all.yaml 
[sudo] password for rapa:
# Let NetworkManager manage all devices on this system
network:
  ethernets:
    ens32:
      addresses: [192.168.1.114/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 168.126.63.1]
      dhcp4: no
  version: 2
# renderer: NetworkManager
~
rapa@rapa:~/0819/board$ sudo netplan apply

insecure-registry : 보안상 좋지않음. 단, 편의를 위해서는 좋음

로컬에서 원격지에 있는 사설 저장소로 접속하기 위해서는 사설 저장소에 (인증정보)를 전달해야 한다. 인증정보는 config.json 파일에서 확인한다. 단, 없다면 해당 접근을 차단시킨다. insecure-registry는 인증정보가 없어도 접속하도록 허용하겠다는 뜻

docker처음 시작 시 적용하는 환경 구성 정보

sudo vi /etc/init.d/docker

DOCKER_OPTS=—insecure-registry

데몬이 시작될 때 읽어들이는 파일(없으면 새로 생성)

sudo vi /etc/docker/daemon.json

insecure-registries : [내가 접속하려는 IP(옆사람IP)]

사설 저장소 자체는 인증을 지원한다. (insecure쓰면 안하는 것)

인증 한다면

docker login을 해두어야 함. docker login https://옆사람주소:5000

login : user1

password : user1 결과는 conig.json에 등록됨

  1. insecure 설정
rapa@rapa:~/0819/board$ sudo vi /etc/init.d/docker
DOCKER_OPTS=--insecure-registry 192.168.1.124:5000 192.168.1.102:5000 # 허용할 상대 IP
rapa@rapa:~/0819/board$ sudo vi /etc/docker/daemon.json
{ "insecure-registries": ["192.168.1.124:5000", "192.168.1.102:5000"] }
  • 재시작
rapa@rapa:~/0819/board$ sudo service docker restart
  1. private registry 만들기
rapa@rapa:~/0819/board$ docker container run -d -p 5000:5000 --restart=always --name myweb -v /home/rapa/registry:/var/lib/registry registry
1b2478d343d1ab469a8f4773310c1c2ed5c26fa32aa0561713510a817c71ea32
  1. 이미지 tag
rapa@rapa:~/0819/board$ docker tag centos:7 192.168.1.124:5000/myweb:sooyeon
  1. push
rapa@rapa:~/0819/board$ docker push 192.168.1.124:5000/myweb:sooyeon
The push refers to repository [192.168.1.124:5000/myweb]
Get "https://192.168.1.124:5000/v2/": http: server gave HTTP response to HTTPS client
  1. 확인
rapa@rapa:~/0819/board$ curl -XGET 192.168.1.124:5000/v2/_catalog
{"repositories":["mycentos","myweb"]}

Harbor를 이용하는 방법은 다음에

0개의 댓글