이번에 다룰 내용은 도커에서 이미지(image)의 제가 받아들인 의미와(뇌피셜입니다.) Docker Hub에서 도커 이미지를 pull 해오는 방법입니다.
01. 이미지(Image)?
저는 처음에 추후 설명할 개념인 container와 Image의 관계를 Image : Container = Class : Instance 와 같이 이해했습니다.
어떤 의미냐 하면, Image에 앞으로 생성될 container에 필요한 것들을 설치하고 설정해준 뒤, 얼마든지 Image를 이용해 여러 개의 container를 찍어낼 수 있다는 점에서 그렇게 받아들여졌습니다.
그렇게 생긴 container들은 다른 포트를 개방하고, 다른 볼륨을 가지며, 다른 requirements를 필요로 하는 등 사용자의 입맛에 맞게 실행됩니다.
흔히 Image를 "Snapshot of a container" 이라고 설명합니다. 어떤 컨테이너에 필요한 패키지들, 설정을 담아둔 것이라 보면 될 것 같습니다.
예를 들어 pytorch를 컨테이너 환경에서 실행하고 싶다. 이러면 본인이 필요한 버전의 pytorch 이미지를 가져와 컨테이너를 만들고, 해당 컨테이너를 실행한 뒤 개발을 하면 됩니다.
솔직히 말하면 저도 이 정도로만 이해하고 있습니다. 이 시리즈의 목적은 도커 컨테이너와 VM의 차이를 설명한다던가, 어째서 윈도우에서는 도커가 유독 느리게 돌아간다던가 하는 것들 알려주기 위함이 아닙니다. 이런 건 유튜브, 구글에 훨씬 좋은 포스팅과 영상이 많습니다. 다만, 생각보다 간단한 도구인 도커를 패키지 디펜던시나 버전 컨트롤에 지칠 때 사용할 수 있을 정도로만 같이 따라가고 싶어 이렇게 글을 쓰게 되었습니다.
다만 이렇게 간단한 설명임에도 얕은 지식에 잘못 이해하고 있는 부분이 있을 수 있습니다. 이는 얼마든지 지적해주시면 감사하겠습니다.
우선 위 링크에 접속한 뒤, 상단에 보이는 검색 창에 필요한 이미지의 키워드를 검색해줍니다. 위에서 예시로 들기도 했고 제가 제일 많이 쓰고 있는 이미지이니 pytorch로 검색해보겠습니다.
위 사진을 보면 pytorch/pytorch 이미지가 검색된 것을 확인해볼 수 있습니다. 형광펜 칠해진 곳을 클릭해보면 Overview/Tags라는 태그가 보이는데, Tags를 클릭해줍니다.
여기서 Tag란, Image에 붙는 별명을 말합니다. pytorch라는 큰 틀에서 버전을 달리 할 때 tag를 바꿔가며 이미지를 저장하고, 이미지를 pull해올 수 있습니다.
그럼 여러 버전의 pytorch 이미지가 검색된 것을 확인할 수 있습니다. 맨 상단에 있는 1.9.0-cuda10.2-cudnn7-runtime을 들어가보겠습니다.
IMAGE LAYERS 라는 걸 볼 수 있습니다. 여기서 LAYERS란 기본 이미지에 층층히 명령어를 쌓아 새로운 이미지를 만든 것을 말합니다! 가령 custom-pytorch라는 이미지를 만들고 싶은데 여기에 담고 싶은 내용은 기존 pytorch image에 numpy 를 수행하는 것이라고 하겠습니다. 그렇다면 base Image는 pytorch/pytorch가, layers에는 numpy를 설치하는 것이, 최종 Image는 custom-pytorch가 되는 것입니다.
02. pull 위한 명령어 복사
다시 pytorch/pytorch를 처음 클릭한 창으로 돌아가면, tag들의 설명 옆에 어떤 명령어가 써있는 것을 확인할 수 있습니다.
해당 명령어 옆의 복사 버튼을 누르면 복사가 됩니다.
03. 도커 이미지 확인
두 번째 도커 명령어네요. docker images 라고 터미널에 입력해보면 아래와 같이 출력될 겁니다.
04. 도커 이미지pull
세 번째 도커 명령어입니다. 아까 복사했던 명령어를 그대로 붙여넣기 하시면 됩니다.
docker pull [image name]:[Image tag] 로 입력해주시면 원하는 이미지의 원하는 태그를 pull 해옵니다.
조금 오래 걸릴 수 있습니다. pytorch Image가 커서 그래요. 조금 기다려 줍시다.
05. 도커 이미지 확인
03에서 입력했던 명령어를 다시 입력해주시면 아래와 같은 결과를 볼 수 있습니다.
잘 되었네요 ㅎㅎ 용량이 무척 크네요. 나중엔 큰 용량을 가지는 이미지들을 효율적으로 관리하고, 사용하는 것도 고민 거리가 될 것입니다.
뭔가 앞에 건 당연히 작동할 것 같죠? 04에서 해봤던 것과 유사하니까요. 이번엔 Image ID로 삭제해보도록 하겠습니다.
삭제도 잘 되었네요 ㅎㅎ 아직까진 크게 어려운 부분이 없었을 것입니다.
정리
오늘은 도커의 이미지가 대충 어떤 건지, 도커의 이미지를 docker hub에서 pull하고, 삭제하는 방법에 대해 알아보았습니다.
다시 한 번 말씀드리지만 도커의 의미, 작동 원리, layer가 쌓이고 삭제되는 것 등은 구글링 해보는 것이 좋습니다. 단지 "일단 되게 해놓고" 다시 훌륭한 포스팅과 설명을 보면 조금 더 이해가 잘 됐던 경험이 있어 일단 되는 대로 해보는 방향으로 글을 써보려 합니다 ㅎㅎ
다음 포스팅에선 Dockerfile을 이용해 이미지를 빌드하는 방법에 대해 알아보도록 하겠습니다. 이를 잘 활용하면 사용자 입맛에 맞는 이미지를 만들 수 있어 용이합니다.
댓글 영역