3. 도커 이미지

도커 이미지는 애플리케이션 자신 뿐만아니라 실행에 필요한 모든 것들을 담고 있습니다. OS, DBMS, 웹서버 등 시스템 상에서 이용되는 대부분의 요소를 이미지로 생성할 수 있으며, 그것은 전문가의 영역이 아닌 이 글을 보는 여러분 모두 하실 수 있는 작업입니다.

컨테이너를 생성할 때 어떻게 이미지가 이용되는지, 이미지는 어떻게 생성되는지 실습을 통해 이해해보도록 하겠습니다. 더불어, 이미지를 생성하기 위한 Dockerfile 은 어떻게 작성해야 하는지도 살펴보는 시간을 가져보겠습니다.

3.1 도커 이미지 개요

도커 컨테이너를 실행할 때 run 명령어의 인자로 어떤 것을 작성했는지 기억 나시나요? -it, —-name 등의 옵션 등도 중요하지만 가장 중요한 건 바로 어떤 이미지를 실행할 것인지 입력하는 것입니다.

sudo docker container run -it --name ubuntu ubuntu:latest
sudo docker run -it --name ubuntu ubuntu:latest

명령어를 하나 작성해보았습니다. 마지막에 ubuntu:latest 라고 되어있는 부분을 주목해주세요. 기본적으로 우리 로컬 환경에는 필요한 도커 이미지가 없습니다. 그렇기 때문에 컨테이너를 실행할때도 아래와 같은 메세지가 뜹니다. 그리고 어디선가 이미지를 받아서 컨테이너를 실행시킵니다.

root_3cd22a69d7ce___.png

그렇다면 이미지는 도대체 어디에서 오는 것일까요? 도커는 로컬에 필요한 이미지가 없을 경우 Docker Hub 라는 레지스트리에서 이미지를 받아옵니다. 이 레지스트리에는 도커가 인증한 공식 이미지와 더불어 개인이 직접 빌드한 이미지도 확인할 수 있습니다. 아래는 'Docker Hub' 에서 확인할 수 있는 'ubuntu'의 공식 이미지 페이지입니다.

Ubuntu_-_Official_Image___Docker_Hub.png

컨테이너를 실행할 때 단일 이미지만을 이용하는 경우는 거의 없습니다. 겉으로 보기에는 단일 이미지이지만 내부를 살펴보면 다중 이미지로 구성이 되어있음을 알 수 있죠. 결국 실제 운영환경에서 실행되는 이미지는 베이스가 되는 이미지와 설정 파일, 그리고 명령들을 한 데 모아 빌드한 것이고, 그렇게 빌드된 이미지로 컨테이너를 실행합니다. 여기서 등장하는 것이 바로 Dockerfile 입니다.

3.2 도커 이미지 관리

도커에서 이미지를 다루기 위해서는 기본적인 명령어를 숙지하고 있어야 합니다. 아래 명령어를 직접 실행해보면서 충분히 연습해봅시다.

1) pull - 도커 이미지 받기

sudo docker image pull ubuntu
sudo docker image pull ubuntu:focal
sudo docker image pull ubuntu:latest

sudo docker image pull 이미지명[:태그]

이미지를 가져올 때는 저장소명(repository)을 사용하며, 필요에 따라 태그를 추가로 작성합니다. 태그는 저장소에 저장된 이미지를 버전별로 관리하는 데에 사용됩니다.

Ubuntu_-_Official_Image___Docker_Hub_🔊.png

위에 작성한 세 줄의 명령어는 사실 모두 같은 이미지를 가리키고 있습니다. 태그를 명시하지 않은 첫번째 명령은 latest 태그가 붙은 것과 같은 의미입니다. 태그의 경우 복수로 설정이 가능하기 때문에 보통 릴리즈 연도, 숫자형식의 버전, 영문 별칭 등이 다양하게 활용됩니다.

여러 태그 중 가장 중요한 것은 latest 입니다. 일반적으로 latest 태그는 장기 지원 버전(LTS)이나 안정화(stable) 버전에 붙입니다. Ubuntu의 경우 20.04 버전이 가장 최신의 장기 지원 버전이기 때문에 latest 태그가 붙어있는 것이죠. 이외 버전을 설치해야 하는 경우 반드시 태그를 명시해야 합니다.

root_3cd22a69d7ce___.png