이미지 A로 컨테이너를 만들고 그 컨테이너에서 여러가지 작업을 한 후 commit으로 이미지 B를 만들었다. 이런 경우 이미지 A는 이미지 B의 부모가 된다(레이어 구조). 따라서 이미지 A를 삭제하고 싶어도 이미지 B 때문에 삭제할 수 없다. 이미지 A에 대하여 더이상 관심이 없고 이미지 A와 B를 완벽하게 통합하고 싶다면 어떻게 해야하나?
이러한 작업을 레이어 구조의 평탄화 작업이라고 한다.
docker run -it --name temp_container myimageB:v1
docker export temp_container -o myimageB_flattened.tar
# 방법1
cat myimageB_flattened.tar | docker import - myimageB_flattened:v1
# 방법2
cat ~/myimageB_flattened.tar | docker import --change "CMD [\"/bin/bash\"]" - myimageB_flattened:v1
방법 1을 사용할 경우 새로운 컨테이너를 만들 때 run을 사용할 수 없다.
아마 다음과 같은 에러가 발생할 것.
docker: Error response from daemon: No command specified.
이유는 export를 통하여 만들어진 이미지는 단순히 컨테이너의 파일시스템을 아카이빙해서 만든 이미지기 때문이다. 따라서 새로운 Dockerfile 작성 등을 해야 쓸 수 있는데,
방법 2를 사용하는 것도 해결책이 될 수 있다.
4. 기존 컨테이너 삭제
docker rm temp_container
docker rmi myimageA:v1
docker rmi myimageB:v1