본문 바로가기

Cloud/Docker

내 DOCKER 저장소 만들기

 회사 서버에 존재하던 저장소가 닫혀서 울고 있자 직접 구축해서 관리하라고 미션을 주셨다. 감사한 마음으로 진행한다.

- docker version : 18.09.7 / OS : Ubuntu 16.04

- 먼저 도커 레지스트리 이미지를 가져온다.

docker pull registry:latest

- 가져온 이미지를 확인해보자.

docker image ls | grep registry

registry                                       latest              f32a97de94e1        6 months ago        25.8MB

- /etc/init.d/docker 파일을 열어서 옵션을 추가해준다.

vi /etc/init.d/docker

DOCKER_OPTS=--insecure-registry <IP혹은 LOCALHOST>:5000

아래 링크를 보면 Ubuntu 14대에서는 이런 방법을 사용해야했고 이제는 레지스트리만 추가하면 된다는데 혹시 몰라서 두 개 다 설정해주었다.

https://nickjanetakis.com/blog/docker-tip-50-running-an-insecure-docker-registry

 

Docker Tip #50: Running an Insecure Docker Registry

Running an insecure registry isn't recommended but sometimes it's the easiest and most reasonable solution. Here's how to do it.

nickjanetakis.com

- daemon에도 저장해준다. 이 것을 지정해주지 않으면 외부 저장소를 이용할 수 없다.

vi /etc/docker/daemon.json

"insecure-registries": ["<IP:PORT>"]

컴마를 통해 여러 저장소도 저장이 된다. 이후 도커를 재시작해준다.

service docker restart

 참으로 고맙게도 도커 재시작하면 컨테이너 의존성 때문에 하나하나 다 다시 올려야해서 ... 고민을 많이 했다. ceph가 삑나서 어차피 한 번 밀어줘야 하는데 하고 그냥 했다.

- 컨테이너를 실행시키고 잘 돌아가는지 확인해본다.

docker run --name local-registry -d -p 5000:5000 registry

a4f5702fc21d        registry                                   "/entrypoint.sh /etc…"   28 minutes ago      Up 28 minutes       0.0.0.0:5000->5000/tcp   local-registry

- 이제 이미지를 등록해본다. 난 무난하게 registry를 등록하고 싶었고 먼저 태그명을 바꿔주었다.

docker tag registry:latest <IP:PORT>/registry:latest
docker image ls | grep registry

<IP:PORT>/registry                      latest              f32a97de94e1        6 months ago        25.8MB
registry                                       latest              f32a97de94e1        6 months ago        25.8M

- push 명령어를 통해 registry를 올려준다.

docker push <IP:PORT>/registry:latest

The push refers to repository [<IP:PORT>/registry]
73d61bf022fd: Pushed 
5bbc5831d696: Pushed 
d5974ddb5a45: Pushed 
f641ef7a37ad: Pushed 
d9ff549177a9: Pushed 
latest: digest: sha256:b1165286043f2745f45ea637873d61939bff6d9a59f76539d6228abf79f87774 size: 1363

- 확인하는 방법은 여러가지가 있지만 curl을 통해 먼저 확인해본다.

curl -X GET <IP:PORT>/v2/_catalog

{"repositories":["registry"]}

- 다른 노드에서 직접 다운받는 방법도 있다. 이 때에도 역시 /etc/docker/daemon.json에 저장소를 등록해주어야 한다.

vi /etc/docker/daemon.json 
service docker restart
docker pull <IP:PORT>/registry:latest

latest: Pulling from registry
c87736221ed0: Pull complete 
1cc8e0bb44df: Pull complete 
54d33bcb37f5: Pull complete 
e8afc091c171: Pull complete 
b4541f6d3db6: Pull complete 
Digest: sha256:b1165286043f2745f45ea637873d61939bff6d9a59f76539d6228abf79f87774
Status: Downloaded newer image for <IP:PORT>/registry:latest

docker image ls | grep registry

<IP:PORT>/registry                      latest              f32a97de94e1        6 months ago        25.8MB

- 여담으로 도커는 이미지를 tar.gz 로 만들어준다.

image -> tar

docker save -o [파일명] [이미지명]

tar -> image

docker load -i [파일명]

- 실제로 해보면 이런 느낌이다.

docker save -o registry.tar <IP:PORT>/registry
ls

registry.tar

docker load -i registry.tar 

Loaded image: <IP:PORT>/registry:latest

- 이러면 끝~!