-
도커 이미지(Docker Image)BackEnd/docker 2022. 3. 15. 07:30반응형
도커는 기본적으로 도커 허브(Docker Hub)라는 중앙 이미지 저장소에서 이미지를 내려받습니다. 도커 허브는 도커가 공식적으로 제공하고 있는 이미지 저장소로서, 도커 계정을 가지고 있다면 누구든지 이미지를 올리고 내려받을 수 있기 때문에 다른 사람들에게 이미지를 쉽게 공유할 수 있습니다. 단, 도커 허브는 누구나 이미지를 올릴 수 있기 때문에 공식(Official) 라벨이 없는 이미지는 사용법을 찾을 수 없거나 제대로 동작하지 않을 수 있습니다. 또한 이미지 저장소를 다른 사람들에게 공개하지 않기 위해 비공개(Private) 저장소를 사용하려면 비공개 저장소의 수에 따라 요금을 지불해야 합니다.
docker create, docker run, docker pull의 명령어로 이미지를 내려받을 때 도커는 도커 허브에서 해당 이미지를 검색한 뒤 내려받습니다. 도커 허브에 어떤 이미지가 있는지 확인하기 위해 도커 허브 사이트를 직접 접속해서 찾아볼 수도 있지만 도커 엔진에서 docker search 명령어를 사용할 수도 있습니다.
$ docker search ubuntu NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating sys… 13863 [OK] websphere-liberty WebSphere Liberty multi-architecture images … 283 [OK] ubuntu-upstart DEPRECATED, as is Upstart (find other proces… 112 [OK] neurodebian NeuroDebian provides neuroscience research s… 88 [OK] open-liberty Open Liberty multi-architecture images based… 51 [OK] ubuntu-debootstrap DEPRECATED; use "ubuntu" instead 45 [OK] ubuntu/nginx Nginx, a high-performance reverse proxy & we… 34
ubuntu 이미지도 여러 종류가 있음을 알 수 있습니다. STARS는 해당 이미지가 도커 사용자로부터 얼마나 즐겨찾기 됐는지를 나타냅니다.
도커 이미지 생성/삭제
도커로 개발하는 많은 경우에 컨테이너에 애플리케이션을 위한 특정 개발 환경을 직접 구축한 뒤 사용자만의 이미지를 직접 생성해야 합니다. 다음 명령어를 입력해 이미지로 만들 컨테이너를 생성합니다. 컨테이너 내부에 first라는 이름의 파일을 하나 생성해 기존의 이미지로부터 변경사항을 만듭니다.
$ docker run -i -t --name commit_test ubuntu:14.04 root@d935bfb8318c:/# echo test_first! >> first
호스트로 빠져나와 docker commit 명령어를 입력해 컨테이너를 이미지로 만듭니다. docker commit 명령어의 형식은 아래와 같습니다.
$ docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
아래 명령은 commit_test라는 컨테이너를 commit_test:first라는 이름의 이미지로 생성합니다. 저장소 이름은 입력하지 않아도 상관없지만 이미지의 태그를 입력하지 않으면 자동으로 latest로 설정됩니다.
$ docker commit \ -a "hanseomkim" -m "my first commit" \ commit_test \ commit_test:first sha256:4d23c02a12f21ac4fee6ee5c997f20d042f11e897fea72a824082381f0cca01f
- -a: 이미지 작성자(author)
- -m: 커밋 메시지
- commit_test:first: 이미지 이름:태그
docker images 명령어로 이미지가 생성됐는지 확인합니다.
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE commit_test first 4d23c02a12f2 49 seconds ago 197MB ubuntu 14.04 13b66b487594 11 months ago 197MB
docker rmi 명령어를 사용하면 이미지를 삭제할 수 있습니다. 이미지를 사용 중인 컨테이너 존재 시 컨테이너 삭제 후 이미지를 삭제해야 합니다. 이미지를 커밋할 때 컨테이너에서 변경된 사항만 새로운 레이어로 저장하고, 그 레이어를 포함해 새로운 이미지를 생성하기 때문에 이미지 삭제 시 이미지 레이어 파일도 삭제됩니다.
$ docker rmi commit_test:first Untagged: commit_test:first Deleted: sha256:4d23c02a12f21ac4fee6ee5c997f20d042f11e897fea72a824082381f0cca01f Deleted: sha256:3f2c14e723970b8838038b8e73559fad0f5c8bba40c50338c62e90b8ffaebcdf
- Untagged: 이미지에 부여된 이름만 삭제한다는 것을 뜻함
- Deleted: 이미지 레이어가 실제로 삭제됐음을 뜻함
Note. 컨테이너가 사용 중인 이미지를 docker rmi -f로 강제로 삭제하면 이미지의 이름이 <none>으로 변경되며, 이러한 이미지들을 댕글링(dangling) 이미지라고 합니다. 댕글링 이미지는 docker images -f dangling=true 명령어를 사용해 별도로 확인할 수 있습니다. 사용 중이지 않은 댕글링 이미지는 docker image prune 명령어로 한꺼번에 삭제할 수 있습니다.
도커 이미지 추출
도커 이미지를 별도로 저장하거나 옮기는 등 필요에 따라 이미지를 단일 바이너리 파일로 저장해야 할 때가 있습니다. docker save 명령어를 사용하면 컨테이너의 커맨드, 이미지 이름과 태그 등 이미지의 모든 메타데이터를 포함해 하나의 파일로 추출할 수 있습니다. -o 옵션에는 추출될 파일명을 입력합니다.
$ docker save -o ubuntu_14_04.tar ubuntu:14.04
추출된 이미지는 load 명령어로 도커에 다시 로드할 수 있습니다. save 명령어로 추출된 이미지는 이미지의 모든 메타데이터를 포함하기 때문에 load 명령어로 이미지를 로드하면 이전의 이미지와 완전히 동일한 이미지가 도커 엔진에 생성됩니다.
docker load -i ubuntu_14_04.tar
save, load 명령어와 유사하게 사용할 수 있는 명령어로 export, import가 있습니다. 그러나 export 명령어는 컨테이너의 파일시스템을 tar 파일로 추출하며 컨테이너 및 이미지에 대한 설정 정보를 저장하지 않습니다.
반응형'BackEnd > docker' 카테고리의 다른 글
Dockerfile (0) 2022.03.16 이미지 배포(Image Deploy) (0) 2022.03.15 컨테이너 자원 할당 제한 (0) 2022.03.12 컨테이너 로깅(Container Logging) (0) 2022.03.12 도커 네트워크(Docker Network) (0) 2022.03.09