- Aiden's Lab αα ²αα ³α α ¦αα ₯
- Posts
- παα ₯α«αα ¦αα ΅αα ₯ αα ΅αα ΅αα ΅, αα ‘α«αα ³α―αα ΅αα ‘α« αα ‘αα §α« αα ³ααα ΅α―αα ‘? - αα ₯α«αα ¦αα ΅αα ₯ αα ΅αα ΅αα ΅αα ΄ αα ©αα ‘α« αα ’αΌαα ΅αα ³α« αα ‘αΌαα ₯αΈ
παα ₯α«αα ¦αα ΅αα ₯ αα ΅αα ΅αα ΅, αα ‘α«αα ³α―αα ΅αα ‘α« αα ‘αα §α« αα ³ααα ΅α―αα ‘? - αα ₯α«αα ¦αα ΅αα ₯ αα ΅αα ΅αα ΅αα ΄ αα ©αα ‘α« αα ’αΌαα ΅αα ³α« αα ‘αΌαα ₯αΈ
αα ₯α«αα ¦αα ΅αα ₯ αα ΅αα ΅αα ΅α α ³α― αα ©αα ‘α« αα ͺα«αα ₯α·αα ¦αα ₯ 'αα ‘α―' αα ‘α«αα ³αα ³α« αα ‘αΌαα ₯αΈαα ³α― αα ‘α―αα ‘αα ©αΈαα ΅αα ‘.
πΏμ»¨ν μ΄λ μ΄λ―Έμ§λ₯Ό 'μ' λ§λ€μ΄μΌ νλ μ΄μ
μ΄μ 컨ν μ΄λ μ΄λ―Έμ§λ μ°λ¦¬κ° κ°λ° νλ‘μ νΈλ₯Ό μ§νν λ μ½κ² μ νλ κ°λ μ΄ λμμ΅λλ€. λ 립λ νκ²½ μμμ νΉμ ν μ ν리μΌμ΄μ μ΄ μ€νλλ κ±Έ 보μ₯ν΄μ£ΌκΈ° λλ¬Έμ Kubernetesλ νΌλΈλ¦ ν΄λΌμ°λ(AWS, GCP λ±)λ₯Ό μ¬μ©νλ€λ©΄ κ±°μ νμ μμκ° λμμ£ .
κ·Έλ¬λ€λ³΄λ 컨ν μ΄λ μ΄λ―Έμ§λ₯Ό μ§μ λ§λλ κ²½μ°λ λ§μ΅λλ€. 곡κ°λ λ νμ§ν 리μμ 곡μ λλ μ΄λ―Έμ§λ₯Ό κ·Έλλ‘ μ¨λ λμ§λ§, λ΄ νλ‘μ νΈμ λ§μΆ°μ 컀μ€ν°λ§μ΄μ§μ΄ νμν λκ° μμΌλκΉμ. μλ§ κ³΅κ°νμ€ κ±°μμ.
μ°λ¦¬κ° 컨ν μ΄λ μ΄λ―Έμ§λ₯Ό λ§λ€ λ κ°μ₯ μ κ²½ μ°λ 건 무μμΈκ°μ? μλ§ μνλ μ ν리μΌμ΄μ μ μ μ μλ μ¬λΆμΌ ν λ°μ. κ·ΈλΌ 'μ ν리μΌμ΄μ μ΄ μ λμκ°λ' 컨ν μ΄λ μ΄λ―Έμ§κ° 'μ' λ§λ€μ΄μ§ 컨ν μ΄λ μ΄λ―Έμ§μΌκΉμ?
컨ν μ΄λ μ΄λ―Έμ§μ νμ§μ λ¨μν μ ν리μΌμ΄μ μ€ν κ°λ₯μ±μ λμ΄μ, μμ€ν μ μ λ°μ μΈ λ³΄μκ³Ό μμ μ±, μ΄μ ν¨μ¨μ±, λΉμ©κ³Όλ μ°κ΄μ΄ μμ΅λλ€. κ³ νμ§μ 컨ν μ΄λ μ΄λ―Έμ§λ μμ μ μ΄κ³ ν¨μ¨μ μΈ μ΄μ νκ²½ ꡬμΆμ κΈ°λ°μ΄ λλ κ±°μ£ .
λ°λΌμ μ΄λ―Έμ§ λΉλ λ¨κ³λΆν° 컨ν μ΄λ μ΄λ―Έμ§ νμ§μ λν μΈμμ λμ΄κ³ λ Έλ ₯μ κΈ°μΈμ΄λ κ²μ΄ μ€μν©λλ€.
μ¦, 컨ν μ΄λ μ΄λ―Έμ§μ μ΅μ’ νμ§μ λλΆλΆ Dockerfileμ λͺ μλ μ΄λ―Έμ§ λΉλ κ³Όμ μ μν΄ κ²°μ λ©λλ€. μλνλ©΄...
λ² μ΄μ€ μ΄λ―Έμ§
μ€μΉν ν¨ν€μ§
볡μ¬ν νμΌ
μ¬μ©μ
μ΄ λͺ¨λ μμκ° μ»¨ν μ΄λ μ΄λ―Έμ§ λΉλ κ³Όμ μμ μ ν΄μ§κΈ° λλ¬Έμ΄μ£ .
λ°λΌμ μ΄μ νκ²½μμ μ΄λ―Έμ§κ° μμ νκ³ ν¨μ¨μ μΌλ‘ λμνλ €λ©΄, Dockerfile μμ± λ° λΉλ κ³Όμ μ λν΄ μ΄ν΄νκ³ μ΅μ ννλ €λ λ Έλ ₯μ΄ νμμ λλ€.
π‘οΈλ³΄μ κ΄μ μμ μ λ§λ 컨ν μ΄λ μ΄λ―Έμ§λ 무μμΌκΉ?

κ·ΈλΌ μ λ§λ 컨ν μ΄λ μ΄λ―Έμ§λ μ νν 무μμΌκΉμ?
보μμ±κ³Ό ν¨μ¨μ±μ κ· ν μκ² κ°μΆ 컨ν μ΄λ μ΄λ―Έμ§κ° μ λ§λ€μ΄μ‘λ€κ³ λ³Ό μ μλλ°μ. κ·Έ μ€ λ³΄μ κ΄μ μμ μꡬλλ μ¬νμ ν° νλ‘ μ 리ν΄λ³΄λ©΄ μλμ κ°μ΅λλ€.
μλ§μ λ² μ΄μ€ μ΄λ―Έμ§ μ ν
λΆνμν μμ μ κ±°
μ΅μ κΆνμΌλ‘ μ€ν
보μμ±κ³Ό ν¨μ¨μ±μ΄λ λ κ°μ§ μμλ₯Ό μ κ°μΆλ κ²μ μ€λλ 컨ν μ΄λ μ΄μ νκ²½μμ λ§€μ° μ€μν©λλ€.
κ·Έλμ μ΄λ² κΈμμλ 컨ν μ΄λ μ΄λ―Έμ§λ₯Ό λΉλν λ 보μμ±μ μ±κΈΈ μ μλ νμ μ 리νμ΅λλ€. λ°λ‘ μ μ©ν μ μλ μ€μ§μ μΈ λ΄μ©λ§ λ€λ€μΌλ κΌ νμΈν΄λ³΄μΈμ.
β¨μ»¨ν μ΄λ μ΄λ―Έμ§μ 보μμ±μ μ±κΈ°λ ν
1οΈβ£ λμκ² λ§λ λ² μ΄μ€ μ΄λ―Έμ§ μ ννκΈ° (Alpine vs Distroless)
λ² μ΄μ€ μ΄λ―Έμ§λ μ΅μ’ μ΄λ―Έμ§ 보μκ³Ό μ΄λ―Έμ§ ν¬κΈ° λͺ¨λμ μ§μ μ μΈ μν₯μ λ―ΈμΉλ μμ£Ό μ€μν μμμ λλ€.
νΉν, μ΅μ λ² μ΄μ€ μ΄λ―Έμ§λ μ΄μ체μ κ΅¬μ± μμκ° κ·Ήλλ‘ μ νμ μΌλ‘ ν¬ν¨λμ΄ μκΈ° λλ¬Έμ μ΄λ―Έμ§ ν¬κΈ°μ 보μ 곡격 νλ©΄μ ν¨κ³Όμ μΌλ‘ μ€μ΄λ ν¨κ³Όκ° μμ΅λλ€.
κ°μ₯ λ§μ΄ μ¬μ©λλ μ΅μ λ² μ΄μ€ μ΄λ―Έμ§λ‘λ Alpineκ³Ό Distrolessκ° μμ΅λλ€.
Alpine:
κ°λ²Όμ°λ©΄μ ν¨ν€μ§ κ΄λ¦¬λ μ©μ΄ν©λλ€.
C λΌμ΄λΈλ¬λ¦¬λ‘
musl
libcλ₯Ό μ¬μ©νκΈ° λλ¬Έμglibc
λ₯Ό μ¬μ©νλ μ ν리μΌμ΄μ κ³Όλ νΈνμ± λ¬Έμ κ° λ°μνμ¬ μΆκ° ν¨ν€μ§λ₯Ό μ€μΉν΄μΌ ν μ μμ΅λλ€.
Distroless:
μκ³Ό κΈ°λ³Έ λκ΅¬κ° ν¬ν¨λμ΄ μμ§ μμ 보μμ±μ΄ λκ³
Alpine
λ³΄λ€ λ κ²½λνλ λ² μ΄μ€ μ΄λ―Έμ§μ λλ€.νμ§λ§ μμ΄ ν¬ν¨λμ΄μμ§ μκΈ° λλ¬Έμ 컨ν μ΄λ μ€ν ν λλ²κΉ μ΄ μ΄λ ΅λ€λ λ¨μ λ μ‘΄μ¬ν©λλ€.
κ° μ νμ§μ νΉμ₯μ μ΄ λ€λ₯΄κΈ° λλ¬Έμ μ ν리μΌμ΄μ μ μμ‘΄μ±κ³Ό νμν λꡬ μ 무, μ΄μ νκ²½ νΉμ±μ κ³ λ €ν΄μ κ°μ₯ μ ν©ν λ² μ΄μ€ μ΄λ―Έμ§λ₯Ό μ νν΄μΌ ν©λλ€.
2οΈβ£ Dockerfile RUN
μ§μμ΄λ‘ μ΄λ―Έμ§ λ΄μ λΆνμν μμ μ κ±°νκΈ°
λΉλ κ³Όμ μμ μμ±λ λΆνμν νμΌμ΄λ μΊμλ₯Ό μ κ±°νλ©΄ 컨ν μ΄λμ λν 보μ 곡격 νλ©΄μ μΆμν μ μμ΅λλ€.
Dockerfileμ RUN
μ§μμ΄λ‘ νμν ν¨ν€μ§λ₯Ό λͺ¨λ μ€μΉνλ€λ©΄, apt-get clean
μ΄λ μΊμ νμΌ μμ λͺ
λ Ήμ΄λ₯Ό λ³λλ‘ μ€νμμΌλ³΄μΈμ. μ ν리μΌμ΄μ
λμμ νμνμ§ μμ§λ§ 보μ μ¬κ³ μ μ
μ©λ μ μλ λ°μ΄ν°λ₯Ό μ§μΈ μ μμ΅λλ€.
μ΄ λ°©λ²μ μ΅μ’ μ΄λ―Έμ§ ν¬κΈ°λ₯Ό μ€μ΄λ λ°μλ λμμ΄ λ©λλ€.
3οΈβ£ rootκ° μλ μ μ λ‘ μ»¨ν μ΄λ μ€ννκΈ°
컨ν
μ΄λ λ΄λΆ νλ‘μΈμ€κ° κΈ°λ³Έμ μΌλ‘ root
κΆνμΌλ‘ μ€νλ κ²½μ°, 보μ μ¬κ³ μ μνμ΄ λμ± μ»€μ§λλ€.
μ ν리μΌμ΄μ μ rootκ° μλ μ μ λ‘ μ€ννλλ‘ μ€μ νλ©΄ 컨ν μ΄λμ λ¬΄λ¨ μΉ¨μ μ΄ λ°μνλλΌλ 곡격μκ° μ»λ κΆνμ μ΅μννμ¬ νΈμ€νΈλ λ€λ₯Έ 컨ν μ΄λλ‘μ νΌν΄ νμ°μ λ§μ μ μμ΅λλ€.
Dockerfileμ RUN
μ§μμ΄λ‘ rootκ° μλ μ μ λ₯Ό μμ±νκ³ USER
μ§μμ΄λ‘ μμ±ν μ¬μ©μλ₯Ό μ§μ νλ©΄ ν΄λΉ μ μ μ κΆνμΌλ‘ μ΄λ―Έμ§ λ΄ λͺ
λ Ήμ΄λ₯Ό μ€ννλλ‘ μ€μ ν μ μμ΅λλ€. μ’ λ μ¬μ΄ μ΄ν΄λ₯Ό μν΄ μλμ κ°μ΄ Dockerfile μμ μ½λλ₯Ό μ€λΉνμ΅λλ€.
# UID 1234 λ° GID 1234λ₯Ό κ°μ§ μλ‘μ΄ μ¬μ©μ(customuser) μμ±
RUN groupadd -g 1234 customgroup &&
\ useradd -m -u 1234 -g customgroup customuser
# ν΄λΉ μ΄λ―Έμ§μ μ¬μ©μλ₯Ό customuserλ‘ λ³κ²½
USER customuser
4οΈβ£ μ΄λ―Έμ§ λΉλ μ€μ λ―Όκ°μ 보λ μ μΈνκΈ°
λ°μ΄ν°λ² μ΄μ€ λΉλ°λ²νΈλ API ν€, ν΄λΌμ°λ μ격 μ¦λͺ λ± λ―Όκ°ν μ 보λ₯Ό μ΄λ―Έμ§ λΉλ κ³Όμ μ ν¬ν¨μν€λ κ²μ λ§€μ° μνν©λλ€.
ADD
λ COPY
λ‘ μ΄λ―Έμ§μ λ―Όκ°μ λ³΄κ° ν¬ν¨λ νμΌμ λ£κ±°λ, --build-arg
λ‘ λ―Όκ°μ 보 κ°μ μ λ¬νλ©΄ μ΄λ―Έμ§ λ μ΄μ΄μ ν΄λΉ λ°μ΄ν°κ° λ¨κΈ° λλ¬Έμ μ½κ² λ
ΈμΆλ μ μμ΅λλ€.
κ·Έλμ λ―Όκ°μ 보λ μ΄λ―Έμ§ λΉλ μμ μ΄ μλ 컨ν μ΄λ μ€ν μμ μ μμ ν λ°©λ²μΌλ‘ μ£Όμ λμ΄μΌ ν©λλ€.
5οΈβ£ 컨ν μ΄λ μ΄λ―Έμ§ 보μ ν΄ μ¬μ©νκΈ°
Trivyλ ClairλΌλ 컨ν μ΄λ μ΄λ―Έμ§ 보μ ν΄μ μ¬μ©νλ©΄ λ΄κ° λ§λ μ΄λ―Έμ§, λλ λ΄κ° μ¬μ©νλ €λ μ΄λ―Έμ§μ 보μ μ·¨μ½μ μ΄ μλμ§ νμΈν μ μμ΅λλ€.
Trivy:
컨ν μ΄λ μ΄λ―Έμ§, νμΌ μμ€ν , Git λ νμ§ν 리 λ± λ€μν λμμ λΉ λ₯΄κ³ μ½κ² μ€μΊνλ μ€νμμ€ μ·¨μ½μ νμ§ λꡬμ λλ€.
μ΄μ체μ ν¨ν€μ§λΏλ§ μλλΌ μ ν리μΌμ΄μ μ’ μμ±κΉμ§ κ²μ¬ κ°λ₯ν©λλ€.
CI/CD νμ΄νλΌμΈμ Trivyλ‘ μ€μΊνλ μ€ν μ΄μ§λ₯Ό μΆκ°νλ©΄ 보μ μ·¨μ½μ μ΄ ν¬ν¨λ μ΄λ―Έμ§κ° μ΄μ νκ²½μ λ°°ν¬λλ κ²μ μ°¨λ¨νλ '보μ κ²μ΄νΈμ¨μ΄' μν μ μνν μ μμ΅λλ€.
Clair:
컨ν μ΄λ μ΄λ―Έμ§μ ꡬμ±μμλ₯Ό λΆμν΄μ μ·¨μ½μ μ λ³΄κ³ ν΄μ£Όλ μ€νμμ€ λꡬμ λλ€.
μ΅μ μ·¨μ½μ μ μ£ΌκΈ°μ μΌλ‘ μ λ°μ΄νΈνλ κΈ°λ₯κ³Ό Webhookμ νμ©ν μλ¦Ό κΈ°λ₯μ μ§μν©λλ€.
Trivyμ λ§μ°¬κ°μ§λ‘ CI/CD νμ΄νλΌμΈμ μ μ©νμ¬ λ°°ν¬ μ 컨ν μ΄λ μ΄λ―Έμ§ μ€μΊν μ μκ³ , μ€μΊ κ²°κ³Όλ₯Ό μλ¦Ό κΈ°λ₯μΌλ‘ ν λ΄μ μ ννλ λ±μ νμ©μ΄ κ°λ₯ν©λλ€.
Clairμ λν΄ κ΄μ¬μ΄ μκΈ°μ ¨λ€λ©΄ [[Clair μκ°|μ κ° μ΄μ μ μκ°ν κΈ]]μ νμΈν΄λ³΄μΈμ.
πλ§λ¬΄λ¦¬
컨ν μ΄λ μ΄λ―Έμ§λ κ°λ° κ³Όμ μμ ν λ² λ§λ€κ³ λλλ κ²μ΄ μλκΈ° λλ¬Έμ μ§μμ μΈ κ΄λ¦¬κ° νμν©λλ€.
μλ‘μ΄ λ³΄μ μ·¨μ½μ μ μ§κΈλ λμμμ΄ λ°κ²¬λκ³ , 컨ν μ΄λ μ΄λ―Έμ§κ° μ¬μ©νλ λ² μ΄μ€ μ΄λ―Έμ§λ μ ν리μΌμ΄μ μ’ μμ±λ μ λ°μ΄νΈκ° νμνμ£ .
μκ°μ΄ μ§λ μλ‘ μ»¨ν μ΄λ μ΄λ―Έμ§μ 보μ μνμ μ΅μ μ± λͺ¨λ μ νλ κ°λ₯μ±μ΄ μλ κ²μ λλ€.
κ·Έλ κΈ° λλ¬Έμ 컨ν μ΄λ μ΄λ―Έμ§μ μμ μ±κ³Ό μ΅μ μνλ₯Ό μ μ§νλ €λ©΄ μ κΈ°μ μΈ μ·¨μ½μ μ€μΊ, λ² μ΄μ€ μ΄λ―Έμ§ λ° μ’ μμ± μ λ°μ΄νΈκ° ν¬ν¨λ μ¬λΉλ νλ‘μΈμ€κ° μ§μμ μΌλ‘ μ΄λ£¨μ΄μ ΈμΌ ν©λλ€.
νμ§λ§ μ΄λ° μμ μ μλμΌλ‘ μ§μ νκΈ°μ νκ³κ° μμ΅λλ€.
μ΄λ CI/CD νμ΄νλΌμΈμ νμ©ν΄μ 컨ν μ΄λ μ΄λ―Έμ§ λΉλμ μ λ‘λλ₯Ό μλννλ©΄ ν¨μ¨μ±κ³Ό λ°λ³΅ κ°λ₯μ±μ΄ 보μ₯λ©λλ€.
μ¬κΈ°μ μ΄μ μ μ΄ν΄λ΄€λ Trivyλ Clairμ μλ 보μ μ€μΊ κΈ°λ₯μ νμ©νλ©΄ μ΄λ―Έμ§ λ΄μ μ μ¬νκ³ μλ λ¬Έμ λ₯Ό μ‘°κΈ°μ λ°κ²¬νλ λ°μ ν° λμμ΄ λμ£ .
μ§ν μ€μΈ νλ‘μ νΈμ 컨ν μ΄λ μ΄λ―Έμ§λ₯Ό μ¬μ©νλ€λ©΄, 보μ κ΄μ μμ κ°μ ν μ μ μλμ§ νλ² μ΄ν΄λ³΄λ 건 μ΄λ¨κΉμ?
μμ¦ IT μ κ³μμ 보μμ΄ νλκ° λκ³ μλ λ§νΌ, 보μμ λν μκ°μ΄ λμ΄μ§ λΏλ§ μλλΌ νμλ κΈ°μ¬ν μ μλ κΈ°νκ° λ μ§λ λͺ¨λ₯΄λκΉμ!
References
β¨μ΄λ² λ΄μ€λ ν°λ μ΄λ μ ¨λμ?
μ΄λ² κΈμμ λ€λ£¬ μ£Όμ μ λν΄ μ΄λ»κ² μκ°νλμ§ μλ €μ£ΌμΈμ! λ΄μ€λ ν°λ₯Ό λ λμ λ°©ν₯μΌλ‘ κ°μ νκΈ° μν΄ μλ νΌμμ μ§§μ νΌλλ°±μ λ°κ³ μμ΄μ.
π νΌλλ°± 보λ΄κΈ° (1~2λΆ μμ)
μ¬λ¬λΆλ€μ μμ€ν μ견μ Aidenβs Lab λ΄μ€λ ν°μκ² ν° νμ΄ λ©λλ€!
πAidenβs Labμμ λ λ§μ μν°ν΄μ λ§λ보μΈμ
λ°νλ λ΄μ€λ ν°λ₯Ό μμΉ΄μ΄λΉνκ³ λ€μν μ 보λ₯Ό 곡μ νλ κΈ°μ λΈλ‘κ·Έλ₯Ό μ΄μ μ€μ λλ€.