도커 허브는 도커가 공식적으로 제공하고 있는 이미지 저장소
도커 계정을 가지고 있다면누구든지 이미지를 올리고 내려받을 수 있기 때문에 다른 사람들에게 이미지를 쉽게 공유할 수 있다.
누구나 이미지를 올릴 수 있기 때문에 공식(Official) 라벨이 없는 이미지는 사용법을 찾을 수 없거나 제대로 동작하지 않을 수 있다.
비공개(Private) 저장소를 사용하려면 비공개 저장소의 수에 따라 요금을 지불해야 한다.
docker search 이미지명
START
: 해당 이미지가 도커 사용자로부터 즐겨찾기(star) 된 수
first
라는 이름의 파일을 하나 생성해 기존의 이미지로부터 변경사항을 만들었다.
docker commit
-a "juhee" // author, 작성자를 나타내는 메타데이터를 이미지에 포함시키는 옵션
-m "my first commit" // 커밋 메세지, 이미지에 포함될 부가 설명 옵션
commit_test // 커밋할_컨테이너
commit_test:first // [REPOSITORY[:TAG]] 생성될_이미지_이름
이미지가 생성되었다!
1) commit_test:first
이미지로 컨테이너 생성
2) second
파일 추가
3) commit_test:second
이미지 생성
이미지를 커밋할 때 컨테이너에서 변경된 사항만 새로운 레이어로 저장하고, 그 레이어를 포함해 새로운 이미지를 생성한다.
전체 이미지의 실제 크기는
같은 크기의 이미지가 3개 존재하는 것이 아니라,
ubuntu 파일의 크기 + first의 변경 사항 + second의 변경사항의 크기이다.
docker inspect 이미지명
inspect
명령어는 컨테이너뿐만 아니라 네트워크, 볼륨, 이미지 등 모든 도커 단위의 정보를 얻을 때 사용할 수 있다.
이름이 중복될 경우 컨테이너에 대해 먼저 수행되므로--type
을 명시하는 것이 좋다.
ubuntu
commit_test:first
commit_test:second
이미지의 레이어 구조
docker history 이미지명
이미지가 어떤 레이어로 생성됐는지 출력한다.
docker rmi commit_test:first
이미지를 사용 중인 컨테이너가 존재할 경우, 해당 이미지를 삭제할 수 없다.
컨테이너를 삭제한 뒤 이미지를 삭제해야 한다.
Untagged
commit_test:first
이미지를 기반으로 하는 하위 이미지인commit_test:second
가 존재하므로, 실제 이미지 파일을 삭제하지 않고 레이어에 부여된 이름만 삭제했다는 뜻이다.
댕글링 이미지
컨테이너가 사용 중인 이미지를
docker rmi -f
로 강제로 삭제하면, 이미지의 이름이<none>
으로 변경되며, 이러한 이미지들을 댕글링(dangling) 이미지라고 한다.
second
이미지는 사용하고 있는 컨테이너가 없어 바로 삭제가 가능하다.Delete
는 이미지 레이어가 실제로 삭제됐음을 의미한다.docker save
-o ubuntu_14.04.tar // 추출될 파일명
ubuntu:14.04
도커 이미지를 별도로 저장하거나 옮기는 등 필요에 따라 이미지를 단일 바이너리 파일로 저장해야 할 때가 있다.
docker save
명령어를 사용하면 컨테이너의 커맨드, 이미지 이름과 태그 등 이미지의 모든 메타데이터를 포함해 하나의 파일로 추출할 수 있다.
docker load -i ubuntu_14.04.tar
docker export -o rootFS.tar // 파일명
mycontainer // 추출할 컨테이너
docker import rootFS.tar
myimage:0.0 // 저장될 이미지의 이름
save/load
명령어와 유사하게 사용할 수 있다.
export
명령어는 컨테이너의 파일시스템을 tar
파일로 추출하며 컨테이너 및 이미지에 대한 설정 정보를 저장하지 않는다.
commit
명령어로 컨테이너를 이미지로 만들면 컨테이너에서 변경된 사항뿐만 아니라 컨테이너가 생성될 때 설정된detached 모드, 컨테이너 커맨드
와 같은 컨테이너의 설정 등도 이미지에 함께 저장된다.
추출된 이미지는 레이어 구조의 파일이 아닌 단일 파일이기 때문에 여러 버전의 이미지를 추출하면 이미지 용량을 각기 차지하게 된다.
👉🏻 도커 허브 이미지 저장소 or 도커 사설 레지스트리를 사용하자!