본문 바로가기

06. Cloud/Docker

Docker S3 registry & Docker registry API

docker를 사용할 때, registry는 필수입니다. 나중에 어찌되었든 remote로 받아 놓으려고 쓰는 거니까요. 그런데, 이게, local에다가 저장을 하면 포멧을 하게 되면 매우 난감해집니다. 그러므로, AWS S3에 저장을 해 봅시다. 


S3용 Credential 만들기

(이미 Credential이 있으면 만드실 필요가 없습니다.)

일단 S3에 docker image를 저장할 bucket을 만들어야 합니다.


* 2016년 04월 19일 현재 서울 데이터 센터는 동작하지 않습니다. 저는 Standard US를 사용하였습니다.

이제 docker에서 사용할 credential를 만듭니다.


AWS의 오른쪽 상단에 security Credentials을 클릭하여 Credential 탭으로 들어갑니다.



이제, registry가 사용할 새로운 User를 만듭니다.



만들어진 User에 S3 접근을 위한 정책을 추가합니다.



이제 다음과 같이 추가합니다.




Docker Registry 만들기

이제 docker registry를 만들고 S3에 연결할 준비가 되었습니다. 그럼 다음과 같이 registry를 만듭시다.


docker run -p 5000:5000 --name s3-registry \

    -e SETTINGS_FLAVOR=s3 \

    -e AWS_BUCKET=gaia-registry \

    -e STORAGE_PATH=/registry \

    -e AWS_KEY=my_aws_key \

    -e AWS_SECRET=my_aws_secret \

    -e SEARCH_BACKEND=sqlalchemy \

    registry


여기서 SEARCH_BACKEND=sqlalchemy는 image리스트를 보기 위하여 필수적입니다.


Registry 접근

registry-ui가 웹으로 지원되는 컨테이너가 많습니다. 그러나, 저는 그냥 curl과 docker cli를 선호합니다. 그래서 다음과 같이 사용할 수 있습니다.


Image Push


이제 Docker Image Push를 해봅시다. 시험삼아, Ubuntu Image를 Push 해봅시다.


$ docker tag ubuntu:latest localhost:5000/ubuntu:latest

$ docker push localhost:5000/ubuntu:latest


Image Search


image는 curl을 이용하여 다음과 같이 검색할 수 있습니다.


$ curl -X GET http://localhost:5000/v1/search

{"num_results": 1, "query": "", "results": [{"description": "", "name": "library/ubuntu"}]}


search에 필터를 추가 할 수 있는데 그것은 다음과 같습니다.

  • q – 검색할 단어
  • n - 페이지당 최대 검색 수 (default: 25, min:1, max:100)
  • page - 원하는 페이지.

이것을 추가하면 다음과 같이 쓸 수 있습니다.


$ curl -X GET http://localhost:5000/v1/search?q=ubuntu&page=1&n=25


이 뜻은 "ubuntu를 검색하는데, 한페이지에 최대 25개를 보여주고, 그 첫번째 페이지를 출력해달라." 라는 뜻입니다.


Docker Cli는 다음과 같이 입력 하시면 볼 수 있습니다.


$ docker search localhost:5000/

NAME                     DESCRIPTION   STARS     OFFICIAL   AUTOMATED

library/ubuntu                                  0          


Image Tag Search


해당되는 이미지의 Tag리스트는 다음과 같이 알 수 있습니다.


$ curl -X GET http://localhost:5000/v1/repositories/library/ubuntu/tags

{"latest": "5c8008c3ecbcb7b79ed1bf6a132f697c306ec8a1fbedc7497c67cb830147c266"}


Image Pull


private Register에 있는 이미지는 다음과 같이 가져올 수 있습니다.


$ docker pull localhost:5000/ubuntu:lastest


Image Delete


docker cli로는 Image를 지울 수 없습니다. 대신, docker restful api를 사용하여 지웁시다.


$ curl -X DELETE localhost:5000/v1/repositories/library/ubuntu/tags/latest