본문 바로가기
가상화/docker

#6 docker - Private 이미지 저장소

by gntpapa 2019. 11. 25.
 내부 저장소를 만들어 운영하면, 내부 정책에 따라서 접근제어 및 이미지를 관리할 수 있습니다. 내부 저장소는 docker에서도 컨테이너 이미지로도 제공하고 있지만, gitlab, maven에서도 기능 추가로도 사용이 가능합니다. 관리자가 운영하기 편한 방식을 선택해서 사용하시면 됩니다.
도커에서 제공하는 공식 사이트는 다음과 같습니다.
 

Docker Registry

Looking for Docker Trusted Registry? Docker Trusted Registry (DTR) is a commercial product that enables complete image management workflow, featuring LDAP integration, image signing, security scanning, and integration with Universal...

docs.docker.com

 
저장소도 도커로 쉽게 구성이 가능합니다. 아래 명령어를 실행하면 저장소 구성이 완료 됩니다.
 
$ docker run -d -p 5000:5000 --restart=always -e REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data -v ${PWD}/data:/data --name registry registry:2
 
 이미지 저장 공간은 filesystem으로 설정이 되어 있으며, 경로는 현재 경로 밑에 data폴더 밑으로 이미지가 저장되게 됩니다. -e 옵션은 docker 내부 환경변수에 값을 지정하는 옵션입니다. 공식 사이트를 찾아보면 `REGISTRY_config Name = xx` 형식으로 구성 옵션을 업데이트할 수 있습니다. 설정에 따라서 S3, swift  등등 저장 공간으로 변경이 가능합니다. 추가적인 내용은 아래 사이트에서 확인이 가능합니다.
 

Configuring a registry

The Registry configuration is based on a YAML file, detailed below. While it comes with sane default values out of the box, you should review it exhaustively before moving your...

docs.docker.com

 
구성된 저장소에 이미지를 업로드를 해보자. public에 업로드 한것과 방법은 동일하지만, 이미지 이름에 대해서 확인이 필요합니다. (이미지이름: 저장소:5000/이미지 이름 )
    • 저장소:5000 : 저장소 IP/포트. ssl 443 포트로 구성했다면, 포트번호 없이 저장소만 지정하면 됩니다.
      • 이미지 이름 변경 방법
docker tag 원본이미지 변경이미지
 
 
>Tag가 있을 경우
docker tag 원본이미지:tag 변경이미지:tag
 
    • 이미지 push
[root@gntpapa dcrepo]# docker push gntpapa:5000/test
The push refers to repository [gntpapa:5000/test]
e98ac114f465: Layer already exists
7d70e7e2b577: Layer already exists
e16e85ab0d1c: Layer already exists
3306e78953c4: Layer already exists
e1bf5d5abc66: Layer already exists
afd546bf229f: Layer already exists
96434e685f74: Layer already exists
1fc2fcf4cfeb: Layer already exists
2c61e65ccfbc: Layer already exists
24988a63af45: Layer already exists
e129090bea45: Layer already exists
cc1df1d557f2: Layer already exists
96049201c093: Layer already exists
2bf9e4461d5c: Layer already exists
4c1e27ed455f: Layer already exists
91d1787a48d9: Layer already exists
df64d3292fd6: Layer already exists
0.1: digest: sha256:b7f5eb6b80ed806c0ad26ee0ccc75ad6e085eea67526762a0d040dc80c7ada29 size: 3861
e98ac114f465: Layer already exists
7d70e7e2b577: Layer already exists
e16e85ab0d1c: Layer already exists
3306e78953c4: Layer already exists
e1bf5d5abc66: Layer already exists
afd546bf229f: Layer already exists
96434e685f74: Layer already exists
1fc2fcf4cfeb: Layer already exists
2c61e65ccfbc: Layer already exists
24988a63af45: Layer already exists
e129090bea45: Layer already exists
cc1df1d557f2: Layer already exists
96049201c093: Layer already exists
2bf9e4461d5c: Layer already exists
4c1e27ed455f: Layer already exists
91d1787a48d9: Layer already exists
df64d3292fd6: Layer already exists
latest: digest: sha256:b7f5eb6b80ed806c0ad26ee0ccc75ad6e085eea67526762a0d040dc80c7ada29 size: 3861
 
 
push한 이미지를 검색 하려면 curl을 사용해서 조회하시면 됩니다.
{"name":"test","tags":["latest","0.1"]}
 
 
 
저장소에 이미지를 다운로드 하는 것도 public에서 받는 방법과 동일합니다. 다만, 저장소에 ssl 설정이 되어 있지 않으면 client에서 insecure 설정을 해야 합니다. 설정을 하지않고 이미지를 받을 경우 아래와 같이 에러가 발생합니다.
[root@gntpapa02 ~]# docker pull gntpapa:5000/test
Using default tag: latest
Error response from daemon: Get https://gntpapa:5000/v2/: http: server gave HTTP response to HTTPS client
 
  • Insecure 설정 방법 (설정 후 docker service 재시작)
[root@gntpapa02 ~]# vi /etc/docker/daemon.json
{
    "insecure-registries": [
        “gntpapa:5000”
    ]
}
 
   
 
이후 docker pull을 진행하면 정상적으로 이미지 다운로드가 가능합니다.
[root@gntpapa02 ~]# docker pull gntpapa:5000/test
Using default tag: latest
latest: Pulling from test
4fe2ade4980c: Pull complete
2958cef2c4a1: Pull complete
f258dfc84aaf: Pull complete
4fb5eec58a23: Pull complete
e26ea6ff4a8b: Pull complete
9446f1fdd28a: Pull complete
cc961e53b132: Pull complete
a5170fde12cf: Pull complete
e0294020cf55: Pull complete
a0187fc61208: Pull complete
9d698b87dfb1: Pull complete
4f383bfe05fa: Pull complete
825862a67100: Pull complete
0c2d84b02aea: Pull complete
ada62d9b8641: Pull complete
aba7f1258f8f: Pull complete
e65e978f9479: Pull complete
Digest: sha256:b7f5eb6b80ed806c0ad26ee0ccc75ad6e085eea67526762a0d040dc80c7ada29
Status: Downloaded newer image for gntpapa:5000/test:latest
gntpapa:5000/test:latest
 
ssl 설정을 하지 않고도 사용이 가능하지만, 모든 서버에 insecure 설정을 해야합니다. 요즘 Let’s Encrypt 같은 무료 ssl도 사용이 가능하니, 되도록이면 ssl 설정 후 사용하는것을 권장드립니다.
내부 저장소 구성은 완료되었으나, 관리하기는 쉽지않게 느껴진다. 이미지를 검색하거나 삭제하기 위해서 curl을 매번 날리는 것도 그렇고 사용자 관리등이 쉽지 않다. 인터넷에 검색하면 도커 웹 UI를 찾을 수 있습니다. 해당 컨테이너를 추가로 구성하면 좀 더 쉽게 저장소 관리가 가능해집니다.