정의

  • Docker Container Image를 저장하기 위한 저장소이다.
  • 기본적으로 hub.docker.com 에서 이미지를 다운로드 할 수 있고, 비공개된 저장소를 사용하려면 비용을 지불해야 합니다.
  • Docker에서 개인저장소를 구축할 수 있는 시스템을 공개하였고, 저장소 시스템을 Docker Registry라고 부릅니다.
  • Docker Registry 역시 Docker로 제작 되었습니다.

설치

Docker 레지스트리에는 로그인 기능이 없습니다. 따라서 Nginx의 기본 인증(Basic Authentication) 기능을 사용해야 합니다. HTTP 프로토콜에서는 인증을 지원하지 않으므로 반드시 HTTPS 프로토콜을 사용해야 합니다.

SSL 인증서

HTTPS를 사용하기 위해서는 SSL 인증서가 필요한데, 인증서가 없다면 아래의 명령어로 사설 인증서를 만들어서 등록해야 합니다. 사설 인증서 생성시 인증서 서명 요청(Certificate signing request) 파일을 생성하는데 아래의 필요한 정보를 입력해야합니다.

  • Country Name: 국가 코드입니다. 대문자로 KO를 입력합니다.
  • State or Province Name: 주 또는 도입니다. 자신의 상황에 맞게 입력합니다.
  • Locality Name: 도시입니다. 자신의 상황에 맞게 입력합니다.
  • Organization Name: 회사 이름을 입력합니다.
  • Organizational Unit Name: 조직 이름을 입력합니다.
  • Common Name: Docker Registry 실행하는 서버의 도메인입니다. 정확하게 입력하지 않으면 인증서를 사용해도 로그인할 때 에러가 발생합니다. 사용할 도메인을 docker.example.com 입력합니다.
  • Email Address: 이메일 주소입니다.

Step1

$ openssl genrsa -out docker.example.com.key 2048

Step2

$ openssl req -new -key docker.example.com.key -out docker.example.com.csr

Step3

$ openssl x509 -req -days 365 -in docker.example.com.csr -signkey docker.example.com.key -out docker.example.com.crt 

Step4

사설 인증서 사용시 다른 시스템에서 Docker Registry에 접근하기 위해 아래처럼 생성한 인증서를 등록해야 합니다.

Ubuntu 인증서 등록

$ sudo cp docker.example.com.crt /usr/share/ca-certificates/
$ echo "docker.example.com.crt" | sudo tee -a /etc/ca-certificates.conf
$ sudo update-ca-certificates

CentOS 인증서 등록

$ sudo cp docker.example.com.crt /etc/pki/ca-trust/source/anchors/
$ sudo update-ca-trust enable
$ sudo update-ca-trust extract


Step5

$ sudo service docker restart 

사용자 계정 설정

사용자 계정을 설정하기 위해서 .htpasswd 파일을 생성해야 합니다.

Step1

Ubuntu 패키지 설치

$ sudo apt-get install apache2-utils 

CentOS 패키지 설치

$ sudo yum install httpd-tools


Step2

$ htpasswd -c .htpasswd <아이디 입력>
New password:<비밀번호 입력>
Re-type new password:<비밀번호 입력>
Adding password for user <아이디 입력> 

Nginx 설정

아래의 내용을 nginx.conf 이름의 파일을 만들어야 합니다.

worker_processes  4; 
events {
    worker_connections  1024;
}
 
http {
    server {
        listen       443;
        server_name  docker.example.com;
 
        ssl on;
        ssl_certificate /etc/docker.example.com.crt;
        ssl_certificate_key /etc/docker.example.com.key;
 
        proxy_set_header Host           $http_host;
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header Authorization  "";
 
        client_max_body_size 0;
 
        chunked_transfer_encoding on;
 
        location / {
            proxy_pass          http://docker-registry:5000;
            proxy_set_header    Host  $host;
            proxy_read_timeout  900;
 
            auth_basic            "Restricted";
            auth_basic_user_file  .htpasswd;
        }
    }
} 

Docker Image Pull

docker registry와 nginx 이미지를 다운로드 합니다.

$ sudo docker pull registry
$ sudo docker pull nginx

Docker Run

Docker를 실행합니다.

$ sudo docker run -d --name=docker-registry \
    -v /home/registry:/tmp/registry \
    registry
 
$ sudo docker run -d --name=nginx \
    -v ./nginx.conf:/etc/nginx/nginx.conf \
    -v ./.htpasswd:/etc/nginx/.htpasswd \
    -v ./docker.example.com.key:/etc/docker.example.com.key \
    -v ./docker.example.com.crt:/etc/docker.example.com.crt \
    --link=docker-registry:docker-registry \
    -p 443:443 \
    nginx

Docker Login

위의 설정된 정보로 로그인을 합니다.

$ sudo docker login https://docker.example.com
Username: <아이디 입력>
Password: <비밀번호>
Email:
WARNING: login credentials saved in /root/.docker/config.json
Login Succeeded 


+ Random Posts