docker 와 docker-compose 가 기초적인 docker 사용 환경입니다. 이제 다양한 docker image 를 이용해서 여러 가지 서비스를 쉽게 시험해 볼 수 있습니다. 기본 사용법에 익숙해지고 나면 docker 기본 image 파일을 사용 환경 변화에 따라 수정하여 사용하고 싶어집니다. Instance 를 가지고 수정 가능하지만 수정 사항은 실행 중일 때만 효과가 있습니다. 매 번 Instance 에서 동일한 수정 작업을 하는 것은 불편하고 불필요한 작업입니다. SE라면 반복적인 일을 줄이고 자동화 할 방안을 고민해야 합니다. Instance 에서 수정한 내용을 Docker Image 형태로 저장할 수 있습니다. Docker 가 제공하는 Docker HUB라는 공공 등록 저장소에 등록하는 형태입니다. Docker HUB는 모든 사람이 접근 가능한 저장소입니다. 나만의 저장소를 만들고 싶다면 어떻게 하면 좋을까요? 그 방법을 정리해 보았습니다.
구축 배경
- 공공 Docker Image 저장소인 Docker HUB 에 내부 서비스용 Docker Image 를 저장하는 것은 적절하지 않음.
- 마이크로 서비스 이미지 관리 및 빠른 배포 가능한 Local 저장소 필요.
- 무료 registry 구축 솔루션 검토 필요
구축 환경
- H/W: Raspberry PI 3
- OS: Raspbian GNU/Linux 9 (stretch)
- docker version 18.05.0-ce, build f150324
- docker-compose version 1.21.2, build 0898c783
※ docker & docker-compose 설치 관련해서는 “Raspberry PI 에서 docker 설치와 실행하기” 와 “Raspberry PI 에서 docker-compose 설치하기” 를 참고하십시오.
Docker Registry vs. VMWare Harbor
사용 가능한 저장소 솔루션으로 Docker Registry 2.x 와 VMWare Harbor 가 있습니다. 두 가지 모두 Docker image 형태로 제공하고 있어서 간단하게 Docker 로 기동 가능합니다.
Docker Registry 2.x
- docker 공식 솔루션임.
- docker-registry-1.x 는 삭제되었으므로 최신 2.x 를 사용 검토.
- 별도의 Web UI container 설치 필요.
- Replication 지원 않함. (2018.5 현재)
docker-registry 2.x 는 docker distribution 솔루션의 일부로 합쳐졌으나
아직까지 공식적인 distribution 활용법은 없는 것 같음.
VMWare Harbor
장점
- Registry + Web UI + DB + Job control 로 구성.
- install.sh (docker-compose) 제공으로 쉽게 구축 가능함.
- 추가적인 Harbor instance 를 별도 서버에 구축함으로써 쉽게 Repository Replication 이 가능.
단점
- Replication 구성에서 사용자(User) 정보는 공유하지 않음.
Harbor 설치
- 최신 버전의 Harbor installer 다운로드
$ wget https://storage.googleapis.com/harbor-releases/release-1.5.0/harbor-offline-installer-v1.5.1.tgz
2018.5 현재, 최신 버전은 1.5.1이고, Offline installer 만 사용 가능합니다. 본 문서에서는 Offline installer 를 이용하였습니다.
2. 이미지 저장소용 신규 Volume 생성
$ docker volume create --name registry_data $ docker volume ls DRIVER VOLUME NAME local registry_data
Docker 버전에 따라 volume 명령이 없을 수 있습니다.
3. registry 에 보안 (TLS) 접속을 위해 사설 인증서(Self-signed Certificate) 생성
$ mkdir -p /etc/certs && openssl req \ > -newkey rsa:4096 -nodes -sha256 -keyout /etc/certs/domain.key \ > -x509 -days 365 -out /etc/certs/domain.crt Generating a 4096 bit RSA private key
4. 사설 인증서를 Docker 가 참조 할 수 있도록 이동
$ sudo mkdir -p /etc/docker/certs.d/pi3.boolsee.pe.kr:5000 $ sudo cp certs/domain.crt /etc/docker/certs.d/pi3.boolsee.pe.kr:5000/ca.crt $ sudo ls -l /etc/docker/certs.d/pi3.boolsee.pe.kr:5000
5. Docker 시작 옵션 추가 후, 서비스 재기동
$ sudo vi /etc/default/docker DOCKER_OPTS="--insecure-registry pi3.boolsee.pe.kr:5000" $ sudo systemctl restart docker
6. harbor.cfg 파일 수정
_version = 1.5.0 hostname = pi3.boolsee.pe.kr ui_url_protocol = http max_job_workers = 50 customize_crt = on secretkey_path = /data admiral_url = NA log_rotate_count = 50 log_rotate_size = 200M http_proxy = https_proxy = no_proxy = 127.0.0.1,localhost,ui email_identity = email_server = mail.boolsee.pe.kr email_server_port = 25 email_username = email_password = email_from = regadmin <regadmin@boolsee.pe.kr> email_ssl = false email_insecure = true harbor_admin_password = Harbor12345 auth_mode = db_auth ldap_url = ldaps://ldap.mydomain.com ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com ldap_search_pwd = password ldap_basedn = ou=people,dc=mydomain,dc=com ldap_filter = (objectClass=person) ldap_uid = uid ldap_scope = 2 ldap_timeout = 5 ldap_verify_cert = true ldap_group_basedn = ou=group,dc=mydomain,dc=com ldap_group_filter = objectclass=group ldap_group_gid = cn ldap_group_scope = 2 self_registration = on token_expiration = 30 project_creation_restriction = everyone db_host = mysql db_password = root123 db_port = 3306 db_user = root registry_storage_provider_name = filesystem crt_country = KO crt_state = crt_location = KO crt_organization = boolsee crt_organizationalunit = HOME crt_commonname = pi3.boolsee.pe.kr crt_email = regadmin@boolsee.pe.kr
7. harbor 설치
$ sudo ./install.sh