Docker hub, 

Docker private registry를 이용한 이미지 관리

정창훈(@seapy)

Docker 

배포할때

첫번째 걸림돌

이미지
업로드(push)
다운로드(pull)

공식 DEFAULT
사설 PRIVATE

호스팅 HOSTING

레지스트리 REGISTRY

Docker Hub

공식 레지스트리

http://hub.docker.com

다른 사람들이 만든 이미지 설정없이 바로 사용 가능

 

무료인 경우

    - 1 사설 저장소

    - 무한대의 공개 저장소

 

유료 정책도 있음

# Dockerfile

FROM busybox
CMD echo 'Hello, Docker!'

테스트용 이미지 빌드

# 위의 Dockerfile을 빌드

$ docker build -t seapy/echo .

# 도커 실행 확인

$ docker run --rm seapy/echo
Hello, Docker!
# 이미지 삭제
$ docker rmi sepay/echo
$ docker run --rm seapy/echo
Unable to find image 'seapy/echo' locally
Pulling repository seapy/echo
2014/11/01 00:32:49 Error: image seapy/echo not found

# 이미지 빌드 및 푸쉬
$ docker build -t seapy/echo .
$ docker push seapy/echo
$ docker rmi sepay/echo
$ docker run --rm seapy/echo
Hello, Docker!

그외 특징들

  • github, bitbucket 과 연결해서 Dockerfile 자동 빌드
  • push, pull 느림
  • 자동빌드도 좀 기다려야되고 느림

호스팅

호스팅 서비스

  • tutum.co
  • quay.io

사용하기 쉽다

# 호스팅 서비스에 로그인
$ docker login tutum.co
Username: seapy
Password:
Email: user@email.com
Login Succeeded

# 이미 빌드된 이미지에 새로운 이름을 추가
$ docker tag seapy/echo tutum.co/seapy/echo

# 호스팅 레지스트리에 이미지 push
$ docker push tutum.co/seapy/echo

사설 레지스트리

특징

  • 내부망을 사용하는 경우 속도가 hub 보다 빠름
  • s3, azure, swift, glance 등 다양한 저장소 지원
  • HTTP API 제공
  • 관리 페이지 부재
  • 기본 사양으로는 인증 지원 안됨(nginx 연동)

https://github.com/docker/docker-registry

$ docker run -d \
    --name docker-registry \
    -p 5000:5000 \
    registry

# 실행 여부 확인(boot2docker의 예. 우분투라면 ip를 0.0.0.0이나 서버의 IP로 변경)
$ curl "http://192.168.59.103:5000"
"docker-registry server (dev) (v0.8.1)"%

# 이미지에 새로운 이름 부여
$ docker tag seapy/echo 192.168.59.103:5000/echo

# 사설 레지스트리로 push
$ docker push 192.168.59.103:5000/echo

# 로컬 이미지 삭제 후 실행
$ docker rmi 192.168.59.103:5000/echo
$ docker run --rm 192.168.59.103:5000/echo
Unable to find image '192.168.59.103:5000/echo' locally
Pulling repository 192.168.59.103:5000/echo
88816139d249: Download complete
511136ea3c5a: Download complete
df7546f9f060: Download complete
e433a6c5b276: Download complete
e72ac664f4f0: Download complete
Status: Image is up to date for 192.168.59.103:5000/echo:latest
Hello, Docker!

로컬에서 레지스트리 실행

$ docker run -d \
    --name registry-ui \
    -p 8080:8080 \
    atcol/docker-registry-ui

레지스트리 UI

https://github.com/atc-/docker-registry-web

AWS S3에 이미지 저장

$ docker run -d \
    --name docker-registry \
    -p 5000:5000 \
    -v /docker/registry-conf:/registry-conf \
    -e DOCKER_REGISTRY_CONFIG=/registry-conf/config.yml \
    -e SETTINGS_FLAVOR=prod \ 
    registry
prod:
    loglevel: warn
    standalone: true
    storage: s3
    search_backend: sqlalchemy
    s3_bucket: your-bucket
    boto_bucket: your-bucket
    storage_path: /prod
    s3_access_key: S3_ACCESS_KEY
    s3_secret_key: S3_SECRET_KEY
    s3_encrypt: true
    s3_secure: true

환경설정 파일(/docker/registry-conf/config.yml)

실행

주의사항

  • s3_region 을 설정하면 오히려 안되는 경우가 있음
    • https://github.com/docker/docker-registry/issues/400

Registry
next
generation

https://github.com/docker/docker-registry/issues/612

python이 아닌 go 언어로 개발

이미지 포맷 변경

API 변경