ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ private docker registry ] 비공개 도커 허브 구축 / 나만의 , 회사의 도커 registry 를 만들어 보자.
    개발일지/docker 2020. 8. 11. 11:46

    안녕하세요 개발하는 남자 개남입니다.

     

    지난번까지 해봤던 내용 중에 docker image를 도커 허브에서 제공하는 공개 registry에 이미지를 등록하고 다운받아 사용하는 방법에 대해서 다뤄 본 적이 있습니다. 혹시 못 보신 분이 있다면 한번 보셔도 될 것 같습니다. 

     

     

     

    간단한 오픈형 도커 이미지는 도커 허브에 등록해서 사용해도 되겠지만 사실상 프로젝트 단위의 이미지를 공개된 장소에 등록한다는 것은 보안상으로도 맞지 않습니다. 그래서 도커에서는 비공개 도커 허브를 구축할 수 있도록 registry 이미지를 제공하고 있습니다.(참 친절합니다 :) )

    registry 이미지로 docker run 명령을 통해 몇초만에 구축이 완료됩니다. 

    $ docker run --name my-registry -p 5000:5000 registry:2

    하지만 이것 만으로는 local 환경에서 밖에 사용하지 못합니다. 보통은 저장소를 내부에 구성을 하고 개발 서버나 라이브 서버에서 저장소에 접근해서 이미지를 갖고 가서 사용을 해야 하는데 그렇게 하기 위해서는 Openssl 인증을 통해서 접근을 해야 합니다. 여기서부터 귀찮아지기 시작하죠. 

     

    나는 귀찮게 구축하지 않고 이미 구축되어진 서비스를 이용하겠다 하시는 분들은 AWS ellastic container registry 서비스를 돈 주고 이용하시면 됩니다. (방법도 간단합니다.) AWS를 이용하는 방법에 대해서는 다음에 기회가 되면 정리하도록 하겠습니다. 

     

    자! 그럼 원격서버에서 접근하여 도커 이미지를 제공할 수 있는 나만의 저장소를 구축하는 방법에 대해서 알아보겠습니다. 글 보다 영상으로 보기 원하시는 분들은 하단에 제 유튜브 영상을 보시면 도움이 되실 것입니다. 

     

     

     

    1. Openssl 인증서 만들기 

    구축을 하고자 하는 서버에 원하시는 폴더를 만들어서 그곳에 key를 만들어 줍니다. (저는 /docker_repository/certs/ 폴더에 관리 하겠습니다.)

    $ openssl req -newkey rsa:4096 -nodes -sha256 -keyout ./domain.key -x509 -days 365 -out ./domain.crt

    키 생성에 필요한 정보들이 있습니다.

    Country Name : 국가 코드 

    State or Province Name : 주 or 도 이름

    Locality Name : 도시 이름

    Organization Name : 회사 이름 혹은 조직 이름 

    Organizational Unit Name : 조직의 파트 이름

    Common Name : 서버에 접속할 도메인을 적는다. 

    Email Address : 담당자 이메일 

     

    국가 코드는 KR로 입력하고 Common Name 은 registry.sudarlife.site라는 도메인을 갖고 있고 연결해 놨기 때문에 이 부분에 적어줬습니다. 입력이 완료되면 -keyout 경로로 domain.crt 파일과 domain.key 가 만들어진 것을 확인할 수 있습니다. domain.crt 키를 사용하면 원격 서버에서 registry.sudarlife.site 도메인으로 접근할 수 있게 될 것입니다.

     

     

     

    2. docker-compose 파일 만들기 

    docker run 명령으로도 충분히 registry를 띄울 수 있습니다. 명령어는 아래와 같습니다.

    $ docker run -d -p 5000:5000 \
    -v /home/ubuntu/docker_data/images:/var/lib/registry \
    -v /home/ubuntu/docker_data/certs:/certs \
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
    -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
    --name docker-registry \
    registry:2

    볼륨 2개를 연결하였고 환경변수로 두 개의 키를 잡아줬습니다. 볼륨 2개 중 하나는 registry image 들을 저장하는 저장소가 되고 나머지 하나는 인증키가 있는 경로로 잡아주면 됩니다.  

    하지만 , 저는 개인적으로 run 명령으로 관리하지 않고 docker-compose로 관리하는 것을 선호합니다. 이유는 run 명령어는 시간이 지나면 잊어버리기 때문에 compose 파일로 관리 하는 편입니다.

    compose yaml 파일도 간단합니다.

    version : "3.3"
    services:
      registry:
        restart: always
        image: registry:2
        ports:
          - 5000:5000
        environment:
          REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
          REGISTRY_HTTP_TLS_KEY: /certs/domain.key
        volumes:
          - ./images:/var/lib/registry
          - /home/ubuntu/docker_registry/certs:/certs

    위 docker-compose.yml 파일을 통해 `docker-compose up -d` 명령으로 registry를 켜주면 구축은 완료가 됩니다.

     

     

     

     

    3. 원격 서버 key 등록

    1번 절차를 통해서 만들어진 domain.crt 키 파일을 원격 서버에 도커 인증서 관리되는 곳에 배치시키면 됩니다. 그 위치는 다음과 같습니다. 

    $ /etc/docker/

    해당하는 경로에 certs.d/ 폴더를 생성해 줍니다. 

    $ mkdir ./certs.d/

    certs.d 폴더 내부로 이동하여 아까 키 생성 시 입력했던 도메인 폴더+포트로 폴더를 만들어 줍니다.

    $ mkdir ./registry.sudarlife.site:5000/

    만들어진 폴더 안에 domain.crt 키를 넣어주면 설정은 끝이 납니다.

     

     

     

     

    4. 나만의 저장소에 이미지 등록 및 다운로드 실행

    자 이제 모든 준비는 끝이 났습니다. 원하는 이미지를 올리고 받기만 하면 됩니다. 

    예제로 nginx:latest 파일을 등록하고 받도록 해보겠습니다. 

    우선 nginx:latest를 tag 명령을 통해 내가 원하는 경로의 이미지로 변경해줍니다. 

    (nginx:latest 이미지가 있다는 가정으로 진행하는 것입니다. 없다면 docker pull nginx:latest 명령을 통해 받아줍니다.)

    $ docker tag nginx:latest registry.sudarlife.site:5000/my-nginx:latest

    위 명령을 통해 nginx:latest 이미지로 registry.sudarlife.site:5000/my-nginx:latest 이미지가 생성된 것을 확인할 수 있습니다. 확인 명령어는 다음과 같습니다.

    $ docker images

    자 이제 올리고 내리는 명령을 해보도록 하겠습니다. 

    $ docker push registry.sudarlife.site:5000/my-nginx:latest  #이미지 올리기
    $ docker pull registry.sudarlife.site:5000/my-nginx:latest  #이미지 받기

     

     

     

    이 모든 과정을 영상으로 보시고 싶으신 분은 아래 유튜브 영상을 시청해주시면 됩니다. 

    ( 좋아요 / 구독 도 부탁드립니다 :) )

     

     

    댓글

Designed by Tistory.