컨테이너 이미지는 프로그램 실행에 필요한 파일, 라이브러리, 바이너리와 설정을 묶은 표준화된 패키지다. 컨테이너를 실행할 때 바탕으로 사용하며, 생성된 이미지 자체는 불변이라는 원칙을 가진다. 내용을 바꾸려면 새 이미지를 만든다. Docker 이미지 설명
계층으로 구성되는 이유
이미지는 파일을 추가·변경·삭제하는 여러 계층으로 구성된다. 언어 실행 환경이 담긴 기반 이미지 위에 애플리케이션 의존성과 소스 파일을 추가하는 식이다. 공통 부분을 재사용할 수 있어 빌드와 전달을 관리하는 데 도움이 된다. 다만 어떤 파일이 어느 계층에 포함됐는지 이해하는 것이 중요하다.
이미지와 실행 상태 구분
Docker로 같은 이미지를 실행해도 컨테이너별 환경 변수나 연결한 저장소가 다르면 동작은 달라질 수 있다. 실행 도중 생긴 데이터와 이미지에 들어 있는 원본 파일은 구분해서 관리해야 한다.
| 관리 대상 | 예시 |
|---|---|
| 이미지에 포함할 것 | 애플리케이션 코드·런타임·의존성 |
| 실행 시 주입할 것 | 환경별 접속 주소와 설정 |
| 별도 보관할 것 | 사용자가 올린 파일과 데이터베이스 내용 |
표는 역할을 설명하는 예시다. 실제 구성에서는 빌드 도구와 저장 방식의 특성도 확인한다.
배포 산출물로 사용하기
테스트를 마친 이미지를 배포 대상으로 사용하면 어떤 실행 파일을 검증했는지 추적하기 쉽다. 지속적 통합 과정에서 이미지를 만들고 검증 결과와 함께 관리할 수 있다. 운영 기록에는 사람이 붙인 이름뿐 아니라 실제로 사용한 이미지 식별 정보를 남기는 편이 재현에 도움이 된다. Docker 이미지 빌드 지침
불변성과 보안의 차이
이미지가 불변이라고 내용이 항상 안전하거나 최신이라는 뜻은 아니다. 취약한 라이브러리를 포함했다면 수정된 의존성으로 새 이미지를 만들어 검증해야 한다. 이미지에 비밀번호를 넣지 말고 별도 비밀 관리 수단을 사용한다. 구성 요소를 확인하는 소프트웨어 자재 명세서는 포함된 의존성을 파악하는 데 활용할 수 있다.