도커 컨테이너는 도커 이미지로 부터 만들어진다. 도커를 이용한 모든 작업의 기본이 되는 녀석이다.
도커는 먼저 로컬에 있는 도커 이미지를 이용해서 작업을 한다. 만약 로컬에 찾는 이미지가 없다면, Docker Hub Registry에서 찾아서 로컬에 복사한 다음 작업을 한다.
이번 문서에서 다룰 내용들이다.
저장소는 이미지의 여러 변형을 보유할 수 있다. ubuntu이미지의 경우 배포버전을 기준으로 10.04, 12.04. 12.10. 13.04, 14.04 등의 여러 변형을 가지고 있다. 이들 변형은 태그(TAG)로 식별할 수 있으며, 아래와 같이 태그를 이용해서 변형 중 하나를 특정 할 수 있다.
도커는 먼저 로컬에서 이미지를 찾고, 찾는 이미지가 없을 경우 자동으로 다운로드 받아서 저장한다. 따라서 대부분의 굳이 새 이미지를 미리 다운로드 할 필요는 없다. 하지만 다운로드에 걸리는 시간과 트래픽을 아끼기 위해서 미리 다운로드를 해야 하는 경우가 있다. docker pull 명령을 이용해서 centos를 다운로드 하는 예제다.
도커는 다양한 목적으로 사용 할 수 있는 이미 만들어져 있는 도커 이미지를 사용 할 수 있는 수단을 제공한다. Docker Hub에서 검색할 수 있으며, 직접 만든 도커 이미지를 업로드해서 공유할 수도 있다.
https://docs.docker.com/userguide/search.png
로컬 호스트에서 docker search명령으로 찾는 방법도 있다. Ruby + Sinatra 기반의 웹 애플리케이션을 개발한다고 가정해 보자. 팀원 모두가 동일한 개발 환경을 갖춰야 할 것이다. 해서 sinatra 키워드를 이용해서 쓸만한 이미지를 찾기로 했다.
docker commit명령을 이용해서 변경된 내용을 commit 한다. -m 플래그는 커밋 메시지를 저장하기 위해서 사용한다. -a는 작업자(AUTHOR)를 알려주기 위해서 사용한다. Git과 같은 버전 관리 시스템의 commit과 매우 비슷하게 작동 함을 알 수 있다.
5de6755856c7는 커밋할 컨테이너의 ID, joinc/sinatra:v2는 저장 할 이미지의 이름이다. 커밋한 이미지는 docker images로 확인 할 수 있다.
1
2
3
4
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
joinc/sinatra v2 9db77a364e54 21 minutes ago 452.1 MB
training/webapp latest 02a8815912ca 43 hours ago 348.8 MB
training/sinatra이미지를 만들어서 배포하는 건 유용하긴 하지만, 상당히 큰 이미지 파일을 다운로드 해야 하는 불편함이 있다. 이미지를 만드는 대신에 "이 이미지를 만들기 위해서 이러이러한 환경이 필요하다"라는 정보만 서로 공유하면 어떨까 ? 일종의 빌드 파일만 공유하는 거다. 작동 방식은 아래와 같다.
이미지 개발자는 이미지의 사양을 적은 Dockerfile을 개발해서 배포 한다. 1. 팀원들은 docker build를 이용해서 Dockerfile로 부터 이미지를 만든다.
-t로 이미지의 이름과 태그를 설정했다. 조직(혹은 유저이름)은 joinc이고 저장소의 이름은 sinatra, 태그는 v2다. "./"는 Dockerfile이 있는 위치를 설정하기 위해서 사용했다.
명령을 실행하면, 이미지 빌드 과정을 지켜볼 수 있을 거다.
새로운 이미지로 부터 컨테이너를 만들어보자.
개발한 이미지는 docker push를 이용해서 Docker Hub에 올릴 수 있다. 이미지는 public영역에 올려서 모두가 공유하거나, private 영역에 올려서 제한된 사람들만 사용하도록 할 수 있다. 이미지를 올리기 위해서는 docker.com에 계정을 만들어야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
# docker push joinc/sinatra
The push refers to a repository [yundream/sinatra] (len: 1)
Sending image list
Pushing repository joinc/sinatra (1 tags)
e9e06b06e14c: Image already pushed, skipping
a82efea989f9: Image already pushed, skipping
37bea4ee0c81: Image already pushed, skipping
07f8e8c5e660: Image already pushed, skipping
e6ff8095636e: Image successfully pushed
1a27f08f6267: Image successfully pushed
a39bf6457225: Image successfully pushed
Pushing tag for rev [a39bf6457225] on {https://cdn-registry-1.docker.io/v1/repositories/joinc/sinatra/tags/v2}
Contents
1. 도커 이미지 작업
2. 호스트에 있는 이미지 목록 확인
3. 새 이미지 가져오기
4. 이미지 찾기
5. 이미지 가져오기
6. 이미지 만들기
6.1. 이미지의 변경 내용을 committing 하기
6.2. Dockerfile로 부터 이미지 만들기
7. 이미지에 태깅하기
8. 이미지 올리기
9. 이미지 삭제
1. 도커 이미지 작업
2. 호스트에 있는 이미지 목록 확인
3. 새 이미지 가져오기
4. 이미지 찾기
5. 이미지 가져오기
6. 이미지 만들기
6.1. 이미지의 변경 내용을 committing 하기
6.2. Dockerfile로 부터 이미지 만들기
7. 이미지에 태깅하기
8. 이미지 올리기
9. 이미지 삭제
Recent Posts
Archive Posts
Tags