DevOps/Docker & kubernetes

Docker Private Registry

치킨맛코드 2022. 8. 30. 11:39

Docker는 기본적으로 image를 가져오거나, 이 이미지를 tar파일로 생성하여 외부로 전달하는 등의 기능을 하고 있다. 이때 이러한 것들을 한 곳에 모아두고 효율적으로 관리를 하면 조금더 효율이 증대될 것이다.

이런 개념을 바탕으로 하여 나온것이 Docker Registry이다.

 

Registry는 Container Images를 저장하는 저장소이다. 2가지로 나뉘어 지는데, 인터넷을 이용한(public) Docker Hub와 사내 인프라를 활용하는(private) Private Registry가 있다. public한 환경은 아래의 글을 참조하자.

https://chicode.tistory.com/101

 

Docker Hub 저장소 활용하기

도커를 혼자서 사용하면 별 상관이 없겠지만 현업에서는 그러기가 굉장히 어렵다. 이것저것 챙길것도 많고, 개인 프로젝트가 아닌 팀협업을 하는 경우가 많은 만큼 허브저장소를 활용해서 같이

chicode.tistory.com

여러가지 이유로Private Registry를 사용할 수 있겠지만, 가장 큰 이유들로는 외부 인터넷을 사용할 수 없거나, 사내에서만 전용 Registry가 필요할때 사용할 수 있다. Docker에서 배포해주는 registry를 활용해서 구축할 수 있다.

아래의 명령어 1줄이면 docker registry를 실행할 수 있다.

$ docker run -d -p 5000:5000 --restart always --name registry registry:2
==> docker를 실행할(run) 것인데 벡그라운드 디태치(-d)로 할 것이며, 포트(-p)는
    5000번에서 들어와서 5000번으로 나가도록 하며,
    restart 정책은 항상(always), 이름은 registry이며 버전은 registry:2이다.

만들어진 컨테이너를 업로드 및 다운로드 하기 위해서는 반드시 image repository에 localhost:5000(포트 번호) 혹은 docker host name:5000(포트 번호) 을 부여해야 한다. 단 이때 80port를 사용한다면 생략할 수 있다.

 

아무것도 없는 도커 환경에서 registry를 실행해 보도록 하자. docker ps를 입력했을때 아무것도 없는것을 확인할 수 있다. 하지만 명령어를 실행한다면 registry가 있는것을 확인할 수 있다.

이 후 아래의 명령어를 따라 실행하자. 

$ sudo vi /etc/docker/daemon.json
==> deamon.json 파일을 수정해야한다. 없으면 생성된다.

#
{
"insecure-registries" : ["해당 저장소의 ip:5000"]
}
==> []값 내부를 수정해 주도록 하자.

# sudo systemctl restart docker
==> 파일을 만졌기 때문에 반드시 restart를 해 주도록 하자.

이 후 원하는 docker를 push하도록 하자. 잘 저장되는것을 확인할 수 있다.