Tech story/Container

도커를 공부하는 초보자를 위한 안내서 4편 - 도커 이미지 이해하기

kt cloud 테크블로그 2021. 6. 25. 12:55

 

도커(Docker) 이미지

이전 포스트에서 도커의 정체와 이미지(Image)의 개념에 대해 알아보았습니다. 이미지 개념을 이해할 때, 중요한 것이 바로 Layer 저장방식 이었습니다. 지난 시간에 이어 이번 시간에는 실제 도커 이미지를 사용할 때 필요한 개념들을 간략하게 알아보도록 하겠습니다.

 

 

도커(Docker)이미지 경로

<첨부4> Image 경로

도커 이미지는 URL과 태그를 이용하여 관리 됩니다. 아래 코드를 보시면, 이미지를 pull 받을 때는 'nginx:latest' 라는 이미지를 요청했습니다. 하지만 실제로 받아온 이미지의 이름은 docker.io/library/nginx:latest인 것을 확인할 수 있습니다. 둘은 사실 같은 의미를 가집니다.

도커의 이미지 이름은 문자열 입니다. 도커허브를 기준으로 도커 이미지의 이름은 <NAMESPACE>/<IMAGE_NAME>:<TAG> 형식입니다. nginx의 경우 library라는 도커 허브의 공식 이미지가 저장되어 있는 네임스페이스에서 nginx라는 이름을 가진 이미지의 latest 버전을 가져온 것입니다. 

 

Dokcer.io는 이미지 저장소의 실제 주소를 가리킵니다. 그 말은 다른 도커 이미지 저장소(Registry)의 주소가 올 수도 있다는 이야기 입니다. 여기서 nginx:latest 라는 간략한 문자열로 이미지를 pull 받는 것이 가능한 이유는, 도커 클라이언트의 기본 저장소(Registry)가  docker.io(도커 허브)이기 때문입니다.

docker.io 이외에도 개인별로, 기관 혹은 조직 별로 저장소를 구축해 사용하고 있습니다. Private Registry를 구축하여 사용하는 방법은 다음에 포스트 하겠습니다.

 

이미지 생성방식

<첨부 6> 이미지 생성방식

 

그렇다면 이미지는 어떻게 만드는 것일까요? 사실 이 주제는 짧게 설명하기에는 힘든 주제라서 간략하게 설명하고 하나의 포스트로 새로 작성하도록 하겠습니다.

 

도커는 이미지를 만들기 위해서 Docker File 이라는 파일에 자체 DSL(Domain-Specific-Language)를 이용하여 이미지 생산 과정을 명시합니다.의존성 패키지를 설치하고 설정파일을 만들지 않고 Dockerfile을 통해 관리할 수 있습니다. 이 파일은 소스와 함께 버전이 관리되고 누구나 이미지 생산 과정을 볼 수 있어 수정 및 배포가 용이합니다.

 

 

이미지 저장소(Registry)

<첨부7> 도커 레지스트리

도커는 빌드한 이미지를 서버에 배포하기 위해서, 직접 파일을 복사하는 방법 대신 도커 레지스트리(Docker Registry)를 이용합니다.

 

도커 명령어를 이용하여, 이미지를 레지스트리에 push 하고 필요할 때는 레지스트리에서 pull하여 간편하게 사용 가능합니다.

 

 

도커 허브(Docker Hub)

<첨부8> 도커 허브

도커 이미지의 용량은 앞서 언급 드린대로 수백mb 에서 수gb에 이릅니다. 이렇게 큰 용량의 이미지를 서버에 저장하고 관리한다는 것은 쉬운 일이 아닙니다. 하지만 Docker는 도커 허브를 통해 공개 이미지를 무료로 관리해 주고 있습니다! 하루에도 엄청난 양의 이미지가 도커 허브에 저장되고, 또 사용되고 있습니다.

 

도커 허브를 통해 전 세계의 사람들과 이미지를 쉽게 공유할 수 있습니다. 게다가 Ubuntu, centos 등의 기본 이미지와 java, python 등의 공식이미지가 저장되어 있습니다. 일반 사용자들이 만든 이미지도 이미 50만개가 넘게 저장되어 있습니다.

 

도커허브를 통해 우리는 'ubuntu:latest' 라는 간단한 이름을 명령어에 넣는 것 만으로도 최신버전의 ubuntu를 사용할 수 있는 것입니다.

 

 

마무리

잘 이해가 되셨나요?

오늘 소개드린 내용은 그리 난이도가 있지는 않아서, 이해하시는데 어려움이 없으셨을 것 같습니다. 

도커 이미지 생성과 도커 레지스트리에 대해서는 독립적인 포스트로 별도로 게시하도록 하겠습니다!

긴 글 읽어주셔서 감사합니다.