[Docker] commit & save 반영되지 않을 때 (volume)
2025. 5. 30. 10:20
개발 환경에서 호스트 경로에 소스 코드를 두고 컨테이너 볼륨으로 지정했다.
컨테이너를 올린 후 코드 수정을 해서
commit하고 save하고 load했더니 수정된 코드가 반영이 안됐다.
= 볼륨 데이터는 commit에 포함되지 않음!
Docker 컨테이너의 파일 시스템 구조

▶︎ 이미지 레이어
여러 개의 읽기 전용 레이어들이 쌓여 있는 구조
각각의 레이어는 Dockerfile의 명령어 (FROM, RUN, COPY 등)를 실행하면서 만들어짐
컨테이너를 만들면 이 이미지 위에 쓰기 가능한 컨테이너 레이어가 하나 얹혀짐
▶︎ 컨테이너 레이어
컨테이너 실행 중에 생기는 수정, 생성, 삭제된 모든 파일/디렉터리가 저장됨
단, 마운트된 경로는 제외!
> 해당 경로는 애초에 호스트 외부를 바라보도록 리디렉션되어 있음
그래서 볼륨 데이터는 이미지에도 컨테이너 레이어에도 없음
docker commit
docker commit은 컨테이너 레이어(=컨테이너 자체의 파일 시스템)만 저장
따라서 마운트된 경로는 커밋 대상이 아님
마운트된 데이터도 포함시키려면?
docker commit으로는 불가능
1. 마운트 경로 → 임시 경로 → commit → 복원
[전제 조건]
# 호스트 경로: /myproject
# 마운트: /myproject ↔ 컨테이너 내 /app/core
docker run -v /myproject:/app/core -it ubuntu bash
[1] 최초 컨테이너 /app/core → (호스트에 마운트됨)
/app/temp → (비어 있음, commit 반영을 위해 임시 폴더 만들기)
[2] 파일 수정
/app/core/main.py ← 수정됨 (호스트에 반영됨)
[3] /app/temp에 복사
/app/temp/main.py ← 복사됨 (컨테이너 내부에 존재)
[4] docker commit → temp만 이미지에 포함됨
[5] 새 컨테이너 실행 후 복원 cp /app/temp/* /app/core/
2. Dockerfile에서 COPY를 통한 이미지 재생성
FROM ubuntu
COPY ./core /app/core
'Docker & Kubernetes > [Docker]' 카테고리의 다른 글
| [Docker] 서버에 Dockerfile 생성 후 배포 (0) | 2023.06.01 |
|---|