레지스트리와 이미지명
이미지 레지스트리는 도커 이미지를 저장하는 저장소이다.
이 이미지 레지스트리를 통해서 개인이나 팀이 이미지를 다른 사람과 공유하거나 필요한 이미지를 다운 받을 수 있다.
이미지 레지스트리가 제공하는 기능
레지스트리
이미지가 저장되는 공간은 크게 세 가지로 분류할 수 있다.
먼저 도커가 설치되어 있는 호스트 머신의 로컬 스토리지이다.
그리고 온라인 저장소는 크게 두 가지 종류로 나눌 수 있다.
주로 기업에서 많이 사용하는 private 레지스트리와 도커 허브 같은 public 레지스트리가 있다.
- 도커 런 명령에서 이미지의 이름을 지정하면 먼저 로컬 스토리지에서 해당하는 이미지가 있는지 검색한다.
로컬 스토리지는 도커를 실행하는 호스트 OS의 특정 폴더를 의미한다. - 스토리지에 이미지가 있으면 바로 실행이 되고 스토리지에 이미지가 없으면 호스트 외부의 온라인 레지스트리에서 이미지를 로컬 스토리지로 다운받는다.
- 다운받은 로컬 스토리지의 이미지를 사용해서 컨테이너를 실행한다.
- 그리고 이제 다음부터는 Nginx 컨테이너를 실행할 때마다 로컬 스토리지에 이미 다운로드 받아놓은 이미지가 있기 때문에 온라인 레지스트리를 검색하지 않고 바로 컨테이너로 실행된다.
온라인 레지스트리는 public 레지스트리 private 레지스트리로 나뉜다.
특정한 네트워크에만 접근이 가능하면 private 레지스트리다.
모든 네트워크에서 접근이 가능하면 public 레지스트리이다.
이미지 네이밍 규칙
docker run -d -p 80:80 --name hellonginx nginx
위 명령어를 보면 맨 끝에 nginx라는 이미지 이름으로 이미지를 지정했다.
그런데 보통 이미지 이름에는 이미지를 어디서 다운받는지, 어떤 버전의 이미지를 다운받는지에 대한 정보가 모두 포함되어야 한다. 하지만 위 명령어를 보면 nginx라는 이미지 이름만 적었는데도 이미지를 다운로드할 수 있다. nginx라는 이름만 가지고 이미지를 다운받을 수 있었던 이유는 이 이미지 이름에 규칙이 있고 디폴트로 지정되는 기본 값이 있기 때문이다. 이미지의 네이밍 규칙은 이미지를 만들고 공유하는 데 있어서 꼭 필요한 정보이기 때문에 꼼꼼하게 알아보자
이미지 이름은 크게 레지스트리 주소, 프로젝트 명, 이미지 명, 이미지 태그로 구성된다.
레지스트리 주소는 어떤 레지스트리를 사용할지 지정한다.
- 도커 허브 말고도 레지스트리가 여러 개 있을 수 있기 때문에 이미지를 어떤 레지스트리에서 다운로드하고 업로드할지를 지정해야 한다.
- 레지스트리 주소가 비어 있는 경우에는 기본 값으로 지정된 레지스트리 주소가 사용된다.
- 도커를 사용하면 기본 레지스트리 값은 도커 허브의 주소인 docker.io 이다.
프로젝트 명은 이미지를 보관하는 폴더 같은 개념이다.
- 레지스트리마다 이 프로젝트를 정의하는 방식이 조금 다를 수 있다.
- 도커 허브 같은 경우는 가입한 사용자의 계정명이 프로젝트 명이 된다.
이미지 명은 다운로드 받을 이미지의 이름을 의미한다. 이미지 태그는 이미지의 버전이다.
- 이미지 태그를 빈값으로 입력하면 최신 버전을 의미하는 latest가 기본값으로 사용된다.
nginx 이미지 이름을 살펴보자.
도커는 도커사가 직접 검증한 이미지는 오피셜 이미지로 제공하고 있다.
그리고 이 오피셜 이미지는 라이브러리라는 프로젝트에서 관리한다.
그래서 별도로 계정명을 입력하지 않으면 라이브러리가 기본 값으로 적용된다.
그래서 프로젝트명을 비워놓으면 공식 nginx 이미지를 다운받게 된다.
이미지 pull, push
명령어
아래의 이미지의 이름은 이미지의 네이밍 규칙에 따라서 작성하면 된다.
docker pull 이미지명
로컬 스토리지로 이미지 다운로드
docker tag 기존이미지명 추가할이미지명
로컬스토리지의 이미지명 추가
tag 명령어는 새로운 이미지명을 만다는 명령어이다.
새로운 이미지명을 만들기 위해서는 새로운 이름을 붙일 원래의 이미지가 있어야 한다.
그래서 도커 tag 명령에는 기존에 가지고 있는 이미지명과 새롭게 추가할 이미지명을 입력하면 된다.
docker push 이미지명
이미지 레지스트리에 이미지 업로드
도커 login, logout
명령어
docker login
이미지 레지스트리 인증 정보 생성
도커 로그인 명령으로 로그인하시면 스토리지의 특정 공간에 인증 정보가 생성된다.
docker logout
이미지 레지스트리 인증 정보 삭제
도커 로그아웃을 입력하면 인증 정보가 저장되어 있는 파일이 삭제된다.
docker image rm 이미지명
로컬 스토리지의 이미지 삭제
이미지 삭제
container id는 똑같지만 이미지 명이 다른 이미지가 2개 있을 경우 이미지 태그를 하나만 삭제할 때는 이 이미지를 참조하고 있는 다른 이미지명이 있기 때문에 untagged가 되고 삭제는 되지 않았지만 두 번째로 이미지를 삭제할 때는 더 이상 이 이미지를 참조하고 있는 이미지명이 없기 때문에 파일 자체가 삭제되어 버린다. 이렇게 이미지와 이미지 명의 관계는 실제 파일과 참조 링크처럼 생각면 된다.
물리적인 파일에 여러 개의 링크 형태로 이미지에 이름을 붙일 수 있고, 더 이상 참조하는 이미지 명이 없을 경우에 물리적인 파일도 삭제된다.
참고
인프런의 개발자를 위한 쉬운 도커 강의를 보고 정리한 글입니다.
'Docker' 카테고리의 다른 글
7. 도커 볼륨 (0) | 2024.08.16 |
---|---|
6. 네트워크 (0) | 2024.08.15 |
5. 컨테이너 애플리케이션 구성 (0) | 2024.08.15 |
4. 이미지 빌드 (0) | 2024.08.14 |
2.이미지와 컨테이너 (0) | 2024.06.29 |