Docker 이미지는 컨테이너를 생성하기 위한 읽기 전용 템플릿(실행파일)이고, Docker 컨테이너는 이미지를 기반으로 생성된 실행 가능한 인스턴스입니다.

이미지에는 애플리케이션 코드와 런타임, 라이브러리, 환경 설정, 기본 실행 명령 등 컨테이너 실행에 필요한 내용이 포함됩니다. 일반적으로 Dockerfile의 명령을 통해 여러 읽기 전용 레이어로 빌드되며, 레지스트리에 저장하거나 다른 환경으로 전달할 수 있습니다. 이미지를 변경해야 한다면 기존 이미지를 직접 수정하는 대신 새로운 레이어를 가진 이미지를 다시 생성합니다.

컨테이너를 생성하면 이미지의 읽기 전용 레이어 위에 컨테이너별 쓰기 가능한 레이어가 추가됩니다. 실행 중 생성하거나 변경한 파일은 이 레이어에 기록되므로, 같은 이미지로 여러 컨테이너를 실행하더라도 각각 독립적인 상태를 가질 수 있습니다. 컨테이너를 삭제하면 이 쓰기 레이어의 데이터도 사라지기 때문에 보존해야 하는 데이터는 볼륨에 저장해야 합니다.

예를 들어 docker build로 애플리케이션 이미지를 한 번 만들고, docker run으로 그 이미지에서 여러 컨테이너를 생성할 수 있습니다. 이미지가 실행 환경의 설계도라면 컨테이너는 그 설계도로 만들어 실제로 실행 중이거나 실행할 수 있는 객체라고 볼 수 있습니다.

정리하면 이미지는 재사용하고 배포하는 불변의 패키지이며, 컨테이너는 이미지에 실행 설정과 쓰기 가능한 상태가 더해진 실행 단위입니다. 컨테이너 내부가 변경되어도 기반 이미지는 변경되지 않습니다.

출처 및 참고자료