Dockerfile Layer

  • λ„μ»€λŠ” 이미지λ₯Ό λ§Œλ“€ λ•Œ μ—¬λŸ¬ 개의 계측(layer)을 κ°€μ§„ λ‹€μˆ˜μ˜ μŠ€λƒ…μƒ·μœΌλ‘œ λ‚˜λˆ„μ–΄ μ €μž₯ν•œλ‹€.

  • μ΄λŠ” μ—¬λŸ¬ 이미지 νŒŒμΌλ“€μ„ 관리할 λ•Œ μ€‘λ³΅λ˜λŠ” μ˜μ—­μ„ ν•˜λ‚˜μ˜ λ ˆμ΄μ–΄λ₯Ό 톡해 κ΄€λ¦¬ν•˜μ—¬ 곡간/μ‹œκ°„μ  νš¨μœ¨μ„ μ–»λŠ” μž₯점이 μžˆλ‹€.

즉, λ„μ»€λŠ” Dockerfile을 읽어듀여, 파일 μ‹œμŠ€ν…œμ— λ³€ν™”λ₯Ό μ£ΌλŠ” μ»€λ§¨λ“œλ§ˆλ‹€ μƒˆλ‘œμš΄ 이미지 λ ˆμ΄μ–΄λ₯Ό λ§Œλ“ λ‹€. μ΄κ²ƒμœΌλ‘œ μ€‘λ³΅λ˜λŠ” λ ˆμ΄μ–΄λ₯Ό λ‹€μ‹œ λ‹€μš΄λ‘œλ“œ 받을 ν•„μš”κ°€ μ—†μ–΄μ Έ μ΄λ―Έμ§€μ˜ λ‹€μš΄λ‘œλ“œ μ‹œκ°„μ„ μ ˆμ•½ν•œλ‹€.

docker-image-layer

νŠΉμ • 이미지에 λŒ€ν•œ inspect 둜 layer ν™•μΈν•˜κΈ°

κ²°κ³ΌλŠ” μ•„λž˜μ™€ κ°™μœΌλ©°, RootFSλ₯Ό ν™•μΈν•˜μ—¬ ν•΄λ‹Ή 이미지가 9개의 λ ˆμ΄μ–΄λ‘œ κ΅¬μ„±λ˜μ–΄μžˆμŒμ„ λ³Ό 수 μžˆλ‹€.

Layer λ₯Ό μƒμ„±ν•˜λŠ” syntax

μƒμ„±ν•˜λŠ” syntax

  • FROM

    • κΈ°λ³Έ 이미지λ₯Ό μ§€μ •ν•˜λ©°, Dockerfile의 첫 번째 λͺ…령어이닀.

    • 이 λͺ…λ Ήμ–΄λŠ” 첫 번째 λ ˆμ΄μ–΄λ₯Ό λ§Œλ“ λ‹€.

  • RUN

    • μ‰˜ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜μ—¬ 이미지에 μƒˆλ‘œμš΄ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ„€μΉ˜ν•˜κ±°λ‚˜ 섀정을 λ³€κ²½ν•œλ‹€.

    • 각 RUN λͺ…λ Ήμ–΄λŠ” μƒˆλ‘œμš΄ λ ˆμ΄μ–΄λ₯Ό μƒμ„±ν•œλ‹€.

  • COPY

    • 호슀트 파일 μ‹œμŠ€ν…œμ—μ„œ μ»¨ν…Œμ΄λ„ˆ 파일 μ‹œμŠ€ν…œμœΌλ‘œ νŒŒμΌμ„ λ³΅μ‚¬ν•œλ‹€.

    • 각 COPY λͺ…λ Ήμ–΄λŠ” μƒˆλ‘œμš΄ λ ˆμ΄μ–΄λ₯Ό μƒμ„±ν•œλ‹€.

  • ADD

    • COPY와 μœ μ‚¬ν•˜μ§€λ§Œ, μΆ”κ°€λ‘œ URLμ—μ„œ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜κ±°λ‚˜ μ••μΆ•λœ νŒŒμΌμ„ μžλ™μœΌλ‘œ μ••μΆ• ν•΄μ œν•œλ‹€.

    • 각 ADD λͺ…λ Ήμ–΄λŠ” μƒˆλ‘œμš΄ λ ˆμ΄μ–΄λ₯Ό μƒμ„±ν•œλ‹€.

  • USER

    • μƒˆλ‘œμš΄ μ‚¬μš©μžλ₯Ό μ„€μ •ν•˜κ³  λ ˆμ΄μ–΄λ₯Ό μƒμ„±ν•œλ‹€.

    • ν•΄λ‹Ή μ‚¬μš©μžμ˜ UID와 GIDκ°€ μƒˆλ‘œμš΄ λ ˆμ΄μ–΄μ— λ°˜μ˜ν•œλ‹€.

μƒμ„±ν•˜μ§€ μ•ŠλŠ” syntax

  • CMD

    • μ»¨ν…Œμ΄λ„ˆκ°€ μ‹œμž‘λ  λ•Œ μ‹€ν–‰ν•  κΈ°λ³Έ λͺ…령을 μ§€μ •ν•œλ‹€.

    • 이 λͺ…λ Ήμ–΄λŠ” μƒˆλ‘œμš΄ λ ˆμ΄μ–΄λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.

  • ENTRYPOINT

    • μ»¨ν…Œμ΄λ„ˆκ°€ μ‹œμž‘λ  λ•Œ μ‹€ν–‰ν•  λͺ…령을 μ§€μ •ν•œλ‹€.

    • CMD와 ν•¨κ»˜ μ‚¬μš©λ  수 있으며, μƒˆλ‘œμš΄ λ ˆμ΄μ–΄λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.

  • EXPOSE

    • μ»¨ν…Œμ΄λ„ˆκ°€ λ…ΈμΆœν•  포트λ₯Ό μ§€μ •ν•œλ‹€.

    • 이 λͺ…λ Ήμ–΄λŠ” μƒˆλ‘œμš΄ λ ˆμ΄μ–΄λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.

  • ENV

    • ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•œλ‹€.

    • 각 ENV λͺ…λ Ήμ–΄λŠ” μƒˆλ‘œμš΄ λ ˆμ΄μ–΄λ₯Ό μƒμ„±ν•œλ‹€.

  • WORKDIR

    • μž‘μ—… 디렉토리λ₯Ό μ„€μ •ν•œλ‹€.

    • 이 λͺ…λ Ήμ–΄λŠ” μƒˆλ‘œμš΄ λ ˆμ΄μ–΄λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.

  • VOLUME

    • μ»¨ν…Œμ΄λ„ˆμ™€ 호슀트 κ°„μ˜ 데이터 λ³Όλ₯¨μ„ μ„€μ •ν•œλ‹€.

    • 이 λͺ…λ Ήμ–΄λŠ” μƒˆλ‘œμš΄ λ ˆμ΄μ–΄λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.


πŸ‘ Cached layers 와 Dockerfile λͺ…λ Ήμ–΄ μˆœμ„œ

  • 이미지 λΉŒλ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ 이전 λΉŒλ“œμ˜ λ ˆμ΄μ–΄λ₯Ό μž¬μ‚¬μš©ν•˜λ €κ³  μ‹œλ„ν•œλ‹€.

  • μ΄λ―Έμ§€μ˜ λ ˆμ΄μ–΄κ°€ λ³€κ²½λ˜μ§€ μ•Šμ€ 경우, λΉŒλ”λŠ” λΉŒλ“œ μΊμ‹œμ—μ„œ λ ˆμ΄μ–΄λ₯Ό κ°€μ Έμ˜¨λ‹€.

  • λ§ˆμ§€λ§‰ λΉŒλ“œ 이후 λ ˆμ΄μ–΄κ°€ λ³€κ²½λœ 경우 ν•΄λ‹Ή λ ˆμ΄μ–΄μ™€ κ·Έ 뒀에 μžˆλŠ” λͺ¨λ“  λ ˆμ΄μ–΄λ₯Ό λ‹€μ‹œ λΉŒλ“œν•œλ‹€.

docker-image-layer

μœ„μ˜ μ΄λ―Έμ§€μ—μ„œ 보듯이 Dockerfile은 λͺ¨λ“  ν”„λ‘œμ νŠΈ νŒŒμΌμ„ μ»¨ν…Œμ΄λ„ˆμ— 볡사(COPY . .) ν•œ λ‹€μŒ, λ‹€μŒ λ‹¨κ³„μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 쒅속성을 λ‹€μš΄λ‘œλ“œ(RUN go mod download) ν•œλ‹€.

  • ν”„λ‘œμ νŠΈμ˜ νŒŒμΌμ„ λ³€κ²½ν•˜λ©΄, COPY λ ˆμ΄μ–΄μ— λŒ€ν•œ μΊμ‹œκ°€ λ¬΄νš¨ν™” λœλ‹€.

  • λ˜ν•œ, κ·Έ 뒀에 μ˜€λŠ” λͺ¨λ“  λ ˆμ΄μ–΄μ— λŒ€ν•œ μΊμ‹œλ„ λ¬΄νš¨ν™”λœλ‹€.

μ—¬κΈ°μ„œ λ„μ»€νŒŒμΌ μ§€μΉ¨μ˜ μˆœμ„œ λ•Œλ¬Έμ— λΉŒλ”λŠ” νŒ¨ν‚€μ§€κ°€ λ³€κ²½λ˜μ§€ μ•Šμ•˜μŒμ—λ„ Go λͺ¨λ“ˆμ„ λ‹€μ‹œ λ‹€μš΄λ‘œλ“œν•΄μ•Ό ν•œλ‹€. Dockerfile μ§€μΉ¨ μˆœμ„œλ₯Ό λ³€κ²½ν•˜μ—¬ μ΄λŸ¬ν•œ 쀑볡을 λ°©μ§€ν•  수 μžˆλ‹€. μ†ŒμŠ€ μ½”λ“œκ°€ μ»¨ν…Œμ΄λ„ˆμ— λ³΅μ‚¬λ˜κΈ° 전에 쒅속성 λ‹€μš΄λ‘œλ“œ 및 μ„€μΉ˜κ°€ 이루어지도둝 μˆœμ„œλ₯Ό λ³€κ²½ν•œλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄, μ†ŒμŠ€ μ½”λ“œλ₯Ό λ³€κ²½ν•  λ•Œμ—λ„ λΉŒλ”κ°€ μΊμ‹œμ—μ„œ 쒅속성 λ ˆμ΄μ–΄λ₯Ό μž¬μ‚¬μš©ν•  수 μžˆλ‹€.

Go의 경우 go.mod 와 go.sumμ΄λΌλŠ” 두 개의 νŒŒμΌμ„ μ‚¬μš©ν•˜λŠ”λ°, μ΄λŠ” node의 package.json κ³Ό package-lock.json κ³Ό κ°™λ‹€. μˆœμ„œλ₯Ό μ•„λž˜μ™€ 같이 λ³€κ²½ν•œλ‹€.

  • COPY go.mod go.sum . λ₯Ό λ¨Όμ € λ°°μΉ˜ν•˜κ³  RUN을 톡해 쒅속성을 μ„€μΉ˜ν•œλ‹€.

  • κ·Έ 후에 COPY . . λͺ…λ Ήμ–΄λ‘œ μ†ŒμŠ€ μ½”λ“œλ₯Ό λ³΅μ‚¬ν•œλ‹€.

이제 μ†ŒμŠ€ μ½”λ“œλ₯Ό νŽΈμ§‘ν•˜λ©΄ 이미지λ₯Ό λΉŒλ“œν•  λ•Œ λΉŒλ”κ°€ 맀번 쒅속성을 λ‹€μš΄λ‘œλ“œν•˜μ§€ μ•ŠλŠ”λ‹€.

docker-image-layer

Last updated