로그인 기능을 추가한 docker private registry를 구축한 내용 정리
Docker 이미지 저장소로 크게 2가지 종류로 나눌 수 있다.
dpr (docker private registry) 서버 세팅
# 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
컨테이너 띄우기
[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
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
# 사용자 정보 담을 파일 경로 생성
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
로컬
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
[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
[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
사용자 추가하면 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 구축법 및 사용법을 찾아야한다.