Docker Study(1)
Chapter 1. κ°μν κΈ°μ κ³Ό 컨ν μ΄λ κ°μν
ν΄λΉ ν¬μ€νΈλ κ΅° 볡무 μ€ γκ°λ°μλ₯Ό μν μ¬μ΄ λ컀γλ₯Ό μ½κ³ νμ΅ν λ΄μ©μ κ°μΈμ μΌλ‘ μ 리ν κΈμ μμ±ν AIλ₯Ό ν΅ν΄ 1μ°¨ κ°κ³΅ν κΈμ λλ€.
μ°μ Dockerλ μλ²μ κΉκ² μ°κ΄λ κΈ°μ μ΄κΈ° λλ¬Έμ μν°νλΌμ΄μ¦ νκ²½μμ μλ²λ₯Ό μ΄μνλ λ°©μμ λν΄ λ¨Όμ μκ°νκ³ κ°κ² μ΅λλ€.
1. μλ² μ΄μ λ°©μκ³Ό κ°μν κΈ°μ
μλ²μμ μννΈμ¨μ΄λ₯Ό μ€ννλ λ°©μμλ λ² μ΄λ©ν, νμ΄νΌλ°μ΄μ λ₯Ό μ΄μ©ν κ°μλ¨Έμ , 컨ν μ΄λ λ±μ΄ μμ΅λλ€.
1.1. λ² μ΄λ©ν(Bare Metal)
물리μ μΈ νλμ¨μ΄μ OSλ₯Ό μ§μ μ€μΉνκ³ , ν΄λΉ OS μμμ μννΈμ¨μ΄λ₯Ό μ€ννλ λ°©μμ λλ€.
βββββββββββββββββββββββ
β Application β
βββββββββββββββββββββββ€
β Operating OS β
βββββββββββββββββββββββ€
β Hardware β
βββββββββββββββββββββββ
1.2. νμ΄νΌλ°μ΄μ (Hypervisor)
νλμ 물리μ μμ€ν μμ μ¬λ¬ κ°μλ¨Έμ μ μμ±νκ³ κ΄λ¦¬νλ κ°μν κΈ°μ μ λλ€.
νμ΄νΌλ°μ΄μ λ κ° κ°μλ¨Έμ μ CPU, λ©λͺ¨λ¦¬ λ±μ 리μμ€λ₯Ό ν λΉνκ³ , κ°μ νλμ¨μ΄μ λν μ κ·Όμ κ΄λ¦¬νλ μν μ ν©λλ€.
νμ΄νΌλ°μ΄μ λ νλμ¨μ΄ μμμ μ§μ μ€νλλ λ°©μ(Type 1)κ³Ό νΈμ€νΈ OS μμμ μ€νλλ λ°©μ(Type 2)μΌλ‘ ꡬλΆλ©λλ€.
λ€μμ Type 1 νμ΄νΌλ°μ΄μ λ₯Ό κΈ°μ€μΌλ‘ ν ꡬ쑰μ λλ€.
ββββββββββββββββ¬βββββββββββββββ
β Application β Application β
ββββββββββββββββΌβββββββββββββββ€
β Guest OS A β Guest OS B β
ββββββββββββββββ΄βββββββββββββββ€
β Hypervisor β
βββββββββββββββββββββββββββββββ€
β Hardware β
βββββββββββββββββββββββββββββββ
κ° κ°μλ¨Έμ μλ λ 립μ μΈ κ²μ€νΈ OSμ 컀λμ΄ μ‘΄μ¬ν©λλ€.
1.3. 컨ν μ΄λ(Container)
컨ν μ΄λλ OS 컀λμ κΈ°λ₯μ νμ©νμ¬ κ²©λ¦¬λ μ€ν νκ²½μ λ§λλ κΈ°μ μ λλ€.
리λ μ€μμλ μ£Όλ‘ Namespacesμ Cgroupsλ₯Ό νμ©ν©λλ€.
- Namespaces: νλ‘μΈμ€, νμΌμμ€ν μ λ§μ΄νΈ νκ²½, λ€νΈμν¬ λ±μ μμ€ν μμμ 격리ν©λλ€.
- Cgroups: CPU, λ©λͺ¨λ¦¬ λ±μ 리μμ€ μ¬μ©λμ μ ννκ³ κ΄λ¦¬ν©λλ€.
LXC(Linux Containers)λ μ΄λ¬ν 리λ μ€ μ»€λ κΈ°λ₯μ νμ©νλ λνμ μΈ μ»¨ν μ΄λ κΈ°μ μ€ νλμ λλ€.
ββββββββββββββββ¬βββββββββββββββ
β Container A β Container B β
β β β
β Application β Application β
β Libraries β Libraries β
ββββββββββββββββ΄βββββββββββββββ€
β Host Kernel β
βββββββββββββββββββββββββββββββ€
β Hardware β
βββββββββββββββββββββββββββββββ
컨ν μ΄λλ§λ€ λ³λμ 컀λμ΄ μ‘΄μ¬νλ κ²μ΄ μλλΌ, μ¬λ¬ 컨ν μ΄λκ° νλμ νΈμ€νΈ 컀λμ 곡μ νλ ꡬ쑰μ λλ€.
2. νμ΄νΌλ°μ΄μ μ 컨ν μ΄λμ μ°¨μ΄
νμ΄νΌλ°μ΄μ μ 컨ν μ΄λμ 곡ν΅μ μ λͺ¨λ 격리λ κ°μν νκ²½μ μ 곡νλ€λ κ²μ λλ€.
μ°¨μ΄μ μΌλ‘λ νμ΄νΌλ°μ΄μ κΈ°λ° κ°μλ¨Έμ μλ κ²μ€νΈ OSμ νΈμ€νΈ OSμ 컀λμ΄ λ 립μ μΌλ‘ μ‘΄μ¬ν μ μμ§λ§, 컨ν μ΄λλ νΈμ€νΈ 컀λμ 곡μ νλ€λ μ μ΄ μμ΅λλ€.
κ°μλ¨Έμ μ κ²½μ° μ ν리μΌμ΄μ μμ λ°μν μμ€ν μ½(System Call)μ κ²μ€νΈ OSμ 컀λμμ μ²λ¦¬λ©λλ€. μ΄λ κ°μ νλμ¨μ΄ μ κ·Όκ³Ό κ°μ μΌλΆ μμ μλ νμ΄νΌλ°μ΄μ μ κ°μ μ΄ νμν μ μμ΅λλ€.
λ°λ©΄ 컨ν μ΄λλ νΈμ€νΈ 컀λμ 곡μ νκΈ° λλ¬Έμ μ ν리μΌμ΄μ μμ λ°μν μμ€ν μ½μ νΈμ€νΈ 컀λμμ μ§μ μ²λ¦¬ν©λλ€.
[ Virtual Machine ]
Application
β
βΌ
Guest OS Kernel
β
βΌ
Virtual Hardware
β
βΌ
Physical Hardware
[ Container ]
Application
β
βΌ
Host OS Kernel
β
βΌ
Physical Hardware
μ ꡬ쑰λ κ°λ μ μΌλ‘ λ¨μνν κ²μΌλ‘, κ°μλ¨Έμ μ λͺ¨λ μμ€ν μ½μ΄ νμ΄νΌλ°μ΄μ λ₯Ό κ±°μΉλ κ²μ μλλλ€.
κ²°κ³Όμ μΌλ‘ 컨ν μ΄λλ λ³λμ κ²μ€νΈ OSλ₯Ό μ€ννμ§ μκΈ° λλ¬Έμ κ°μλ¨Έμ μ λΉν΄ μΌλ°μ μΌλ‘ 리μμ€ μ¬μ©λμ΄ μ κ³ μ€ν μ€λΉ μκ°μ΄ λΉ λ₯΄λ€λ μ΄μ μ κ°μ§λλ€.
Dockerλ μ΄λ¬ν 컨ν μ΄λ κ°μν κΈ°μ μ μ½κ² μ¬μ©ν μ μλλ‘ νλ νλ«νΌμ΄λΌκ³ 보면 λ©λλ€.
3. Dockerμ λμ ꡬ쑰
Dockerλ ν΄λΌμ΄μΈνΈ-μλ²(Client-Server) λͺ¨λΈμ κΈ°λ°μΌλ‘ ν©λλ€.
Dockerλ μ¬μ©μμ λͺ λ Ήμ μ λ¬νλ Docker Clientμ 컨ν μ΄λλ₯Ό κ΄λ¦¬νλ Docker DaemonμΌλ‘ ꡬμ±λ©λλ€.
βββββββββββββββββββ
β User β
ββββββββββ¬βββββββββ
β CLI Command
βΌ
βββββββββββββββββββ
β Docker Client β
ββββββββββ¬βββββββββ
β API Request
βΌ
βββββββββββββββββββ
β Docker Daemon β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Containers β
βββββββββββββββββββ
ν΄λΌμ΄μΈνΈκ° Docker κ΄λ ¨ λͺ λ Ήμ΄λ₯Ό CLIλ‘ μ€ννλ©΄ μ¬μ©μμ λͺ λ Ήμ API μμ²μΌλ‘ λ³ννμ¬ Docker Daemonμ μ λ¬ν©λλ€.
Docker Daemonμ ν΄λΉ μμ²μ λ°λΌ 컨ν μ΄λλ₯Ό μμ±νκ±°λ κ΄λ¦¬νλ λ±μ μμ μ μννκ³ , κ·Έ κ²°κ³Όλ₯Ό ν΄λΌμ΄μΈνΈμ μ λ¬ν©λλ€.
CLIλ₯Ό μ¬μ©νλ μ΄μ λ Docker Daemonμ APIμ μ§μ μμ²μ 보λ΄λ κ³Όμ μ΄ λ³΅μ‘νκΈ° λλ¬Έμ, μ¬μ©μκ° κ°λ¨ν λͺ λ Ήμ΄λ§μΌλ‘ APIλ₯Ό νΈμΆν μ μλλ‘ νκΈ° μν΄μμ λλ€.
4. Docker CLI κΈ°λ³Έ λͺ λ Ήμ΄
docker --help
Docker λͺ λ Ήμ΄μ λν λμλ§μ νμΈν μ μμ΅λλ€.
Docker λͺ λ Ήμ΄λ μ£Όλ‘ λ€μκ³Ό κ°μ νμμ μ·¨ν©λλ€.
docker [Management Command] [Command]
λλΆλ₯μ ν΄λΉνλ Management Commandλ κ΄λ¦¬ν λμμ λνλ΄λ©°, μΌλΆ λͺ λ Ήμ΄μμλ μλ΅ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄ 컨ν μ΄λ μ€ν λ° μμ λͺ λ Ήμ΄λ λ€μκ³Ό κ°μ΅λλ€.
# 컨ν
μ΄λ μμ± λ° μ€ν
docker run [μ΅μ
] μ΄λ―Έμ§λͺ
# 컨ν
μ΄λ μμ
docker rm 컨ν
μ΄λλͺ
/ID
μ λͺ λ Ήμ΄λ Management Commandλ₯Ό λͺ μνμ¬ λ€μκ³Ό κ°μ΄ μμ±ν μλ μμ΅λλ€.
# 컨ν
μ΄λ μμ± λ° μ€ν
docker container run [μ΅μ
] μ΄λ―Έμ§λͺ
# 컨ν
μ΄λ μμ
docker container rm 컨ν
μ΄λλͺ
/ID
μ¦, docker runκ³Ό docker container runμ λμΌν λͺ
λ Ήμ΄μ΄λ©°, docker rmκ³Ό docker container rm μμ λμΌν λͺ
λ Ήμ΄μ
λλ€.
μ 리
| κ΅¬λΆ | νΉμ§ |
|---|---|
| λ² μ΄λ©ν | 물리μ νλμ¨μ΄μ OSλ₯Ό μ§μ μ€μΉ |
| νμ΄νΌλ°μ΄μ | κ°μλ¨Έμ λ§λ€ λ 립μ μΈ κ²μ€νΈ OSμ 컀λ μ¬μ© |
| 컨ν μ΄λ | νΈμ€νΈ 컀λμ 곡μ νλ©΄μ μ€ν νκ²½ 격리 |
| Docker | 컨ν μ΄λ μμ± λ° κ΄λ¦¬λ₯Ό μν νλ«νΌ |
| Docker Client | CLI λͺ λ Ήμ API μμ²μΌλ‘ λ³ν λ° μ λ¬ |
| Docker Daemon | API μμ²μ λ°λΌ 컨ν μ΄λ κ΄λ¦¬ μμ μν |
Leave a comment