Docker
π§ What is Docker
컨ν μ΄λ κΈ°λ° κ°μν λꡬ
μ ν리μΌμ΄μ μ 컨ν μ΄λλΌλ λ¨μλ‘ μ€ννκ³ λ°°ν¬νλ κΈ°μ
GoμΈμ΄λ‘ μμ±λ 리λ μ€ μ»¨ν μ΄λ κΈ°λ°μΌλ‘ νλ μ€νμμ€ κ°μν νλ«νΌ
μ‘°κΈ λ μμΈνκ² μ€λͺ νκΈ° μν΄μλ λͺ κ°μ§ μμμΌ νλ ν€μλκ° μλ€.
κ°μν κΈ°μ
컨ν μ΄λ
π§΅ κ°μν κΈ°μ
κ°μν κΈ°μ μ νλμ μ»΄ν¨ν°λ₯Ό μ¬λ¬ κ°μ μ»΄ν¨ν°λ₯Ό μ¬μ©νλ κ² μ²λΌ μ¬μ©ν μ μκ² νλ κΈ°μ μ΄λ€. μ¦, νλμ μ»΄ν¨ν°μμ λ€μμ κ°μ νκ²½μ λ§λ€μ΄ νλ‘κ·Έλ¨μ΄λ μ΄μ 체μ λ₯Ό μ€ννλ κΈ°μ μ΄λ€.
νΈν κ³Ό λ°©μ λΉμ λ κ°μν κΈ°μ μ μ½κ² μ΄ν΄νλλ° λμμ΄ λλ€.
ν 건물μ ν μ¬λμ΄ μ΄ μ μλ€κ³ κ°μ νλ€. μ΄ κ±΄λ¬Όμ μ»΄ν¨ν°μ 물리μ νλμ¨μ΄λ₯Ό λνλΈλ€. κ°κ°μ μ¬λ (μ΄μ체μ λ° μ ν리μΌμ΄μ )μ ν΄λΉ 건물μ λ μ μ μΌλ‘ μ¬μ©νλ€. μ΄λ λ§€μ° λΉν¨μ¨μ μ΄λ€.
μ΄μ κ°μ 건물(물리μ νλμ¨μ΄)μ νΈν μ μ§μλ€κ³ μκ°νμ. νΈν μ μ¬λ¬ κ°μ λ°©μΌλ‘ ꡬμ±λμ΄μμΌλ©°, κ°κ°μ λ°©μ λ 립μ μΌλ‘ μ΄μλλ€. κ° λ°©μ κ°μ λ¨Έμ (VM)μ λνλΈλ€. νΈν μ κ°μν μννΈμ¨μ΄ (νμ΄νΌλ°μ΄μ ) μν μ νλ€. κ° λ°©μλ μ¬λ¬ μλ(μ΄μ체μ λ° μ ν리μΌμ΄μ )μ΄ λ¨Έλ¬Ό μ μλ€.
π νμ΄νΌλ°μ΄μ
물리μ νλμ¨μ΄ μμμ μ¬λ¬ κ°μ λ¨Έμ (VM)μΌλ‘ λΆν νκ³ κ΄λ¦¬νλ κ°μν μννΈμ¨μ΄
OSμ μμμ ν λΉ λ° μ‘°μ¨
OSλ€μ μμ²μ λ²μνμ¬ νλμ¨μ΄μ μ λ¬
κ°μν κΈ°μ μ μ€μ μ
μν©: κ°λ° νμμ μ¬λ¬ μ΄μ체μ λ₯Ό ν μ€νΈ
λΉμ
μ¬λ¬ λ°©μ΄ μλ νΈν μ μ¬μ©νλ€.
κ° λ°©μ Windows, Linux, macOS λ±μ μ΄μ체μ λ₯Ό μ€μΉνλ€.
κ°λ°μλ κ°κ°μ λ°©μμ λ 립μ μΌλ‘ μ΄μ체μ λ₯Ό ν μ€νΈν μ μλ€.
μ€μ μ: VMwareλ VirtualBoxλ₯Ό μ¬μ©νμ¬ νλμ 물리μ μ»΄ν¨ν°μμ μ¬λ¬ μ΄μ체μ λ₯Ό λμμ μ€ννλ€.
κ°μν κΈ°μ μ μ₯μ
ν¨μ¨μ±: νλμ ν° κ±΄λ¬Ό(물리μ νλμ¨μ΄)μ μ¬λ¬ λ°©(κ°μ λ¨Έμ )μ λ§λ€μ΄ 리μμ€λ₯Ό ν¨μ¨μ μΌλ‘ μ¬μ©
μ μ°μ±: νμμ λ°λΌ λ°©(κ°μ λ¨Έμ )μ μΆκ°νκ±°λ μ κ±°
격리: ν λ°©μμ λ¬Έμ κ° λ°μν΄λ λ€λ₯Έ λ°©μ μν₯μ λ―ΈμΉμ§ μμ
κ°μν κΈ°μ μ ν΅ν΄ μ»΄ν¨ν° μμμ λ ν¨μ¨μ μΌλ‘ μ¬μ©νκ³ , λ 립λ νκ²½μ μ 곡νμ¬ μ¬λ¬ μ΄μ체μ μ μ ν리μΌμ΄μ μ λμμ μ€νν μ μλ€. μ΄λ₯Ό ν΅ν΄ λΉμ© μ κ°, μ μ°μ± λ° νμ₯μ±μ μ 곡νλ€.
κ°μν κΈ°μ μ
νλμ¨μ΄ 리μμ€(νλ‘μΈμ, λ©λͺ¨λ¦¬, μ μ₯μ λ±)λ₯Ό μΆμν νλ€.
λ©λͺ¨λ¦¬, νλμ¨μ΄, 컨ν μ΄λ, λ€νΈμν¬λ₯Ό κ°μν νλ€.
κ°μ λ¨Έμ (Virtual Machine, VM) VS 컨ν
μ΄λ(Container)
κ°μν κΈ°μ μλ κ°μ λ¨Έμ (Virtual Machine, VM)κ³Ό 컨ν μ΄λ(Container)λ°©μμ΄ μ‘΄μ¬νλ©°, κ°μ λ€λ₯Έ μ κ·Ό λ°©μμ κ°μ§κ³ μλ€.
κ°μ λ¨Έμ (Virtual Machine, VM)
νΈμ€νΈ μ»΄ν¨ν°μμ νμ΄νΌλ°μ΄μ λΌλ μννΈμ¨μ΄λ₯Ό μ¬μ©νμ¬ μ¬λ¬ κ°μ λ 립μ μΈ κ°μ νκ²½μ μμ±νμ¬, νλμ 물리μ μΈ μ»΄ν¨ν° μμ(CPU, λ©λͺ¨λ¦¬, μ μ₯μ₯μΉ λ±)μ κ°μμ μΌλ‘ λΆν νλ€. (νΈμ€νΈ μ»΄ν¨ν°μ μμμ κ°μμ μΌλ‘ ν λΉλ°μ μ¬μ©)
κ° κ°μ λ¨Έμ μ μμ ν μ΄μ 체μ μ μ ν리μΌμ΄μ μ ν¬ν¨νλ€.
κ° VMμ μ체 컀λμ κ°μ§κ³ μμΌλ©°, νΈμ€νΈμλ μμ ν 격리λ νκ²½μμ μ€ννλ€.
κ°μ λ¨Έμ μ λΉκ΅μ 무κ²κ³ λ리μ§λ§, λ€μν μ΄μ 체μ λ₯Ό νΈμ€νΈνλ λ° μ μ©νλ€.
ν΅μ¬μ μλμ κ°λ€.
νΈμ€νΈμ μμμ κ°μμ μΌλ‘ ν λΉλ°μ μ¬μ©
μ체 컀λμ κ°μ§κ³ μμΌλ©°, μμ ν μ΄μ 체μ μ μ ν리μΌμ΄μ μ ν¬ν¨

컨ν
μ΄λ(Container)
νΈμ€νΈ μ΄μ 체μ 컀λμ 곡μ νλ€.
μ¬λ¬ κ°μ 격리λ νλ‘μΈμ€λ₯Ό μ€ννλ κ²½λνλ λ°©μμ΄λ€.
νΈμ€νΈμ 리μμ€λ₯Ό 곡μ ν΄ μ€ννλ©°, κ° μ»¨ν μ΄λλ μμ© νλ‘κ·Έλ¨μ μ€ννλ λ° νμν λͺ¨λ κ²μ ν¬ν¨νλ€.
κ°μ λ¨Έμ (VM)λ³΄λ€ κ°λ³κ³ μμ μκ°μ΄ λΉ λ₯΄λ©°, μμ μλΉκ° μ λ€.
κ° μ»¨ν μ΄λλ νΈμ€νΈμ 컨ν μ΄λ κ°μ νλ‘μΈμ€ μμ€μ 격리λ₯Ό μ 곡νμ¬, μ¬λ¬ μμ© νλ‘κ·Έλ¨μ λμΌν νΈμ€νΈμμ μμ νκ² μ€νν μ μλ€.
ν΅μ¬μ μλμ κ°λ€.
νΈμ€νΈμ 리μμ€ κ³΅μ
νΈμ€νΈ μ΄μ체μ μμ μ¬λ¬κ°μ 격리λ νκ²½(νλ‘μΈμ€) μμ±

μ΄λ€ κ²μ μ νν΄μΌ νλκ°
κ°μ λ¨Έμ μ μμ ν μ΄μ 체μ νκ²½μ΄ νμν κ²½μ°μ μ μ©νλ€.
컨ν μ΄λλ κ²½λνλ νκ²½μμ μμ© νλ‘κ·Έλ¨μ μ€ννκ³ κ΄λ¦¬νλλ° ν¨μ¨μ μ΄λ€.
μΌλ°μ μΌλ‘ μ ν리μΌμ΄μ μ λ°°ν¬νκΈ° μν΄μλ μμμ λμ± ν¨μ¨μ μΌλ‘ μ¬μ©νκ³ κ°λ²Όμ΄ 컨ν μ΄λκ° μ νΈλλ€.
컨ν
μ΄λλ κ°μ λ¨Έμ μ λΉν΄μ μ κ°λ³κ³ λΉ λ₯ΌκΉ
곡μ 컀λ
컨ν μ΄λλ νΈμ€νΈ μ΄μ 체μ μ 컀λμ 곡μ νλ λ°λ©΄, VMμ κ° VMμ΄ λ 립μ μΈ μ΄μ 체μ 컀λμ κ°μ§κ³ μλ€. μ΄λ‘ μΈν΄, 컨ν μ΄λλ VMλ³΄λ€ ν¨μ¬ μ μ μ©λμ μ°¨μ§νλ©° μμ μκ°λ λ λΉ λ₯΄λ€.
리μμ€ κ³΅μ
컨ν μ΄λλ νΈμ€νΈ μμ€ν μ μμμ 곡μ ν΄μ μ€νλλ λ°λ©΄, κ°μ λ¨Έμ μ 물리μ μΈ μμμ ν λΉ λ°μμ μ¬μ©λκΈ° λλ¬Έμ, λ λ§μ μ€λ²ν€λκ° λ°μνλ€.
μ΄λ―Έμ§ ꡬ쑰
컨ν μ΄λ μ΄λ―Έμ§λ μμ© νλ‘κ·Έλ¨κ³Ό κ·Έμ νμν μ’ μμ±λ§ ν¬ν¨νλ λ°λ©΄, VM μ΄λ―Έμ§λ μμ ν μ΄μ 체μ μ μ ν리μΌμ΄μ μ ν¬ν¨νκ³ μλ€. λ°λΌμ 컨ν μ΄λ μ΄λ―Έμ§λ λ μκ³ κ°λ³λ€.
κ°μν κ³μΈ΅μ μ°¨μ΄
VMμ νμ΄νΌλ°μ΄μ λ₯Ό μ¬μ©νμ¬ νΈμ€νΈ μμ€ν κ³Ό κ° VM μ¬μ΄μ μΆμνλ₯Ό μ 곡
컨ν μ΄λλ νΈμ€νΈ μ΄μ 체μ μ 컀λμ μ§μ μ¬μ©νλ―λ‘ λ μ μ μΆμν κ³μΈ΅μ΄ νμνλ€.
μ΄λ λ μ μ μ€λ²ν€λμ λ λΉ λ₯Έ μ±λ₯μ κ°μ Έμ¨λ€.
μ°¨μ΄μ μ 리
κ°μν λ 벨
κ°μ λ¨Έμ : νλμ¨μ΄ λ 벨μμ κ°μνλ₯Ό μ 곡νλ©° κ° κ°μ λ¨Έμ μλ κ³ μ μ OSκ° μμ.
컨ν μ΄λ: μ΄μ체μ λ 벨μμ κ°μνλ₯Ό μ 곡νκ³ νΈμ€νΈ OSλ₯Ό 곡μ .
리μμ€ μ¬μ©
κ°μ λ¨Έμ : μμ ν λ 립λ νκ²½μ μ 곡νκΈ° λλ¬Έμ λ λ§μ 리μμ€λ₯Ό μλΉν¨.
컨ν μ΄λ: κ°λ²Όμ°λ©° νμν 리μμ€λ§ μ¬μ©νμ¬ ν¨μ¬ λ ν¨μ¨μ μ.
λΆν μκ°
κ°μ λ¨Έμ : OSλ₯Ό ν¬ν¨νλ―λ‘ λΆν μ λ κΈ΄ μκ°μ΄ κ±Έλ¦Ό.
컨ν μ΄λ: κ°μ λ¨Έμ μ λΉν΄ μλ±ν μλλ‘ (λͺ μ΄ λ΄) μμν μ μμ.
κ΄λ¦¬ λ° μ μ§λ³΄μ
κ°μ λ¨Έμ : OSλ₯Ό ν¬ν¨νλ―λ‘ ν¨μΉ, 보μ μ λ°μ΄νΈ λ± κ΄λ¦¬κ° λ 볡μ‘ν μ μμ.
컨ν μ΄λ: μ ν리μΌμ΄μ κ³Ό κ·Έ μ’ μμ±λ§μ ν¬ν¨νλ―λ‘ κ΄λ¦¬κ° λΉκ΅μ κ°λ¨ν¨.
λ컀λ 컨ν
μ΄λ κΈ°λ° κ°μν λꡬ
λ컀μ λν΄μ λ€μ λ§νμλ©΄, 컨ν μ΄λ κΈ°λ° κ°μν λꡬμ΄λ©°, μ ν리μΌμ΄μ μ 컨ν μ΄λλΌλ λ¨μλ‘ κ²©λ¦¬νμ¬ μ€ννκ³ λ°°ν¬νλ κΈ°μ μ΄λ€. λν, λ€μν μ΄μ체μ μμ μ¬μ©ν μ μμΌλ©°, 컨ν μ΄λνλ μ ν리μΌμ΄μ μ μμ½κ² λΉλ, λ°°ν¬, κ΄λ¦¬ν μ μλ λ€μν κΈ°λ₯μ μ 곡νλ€.
λ컀 μν€ν
μ³(Docker Architecture)
Docker Client
Docker Host(Docker Server)
Docker Registry
λ컀 ν΄λΌμ΄μΈνΈ(Docker Client)
μ¬μ©μμ λ컀 λ°λͺ¬ κ°μ μΈν°νμ΄μ€ μν μ νλ©°, λ컀λ₯Ό μ¬μ©νκΈ° μν 컀맨λ λΌμΈ λꡬμ΄λ€.
μ¬μ©μλ λ컀 ν΄λΌμ΄μΈνΈλ₯Ό ν΅ν΄ λ컀 νΈμ€νΈμ λ컀 λ°λͺ¬μκ² λͺ λ Ήμ μ λ¬νλ€.
docker λͺ λ Ήμ΄λ₯Ό μ¬μ©νλ©΄ Docker daemonμΌλ‘ 보λ΄μ΄ μ€ννλ€.
λ컀 νΈμ€νΈ(Docker Host, Docker Server)
λ컀 μμ§μ΄ μ€μΉλ, λ컀 컨ν μ΄λλ₯Ό μ€ννλλ° μ¬μ©λλ κ°μ λ¨Έμ μ΄λ€.
λ컀 μ΄λ―Έμ§μ μ μ₯, 컨ν μ΄λ μ€ν, λ컀 ν΄λΌμ΄μΈνΈμ ν΅μ νλ€.
λ컀 λ°λͺ¬μ μ€ννμ¬ μ»¨ν μ΄λλ₯Ό μμ±/μμ/μ€μ§ λ° κ΄λ¦¬λ₯Ό μννλ μν μννλ€.
νΈμ€νΈ μ΄μ 체μ μ 리μμ€λ₯Ό μ¬μ©νμ¬ μ»¨ν μ΄λλ₯Ό μ€ννκ³ κ΄λ¦¬νλ€.
π Docker Demon
λ컀 μμ§μ ν΅μ¬ κ΅¬μ± μμ
λ컀 νΈμ€νΈμμ μ€νλλ©°, λ컀 ν΄λΌμ΄μΈνΈμ μνΈ μμ©νκ³ , λ컀 μ΄λ―Έμ§μ 컨ν μ΄λλ₯Ό κ΄λ¦¬
μΈλΆμμ μ΄λ―Έμ§λ₯Ό λ€μ΄λ‘λνκ³ λΉλνλ μμ μ μν
λ컀 λ μ§μ€νΈλ¦¬(Docker Registry)
λ컀 μ΄λ―Έμ§λ₯Ό μ μ₯νλ μ€μ μ μ₯μμ΄λ€.
λ컀 ν΄λΌμ΄μΈνΈλ λ컀 λ μ§μ€νΈλ¦¬μμ μ΄λ―Έμ§λ₯Ό κ²μ/νΈμ/ν ν μ μλ€.
λ컀 νΈμ€νΈμμ μ€νλλ©°, λ컀 ν΄λΌμ΄μΈνΈμ μνΈ μμ©νκ³ , λ컀 μ΄λ―Έμ§μ 컨ν μ΄λλ₯Ό κ΄λ¦¬νλ€.

Dockerfile, Docker Image, Docker Container
Dockerfile
λ컀 μ΄λ―Έμ§λ₯Ό λΉλνκΈ° μν ν μ€νΈ νμΌμ΄λ©°, λ컀 μ΄λ―Έμ§λ₯Ό ꡬμ±νλ λͺ λ Ήμ΄μ μ€μ μ΄ ν¬ν¨λλ€. λ컀 νμΌμ μ¬μ©νμ¬ λ°λ³΅μ μΈ μ΄λ―Έμ§ λΉλλ₯Ό μλν ν μ μλ€.
Docker image
λ컀 컨ν μ΄λλ₯Ό μ€ννλλ° νμν νμΌκ³Ό μ€μ μ ν¬ν¨νλ κ°λ³κ³ λ 립μ μΈ μ€ν κ°λ₯ ν¨ν€μ§μ΄λ€. λ컀 λ μ§μ€νΈλ¦¬μμ κ°μ Έμ¬ μ μκ³ , λ컀 νμΌμ μ¬μ©νμ¬ λΉλν μλ μλ€.
Docker container
λ컀 μ΄λ―Έμ§μ μΈμ€ν΄μ€μ΄λ©°, 격리λ νκ²½μμ μ€νλλ€. νΈμ€νΈ μμμ 곡μ νμ§λ§, νΈμ€νΈμλ νλ‘μΈμ€ λ 벨μμ 격리λμ΄ μ€νλλ€.
Last updated