학습목표

  • 이미지를 어느 장소에서 얻어오는지 이해한다.
  • 도커허브에서 도커 이미지를 풀해서 가져온다.
  • 도커허브로 도커 이미지를 푸쉬해서 밀어넣는다.

1 도커허브에서 이미지를 가져온다.

도커허브(Docker Hub)는 공개된 도커 이미지가 저장된 장소다. 다음과 같이 명령어를 입력해서 첫 이미지를 실행하면,

$ docker run --rm -p 8787:8787 rocker/verse

도커 소프트웨어가 이미지가 해당 컴퓨터에서 이용가능한지 검사한다. 해당 컴퓨터에 없기 때문에, 도커허브에서 이미지를 다운로드해서 가져온다. 도커허브에서 이미지를 가져오는 것은 어떻게 보면 자동으로 동작한다. 이미지만 도커허브에서 가져오기만 하고 실행하지 않는 경우, 다음과 같은 명령어를 실행시킨다.

$ docker pull rocker/verse

2 도커허브에 이미지 넣기

본인이 직접 도커 이미지를 생성했다고 가정하자. 도커 이미지를 전세계 사람들과 공유하고자 한다고 가정하면, https://hub.docker.com/에 계정을 만든 전세계 사람들과 공유하는 것도 이제는 가능하다. 전자우편으로 도커허브 사이트와 사용자간에 상호검증이 완료되면 이제 준비가 다 되었고, 도커 이미지를 도커허브에 올릴 준비는 끝났다.

  1. 도커허브 https://hub.docker.com/ 사이트에 계정을 만들고 로그인한다.
  2. Create Repository를 클릭한다.
  3. 저장소 명칭 (즉, verse_gapminder)과 저장소에 대한 간략한 설명을 적고, Create를 클릭한다.
  4. 명령라인에서 도커허브로 로그인한다.
$ docker login --username=yourhubusername --email=youremail@company.com

계정에 사용한 사용자명과 전자우편이 필요하다. 비밀번호를 재촉하면 비밀번호를 적어넣는다. 모든 것이 정상 동작되면, 다음과 유사한 메시지가 출력된다.

WARNING: login credentials saved in /home/username/.docker/config.json
Login Succeeded
  1. 다음 명령어를 사용해서 이미지 ID를 점검한다.
$ docker images

그리고 나면, 다음과 유사한 출력결과가 화면에 뿌려지게 된다.

REPOSITORY              TAG       IMAGE ID         CREATED           SIZE
verse_gapminder_gsl     latest    023ab91c6291     3 minutes ago     1.975 GB
verse_gapminder         latest    bb38976d03cf     13 minutes ago    1.955 GB
rocker/verse            latest    0168d115f220     3 days ago        1.954 GB

이미지에 태그를 붙인다.

$ docker tag 6a131c8f7c2b yourhubusername/verse_gapminder:firsttry

태그 다음에 숫자는 이미지 ID(Image ID)와 매칭되어야 하고 :firsttry가 이에 상응되는 태그다. 일반적으로, 태그에 명칭을 붙일 때 적절한 명칭을 부여하는 규칙은 해당 콘테이너가 무엇과 연계되어 사용되는지 혹은 무엇을 대표하는지 도움을 줄 수 있는 것으로 한다. 예를 들어, 콘테이너가 논문에 대한 분석을 담고 있다면 논문 DOI 혹은 해당 저널에서 발행한 일련 번호를 사용할 수 있다. 혹은 콘테이너가 특정 코드 혹은 데이터 저장소로 사용된다면 이를 활용하는 것도 좋은 선택지가 된다. 결국 해당 이미지가 어떤 목적으로 활용되는지 이해하는데 도움이 된다면 어떤 명칭이든 좋다.

  1. 이미지를 방금전 생성한 저장소에 푸쉬해서 밀어넣는다.
$ docker push yourhubusername/hadleyverse_gapminder

이미지가 이제 누구나 사용할 수 있게 공개되었다.

3 도커 이미지를 로컬 파일로 저장하고 불러오기

도커허브(Docker Hub)에 푸쉬해서 이미지를 공유하는 것도 좋은 방법이지만 몇가지 단점도 있는 것이 사실이다.

  1. 대역포(Bandwidth) 결국 늦은 속도 - 상당수 ISP 제공업체는 다운로드 속도보다 훨씬 업로드 속도를 늦게 설정해 놨다.
  2. 보안 - 도커허브(Docker Hub)에 사설 저장소로 활용하고자 추가로 비용을 내지 않는다면 도커허브(Docker Hub)에 푸쉬하게 되면 전체 공개되는 것과 다름이 없다.
  3. 클러스터에서 작업을 할 때, 도커 콘테이너를 사용하는 작업을 돌릴 때마다 도커허브(Docker Hub)에서 콘테이너를 가져오게 되고 더불어 다수 작업을 돌리게 되면 정말 속도가 느려진다.

이러한 문제에 대한 해법은 도커 콘테이너를 .tar 파일로 담아 로컬 파일로 떨어뜨려 놓고 필요할 때 이미지를 불러와서 사용하는 방법이다.

docker save 명령어를 사용해서 도커허브(Docker Hub)에서 가져온 이미지에 더하여 커밋하거나 빌드한 자체 제작 도커 이미지로 저장한다. 예를 들어 verse_gapminder 도커 이미지 로컬 사본으로 저장하려면 다음 명령어를 사용한다:

$ docker save verse_gapminder > verse_gapminder.tar

저장한 .tar 파일을 불러와서 사용하려면 docker load 명령어를 사용한다:

$ docker load --input verse_gapminder.tar

4 도전과제

  • 동료가 제작한 이미지를 다운로드 받아본다. 첫음 verse 이미지를 다운로드 받을 때와 속도를 비교해보면 어떤가?
  • 도커허브(Docker Hub)에서 재밌을 듯 한 이미지를 살펴본다. 본인에게 도커 이미지가 어떤 점에서 유익할 수 있을지 생각해본다.
  • 일면도 없는 누군가로부터 전달받은 혹은 도커허브(Docker Hub)에서 검색한 도커 이미지를 사용할 때 장단점을 논하시오.

다음 수업: 도커파일(Dockerfiles)으로 진행하거나 학습목차로 되돌아 간다.