컨테이너 이미지는 기반 이미지 위에 명령별 파일 변경을 레이어로 쌓아 만듭니다. 앞 단계의 입력이 같으면 캐시된 레이어를 재사용할 수 있습니다.
데모는 의존성보다 뒤에 있는 앱 코드만 바뀌었을 때 앞 레이어는 그대로 두고 마지막 레이어만 다시 만드는 모습을 보여줍니다. 자주 바뀌는 명령을 앞에 두면 뒤 캐시까지 무효화됩니다.
언제 쓰나
이미지 빌드를 빠르게 하고 전송할 변경량을 줄이도록 Dockerfile 순서를 설계할 때 사용합니다.
이미지 빌드의 각 단계를 재사용 가능한 레이어로 쌓습니다.
<div class="stage" data-phase="0"><div class="title">IMAGE BUILD CACHE</div><div class="layers"><div class="panel">BASE <span>cached</span></div><div class="panel">DEPENDENCIES <span>cached</span></div><div class="panel app">APP CODE <span>cached</span></div></div><div class="sub">change: app source</div></div>.stage{width:min(94vw,760px);height:min(88vh,330px);padding:clamp(9px,2.6vmin,20px);border:1px solid var(--line);border-radius:14px;background:var(--surface);font:600 clamp(12px,2.5vmin,16px)/1.3 "Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo",sans-serif;display:flex;flex-direction:column;gap:clamp(6px,1.7vmin,12px);overflow:hidden;position:relative}.stage *{min-width:0}.stage .title{color:var(--accent);font-weight:800}.stage .sub{color:var(--muted)}.stage .row{display:flex;align-items:center;gap:clamp(5px,1.6vmin,12px)}.stage .panel{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(6px,1.6vmin,12px)}.stage .mono{font-family:ui-monospace,SFMono-Regular,monospace;font-size:clamp(12px,2.5vmin,15px)}.stage .grow{flex:1}.stage .on{color:var(--accent)}.layers{display:flex;flex-direction:column-reverse;justify-content:center;gap:clamp(4px,1vmin,8px);flex:1}.layers .panel{display:flex;justify-content:space-between}.layers span{color:var(--accent)}.stage[data-phase="1"] .app{border-color:var(--accent-3);transform:translateX(7px)}.stage[data-phase="1"] .app span{font-size:0;color:var(--accent-3)}.stage[data-phase="1"] .app span:after{content:'rebuilding';font-size:clamp(12px,2.5vmin,16px)}.stage[data-phase="2"] .app{background:color-mix(in srgb,var(--accent) 16%,var(--surface));border-color:var(--accent)}const stage=document.querySelector('.stage');let phase=0;function advance(){phase=(phase+1)%3;stage.dataset.phase=String(phase)}const timer=setInterval(advance,1200);stage.addEventListener('pointerdown',()=>{clearInterval(timer);advance()})컨테이너 이미지는 기반 이미지 위에 명령별 파일 변경을 레이어로 쌓아 만듭니다. 앞 단계의 입력이 같으면 캐시된 레이어를 재사용할 수 있습니다.
데모는 의존성보다 뒤에 있는 앱 코드만 바뀌었을 때 앞 레이어는 그대로 두고 마지막 레이어만 다시 만드는 모습을 보여줍니다. 자주 바뀌는 명령을 앞에 두면 뒤 캐시까지 무효화됩니다.
이미지 빌드를 빠르게 하고 전송할 변경량을 줄이도록 Dockerfile 순서를 설계할 때 사용합니다.