Page History
이미지 생성
다음의 명령어를 통하여 이미지로 만들 컨테이너를 생성한다.
컨테이너 내부에 first라는 이름의 파일을 하나 생성해 기존의 이미지로 변경사항을 만들것이다.
Code Block |
---|
[root@localhost ~]# docker run -i -t --name commit_test ubuntu:14.04 root@3fc01b9f69e7:/# echo test_first! >> first |
컨테이너에서 호스트로 빠져나와 docker commit 명령어를 입력하여 컨테이너를 이미지로 만든다.
docker commit 형식은 다음과 같다.
Info |
---|
# docker commit [OPTIONS] CONTAINER [REPOSITORY:[:TAG]] |
commit 의 옵션을 지정하고 커밋할 컨테이너의 이름을 명시한뒤 생성될 이미지의 이름을 입력한다.
Code Block |
---|
[root@localhost ~]# docker commit -a "alicek106" -m "my first commit" commit_test commit_test:first sha256:9c75288c443a3f010ecf2f9d1d3b0e52fdf1f6d4cc9b5e9f57d9be5fe5e6315e |
위의 명령어에서 이미지의 이름은 commit_test로 태그는 first 로 설정했다.
-a 는 author을 뜻하며, 작성자는 "alicek106", -m은 커밋메세지를 뜻하며 이미지에 포함될 부가설명을 입력한다.
commit_test는 컨테이너를 뜻하며, commit_test:first는 이미지를 뜻한다.
최상위 디렉토리에 first 라는 파일이 있는 도커 이미지가 생성되었다.
docker images로 이미지가 생성되었는지 확인한다.
Code Block |
---|
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE commit_test first 9c75288c443a 2 minutes ago 222MB ubuntu 14.04 dc4491992653 9 days ago 222MB |
이번에는
commit_test:first 이미지로 새로운 이미지를 생성한다.
commit_test:first 이미지로 컨테이너를 생성한 뒤 second라는 파일을 추가하여 commit_test:second라는 이미지를 생성한다.
Code Block |
---|
[root@localhost ~]# docker run -i -t --name commit_test2 commit_test:first root@c33268b3d582:/# echo test_second! >> second [root@localhost ~]# docker commit -a "jsp207" -m "my second commit" commit_test2 commit_test:second sha256:cac9edeb191ab1e11bd1b7f23f5234c2826e7204e87fe78afc7af4cb9461b67a [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE commit_test second cac9edeb191a 31 seconds ago 222MB commit_test first 9c75288c443a 10 minutes ago 222MB ubuntu 14.04 dc4491992653 9 days ago 222MB |
이미지 삭제
docker rmi 명령어를 사용하면 이미지를 삭제 할 수 있다.
하지만, 이미지를 사용중인 컨테이너가 존재하면 해당 이미지를 삭제할 수 없는 오류 메세지를 출력한다.
컨테이너를 삭제할때 사용했던 "docker rm -f [컨테이너이름]" 명령어와 같이 -f 옵션을 추가하여 이미지를 강제로 삭제 할수 있다.
하지만, -f옵션은 이미지 레이어 파일을 실제로 삭제하지 않고 이미지 이름만 삭제하기 때문에 의미가 없다.
그래서 다음 명령어와 같이 컨테이너를 삭제한 뒤 이미지를 삭제 해야 한다.
Code Block |
---|
[root@localhost ~]# docker stop commit_test2 && docker rm commit_test2
commit_test2
commit_test2
[root@localhost ~]# docker rmi commit_test:first
Untagged: commit_test:first |
commit_test:first 이미지를 삭제했다고 해서 전부 삭제된것은 아니며,
commit_test:first 이미지를 기반으로 하는 하위 이미지 commit_test:second가 존재하기 때문에 실제 이미지 파일을 삭제하지 않고 레이어에 부여된
이름만 삭제한다.
Untagged: commit_test:first 의 출력된 메세지의 Untagged는 이미지에 부여된 이름만 삭제 한다는 뜻이다.
Code Block |
---|
[root@localhost ~]# docker rmi commit_test:second
Untagged: commit_test:second
Deleted: sha256:cac9edeb191ab1e11bd1b7f23f5234c2826e7204e87fe78afc7af4cb9461b67a
Deleted: sha256:bc8fdb01c14a17238b1844ef369ecc4732f9873214a9a6b9421b1288fb998ea6
... |
Deleted 라는 출력 결과는 이미지 레이어가 실제로 삭제 됬음을 말한다.
즉, 삭제되는 이미지의 부모 이미지가 존재 하지 않아야만 해당 이미지의 파일이 실제로 삭제 된다.
Note |
---|
컨테이너가 사용중인 이미지를 docker rmi -f 로 강제로 삭제하면, 이미지의 이름이 <none>으로 변경되며, 이러한 이미지들을 댕글링(dangling)이미지라고 한다. 댕글링 이미지는 docker images -f dangling=true 명령어를 사용해 별도로 확인 할 수 있으며, 사용중이지 않는 댕글링 이미지는 docker image prune 명령어로 한꺼번에 삭제할 수 있다. |