티스토리 뷰

Programmer/Docker

Repositories in docker

judeKim's 2013.08.28 00:55

docker 는 git을 기반으로 하고 있다.


이미 눈치챈 사람들도 있겠지만, docker의 images나 container의 ID는 git commit 명령어 실행시 생성되는 SHA1 hash 코드값과 같은 40자이고, 이는 우연의 일치는 아닐 것이다.


docker는 repository를 사용하고 있다.

docker에서 정의하기를 "repository는 container에 대한 파일 시스템을 함께 생성하는 태그된 image들의 호스팅된 모음입니다. " repository의 이름은 예를 들면, 누가 생성했고 원본이 어디에 위치했는지와 같은 출처에 대해서 표시하는 태그이다.


registry가 있는데, 이것은 호스팅되는 하나 이상의 저장소들이 모여 있는 곳이다. (물리적인 저장소)

repository의 태그의 일부로서 암시적 명시적 호스트 이름이 있을수 있다.

암묵적으로 registry는 최상위 repository (저장소) 그리고, 중앙 인덱스라고 하는 index.docker.io 에 위치한다.

registry는 공개된 user repository도 포함될 수 있다.


이런 연유로 docker 프로젝트는 당신이 소유한 containers만을 생성 및 관리하기 위한 툴만이 아니라. 공유하기 위한 툴이기도 하다.

docker 프로젝트는 user에 의해 네임 스페이스화된 공개 저장소의 호스팅을 제공하고, 사용자 인증 및 모든 공개 repository에 대한 검색을 위한 Central Index를 제공합니다.

물론, 당신만의 registry의 호스팅도 할수 있습니다. docker는 검색, pull, login 과 push등을 통해 이들 서비스의 클라이언트로서 동작하기도 합니다.




# 출처

http://docs.docker.io/en/latest/use/workingwithrepository/



최상위, 유저 그리고 나만의 repositories


공개 repository에는 2가지 타입이 있다. docker 프로젝트 팀에 의해서 관리되는 최상위 repositories와, 개인 contributer들에 의해서 생성되는 user repositories.


  - 최상위 repositories는 이름내에 / (슬래시)를 가지고 있지 않는 것으로 쉽게 인식할 수 있습니다. 이 repositories는 일반적으로 신뢰할 수 있습니다.

  - user repositories는 항상 <username>/<repo_name> 과 같은 형태이다. 이것은, 당신이 공개 Central Registry에 push한다면, 당신이 배포한 images를 보게 되는 것과 같은 것이다.

  - 오직 인증된 user 만이 Central Registry에 그들의 username의 네임스페이스로 push할 수 있다.

  - user images는 검증되지 않았으므로, image 작성자를 신뢰할지에 대한 여부는 당신에게 달려 있다.


0.5 부터는 private repositories를 오직 당신의 registry에만 호스팅 하도록 할수 있다. 당신만의 registry의 repository에 push 혹은 pull을 하기 위해서는 당신은 다음과 같이 registry의 호스트 주소와 함께 tag를 prefix해야 한다.

private registry를 설정하기 위해선 https://github.com/dotcloud/docker-registry 의 도움이 필요하다.

sudo docker tag 0u812deadbeef localhost.localdomain:5000/repo_name

sudo docker push localhost.localdomain:5000/repo_name

repository는 한번 tag에 당신의 registry의 호스트 네임이 포함되면, 당신은 다른 repository처럼 push와 pull을 할 수 있습니다. 하지만, Central Index에서는 검색할 수 없습니다.( 색인이 되지 않습니다. ) 그리고, 체크를 수행할 유저이름이 없을 것입니다. 당신의 registry는 Central Index로부터 완전히 독립적으로 동작합니다.




Central Index에서 유용한 공개 images 찾기


이름, 네임스페이스나 설명문구등으로 검색하기

sudo docker search <value>

이름으로 간단히 다운로드하기 

sudo docker pull <value>

거의 동일하게 https://index.docker.io 에서 index를 브라우징 하고 검색할 수 있다.




Central Registry에 연결하기


당신은 central docker index online에 user를 생성하거나 실행할 수 있다.

sudo docker login

이것은 당신의 이름을 표시하고, 그것은 당신의 공개 repositories의 공개 네임스페이스가 될것이다.


당신의 username이 존재하지 않는다면, 당신에게 패스워드와 이메일주소를 입력하기 위한 프롬프트를 표시한다. 그리고, 자연스럽게 로그인 될것이다.




이미 저장된 image로 container를 commit 하기


repository에 commit 하기 위해서는 당신의 username 네임스페이스내의 image에 container가 commit 되어 있어야 한다.

sudo docker commit <container_id> <username>/<repo_name>




repository에 container push하기


image를 repository에 push하기 위해서는 이미 알려진 image에 container가 커밋되어 있어야 한다. (아래참조)

이제 repository에 이 image를 바로 commit 할 수 있다.


sudo docker push <username>/<repo_name>





일단, 옮겨 적기는 했지만 잘 이해되지는 않는다.


정리를 하자면 다음과 같다.


docker는 자기가 만든 image를 공유할 수 있다. 그 방법으로는 private 한 방법과 public 한 방법이 있다.

private는 자신만의 registry( 자체적으로 gitlab과 같은 프로그램을 통해 별도의 서버를 운영 하는 것과 같은 의미 )를 관리 운영하는 것이고, public 한 방법은 docker 프로젝트 팀이 관리하는 Central Registry에 올리는 방법이 있다.


Central Registry는 관리 특성상 인증이 필요하며, 자신의 이름(username)으로 구분된다. ( git에서 public repository를 제공하는 github과 같은 존재? )


Registry는 저장공간을 의미한다. 물리적인 서버 저장소 공간등을 생각하면 이해하기 쉽다.

Repository는 의미상으로 저장소이기는 하나. docker에서는 하나의 image에 대한 이름이라고 생각하면 된다.

git을 생각하면 프로젝트별로 별도의 저장소를 설정하는 것처럼 같은 맥락으로 이해하면 조금 쉬우려나? ( e.g. baasio/baas.io-sdk-android, apigee/usergrid-stack )

tag도 마찬가지로 git의 tag를 생각하면 조금 이해하기 쉽다.


최상위 repository는 일종의 base image라고 생각하면 된다.

그래서 base 이미지들은 /가 들어가 있지 않는 형태로 네이밍 되어 있다.

base, ubuntu, centos 와 같은 것이 그것들이다.


나머지는 git을 생각한다면 당연한 내용들이다.

git에서 commit 안되어 있는데 push안되는 것처럼 당연한 내용을 설명한 것이다.

뭘 저리 자기들만의 내용인것처럼 주저리 적었는지.. ( 불평은 아니다.. git을 모를 수도 있으니 )


서두에 언급한것처럼 git을 알고 있다면 조금더 이해하기 쉬워진다. 

( 다시 위의 글을 읽어 봤지만 발번역이라 더 어렵네 ㅋ )


끝.

'Programmer > Docker' 카테고리의 다른 글

Docker at Deview 2013 발표 자료 공유  (0) 2013.10.15
docker benchmark  (0) 2013.10.13
Repositories in docker  (0) 2013.08.28
Commands of docker  (0) 2013.08.26
Installation of docker  (0) 2013.08.25
docker 를 이해하기 위하여 #2  (0) 2013.08.22
댓글
댓글쓰기 폼