Docker
Dockerλ
Dockerλ μ ν리μΌμ΄μ μ λΉ λ₯΄κ³ κ°νΈνκ² λ°°ν¬νκ³ μ€νν μ μλλ‘ μ§μνλ 컨ν μ΄λ κΈ°λ° νλ«νΌμ λλ€. 컨ν μ΄λλ μ ν리μΌμ΄μ κ³Ό κ·Έ μ ν리μΌμ΄μ μ΄ νμλ‘ νλ λͺ¨λ μμ‘΄μ±μ νλλ‘ λ¬Άμ΄ λ 립μ μΌλ‘ μ€νν μ μλ νκ²½μ μ 곡ν©λλ€. μ΄λ₯Ό ν΅ν΄ "ν λ² κ΅¬μΆνλ©΄ μ΄λμλ μ€ν"ν μ μλ νκ²½μ ꡬνν μ μμ΅λλ€.
Dockerμ μ£Όμ ν€μλ
1. μ΄λ―Έμ§(Image)
- Docker μ΄λ―Έμ§λ μ ν리μΌμ΄μ κ³Ό κ·Έ μ€νμ νμν λͺ¨λ κ²μ ν¬ν¨νλ μ½κΈ° μ μ© ν νλ¦Ώμ λλ€. μ΄λ―Έμ§μλ μ½λ, λ°νμ, λΌμ΄λΈλ¬λ¦¬, νκ²½ λ³μ, κ΅¬μ± νμΌ λ±μ΄ ν¬ν¨λ©λλ€.
- μ΄λ―Έμ§λ 컨ν μ΄λλ₯Ό μμ±νκΈ° μν μ²μ¬μ§ μν μ ν©λλ€.
2. 컨ν μ΄λ(Container)
- 컨ν μ΄λλ μ΄λ―Έμ§λ₯Ό μ€νν μνλ₯Ό μλ―Έν©λλ€.
- 컨ν μ΄λλ 격리λ 곡κ°μμ μ ν리μΌμ΄μ μ μ€ννλ©°, νμν λͺ¨λ μμ‘΄μ±μ ν¬ν¨ν©λλ€.
- νλμ μμ€ν μμ μ¬λ¬ κ°μ 컨ν μ΄λλ₯Ό λ 립μ μΌλ‘ μ€νν μ μμ΅λλ€.
3. λ컀 νμΌ(Dockerfile)
- Dockerfileμ Docker μ΄λ―Έμ§λ₯Ό μμ±νκΈ° μν μ€ν¬λ¦½νΈμ λλ€. μ΄ νμΌμλ μ΄λ―Έμ§λ₯Ό λΉλνλ λ° νμν λͺ λ Ήμ΄λ€μ΄ ν¬ν¨λμ΄ μμ΅λλ€.
- Dockerfileμ μ¬μ©νλ©΄ μ΄λ―Έμ§ μμ± κ³Όμ μ μλννκ³ μΌκ΄λκ² λ§λ€ μ μμ΅λλ€.
4. Docker Hub
- Docker Hubλ Docker μ΄λ―Έμ§λ₯Ό 곡μ νκ³ μ μ₯νλ μ€μ μ μ₯μμ λλ€. μ¬μ©μλ Docker Hubμμ λ€μν κ³΅κ° μ΄λ―Έμ§λ₯Ό λ€μ΄λ‘λνκ±°λ μμ λ§μ μ΄λ―Έμ§λ₯Ό μ λ‘λν μ μμ΅λλ€.
5. λ³Όλ₯¨ (Volume)
- λ³Όλ₯¨μ 컨ν μ΄λμ λ°μ΄ν°λ₯Ό μ§μμ μΌλ‘ μ μ₯ν μ μλ λ©μ»€λμ¦μ λλ€. 컨ν μ΄λκ° μμ λλλΌλ λ³Όλ₯¨μ μ μ₯λ λ°μ΄ν°λ μ μ§λ©λλ€.
- λ³Όλ₯¨μ μ¬μ©νλ©΄ λ°μ΄ν°λ₯Ό 컨ν μ΄λμ λ 립μ μΌλ‘ κ΄λ¦¬ν μ μμ΅λλ€.
6. λ€νΈμν¬ (Network)
- Docker λ€νΈμν¬λ 컨ν μ΄λ κ°μ ν΅μ μ κ΄λ¦¬νλ λ°©μμ λλ€. Dockerλ μ¬λ¬ κ°μ§ λ€νΈμν¬ λλΌμ΄λ²λ₯Ό μ 곡νμ¬ λ€μν λ€νΈμν¬ μ€μ μ μ§μν©λλ€.
- κΈ°λ³Έμ μΌλ‘ λͺ¨λ 컨ν μ΄λλ λΈλ¦¬μ§ λ€νΈμν¬λ₯Ό ν΅ν΄ ν΅μ ν μ μμ΅λλ€.
6.1. λ€νΈμν¬ μ’ λ₯
1. Bridge Network (λΈλ¦¬μ§ λ€νΈμν¬)
- κΈ°λ³Έμ μΌλ‘ Dockerκ° μ»¨ν μ΄λλ₯Ό μ€νν λ μ¬μ©νλ λ€νΈμν¬μ λλ€.
- λμΌν λΈλ¦¬μ§ λ€νΈμν¬μ μ°κ²°λ 컨ν μ΄λλ€μ μλ‘ ν΅μ ν μ μμ΅λλ€.
- μΈλΆ λ€νΈμν¬μλ NAT (λ΄λΆ λ€νΈμν¬μ μ¬λ¬ μ₯μΉκ° νλμ κ³΅μ© IP μ£Όμλ₯Ό ν΅ν΄ μΈλΆ λ€νΈμν¬μ ν΅μ ν μ μλλ‘ IP μ£Όμλ₯Ό λ³ννλ κΈ°μ ) λ₯Ό ν΅ν΄ ν΅μ ν©λλ€.
- μΌλ°μ μΌλ‘ λ¨μΌ νΈμ€νΈμμ μ¬λ¬ 컨ν μ΄λλ₯Ό μ°κ²°ν λ μ¬μ©λ©λλ€.
- λͺ μνμ§ μμΌλ©΄ λͺ¨λ λΈλ¦¬μ§ λ€νΈμν¬μμ μ€νλ©λλ€.
docker network create my-bridge-network
docker run -d --name container1 --network my-bridge-network nginx
docker run -d --name container2 --network my-bridge-network nginx
2. Host Network (νΈμ€νΈ λ€νΈμν¬)
- 컨ν μ΄λκ° νΈμ€νΈμ λ€νΈμν¬ μ€νμ μ§μ μ¬μ©ν©λλ€.
- λ€νΈμν¬ κ²©λ¦¬κ° μκΈ° λλ¬Έμ μ±λ₯μ μ΄μ μ΄ μμ§λ§, 보μ λ° λ€νΈμν¬ μΆ©λ μνμ΄ μμ΅λλ€.
- μΌλ°μ μΌλ‘ μ±λ₯μ΄ μ€μν μ ν리μΌμ΄μ μ μ¬μ©λ©λλ€.
docker run -d --network host nginx
3. Overlay Network (μ€λ²λ μ΄ λ€νΈμν¬)
- μ¬λ¬ Docker νΈμ€νΈμ κ±Έμ³ μλ 컨ν μ΄λλ₯Ό μ°κ²°ν λ μ¬μ©λ©λλ€.
- Swarm λͺ¨λ(Docker 컨ν μ΄λμ μ€μΌμ€νΈλ μ΄μ κ³Ό ν΄λ¬μ€ν°λ§μ μ§μνμ¬ μ¬λ¬ νΈμ€νΈμμ 컨ν μ΄λλ₯Ό κ΄λ¦¬νκ³ λ°°ν¬ν μ μλ κΈ°λ₯)λ Kubernetes κ°μ μ€μΌμ€νΈλ μ΄μ λꡬμ ν¨κ» μ¬μ©λ©λλ€.
- λ°μ΄ν° μΌν° λλ ν΄λΌμ°λ νκ²½μμ λΆμ° μμ€ν μ ꡬμΆν λ μ μ©ν©λλ€.
Dockerμ μ£Όμ νΉμ§
- μ΄μμ±
- Docker μ΄λ―Έμ§λ ν νκ²½μμ μμ±λλ©΄, λμΌν μ΄λ―Έμ§κ° λ€λ₯Έ νκ²½μμλ λμΌνκ² μ€νλ©λλ€. λ‘컬 νκ²½, μλ², ν΄λΌμ°λ λ± μ΄λμλ μΌκ΄λ λμμ 보μ₯ν©λλ€.
- κ²½λν
- Docker 컨ν μ΄λλ κ°μ λ¨Έμ (VM)λ³΄λ€ κ°λ³μ΅λλ€. VMμ κ°μ μ΄μ체μ λ₯Ό ν¬ν¨νμ§λ§, Docker 컨ν μ΄λλ νΈμ€νΈ OSμ 컀λμ 곡μ νκΈ° λλ¬Έμ μ€ν μλκ° λΉ λ₯΄κ³ μμ μλͺ¨κ° μ μ΅λλ€.
- 격리μ±
- κ° μ»¨ν μ΄λλ λ 립μ μΈ νκ²½μμ μ€νλλ―λ‘, μλ‘ μν₯μ λ―ΈμΉμ§ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μμ μ±κ³Ό 보μμ±μ ν보ν μ μμ΅λλ€.
- νμ₯μ±
- 컨ν μ΄λλ νμμ λ°λΌ μ½κ² μ€μΌμΌ μμ(νμ₯)ν μ μμ΅λλ€. μ¬λ¬ 컨ν μ΄λλ₯Ό λ³λ ¬λ‘ μ€ννμ¬ μ ν리μΌμ΄μ μ νμ₯νκ±°λ λ‘λλ₯Ό λΆμ°μν¬ μ μμ΅λλ€.
Dockerλ₯Ό μ¬μ©ν΄μΌ νλ μ΄μ
- κ°λ° λ° λ°°ν¬ νκ²½μ μΌκ΄μ±
- λ‘컬μμ λμνλ μ ν리μΌμ΄μ μ΄ μλ²μμλ λμΌνκ² μ€νλ©λλ€. "λ‘컬μμλ μ μλνλλ° μλ²μμλ μλ¬κ° λ°μ"νλ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€.
- ν¨μ¨μ μΈ λ¦¬μμ€ μ¬μ©
- Docker 컨ν μ΄λλ κ°μ λ¨Έμ λ³΄λ€ μ μ 리μμ€λ₯Ό μλΉνλ©°, λ λ§μ μ ν리μΌμ΄μ μ λμμ μ€νν μ μμ΅λλ€.
- λΉ λ₯Έ λ°°ν¬ λ° λ³΅κ΅¬
- 컨ν μ΄λλ λͺ μ΄ λ§μ μ€νν μ μμΌλ©°, λ¬Έμ κ° μκΈΈ κ²½μ° μ¦μ μλ‘μ΄ μ»¨ν μ΄λλ₯Ό μ€νν΄ λ³΅κ΅¬ν μ μμ΅λλ€.
Docker κΈ°λ³Έ μ¬μ©λ²
1. Docker μ€μΉ
- Dockerλ macOS, Windows, Linux λ± λ€μν νλ«νΌμμ μ€μΉν μ μμ΅λλ€. λ컀 곡μ ννμ΄μ§μμ μ€μΉ νμΌμ λ€μ΄λ‘λνλ©΄ λ©λλ€.
# μ€μΉ νμΈ
docker --version
2. μ΄λ―Έμ§ λ€μ΄λ‘λ
# docker hubμμ nginxλ₯Ό λ€μ΄λ‘λ λ°μ΅λλ€.
$ docker pull nginx
3. μ΄λ―Έμ§ μ€ν
- Docker Hubμμ μ΄λ―Έμ§λ₯Ό λ€μ΄λ‘λλ°κ³ 컨ν μ΄λλ₯Ό μ€νν©λλ€.
docker run nginx
4. μ΄λ―Έμ§ λΉλ
- Dockerfileμ μ¬μ©νμ¬ μ΄λ―Έμ§λ₯Ό μμ±ν©λλ€.
# -t μ΅μ
μ μ¬μ©νμ¬ μ΄λ―Έμ§μ μ΄λ¦κ³Ό νκ·Έλ₯Ό μ
λ ₯ ν μ μμ΅λλ€.
docker build -t {μ΄λ―Έμ§λͺ
} .
5.μ΄λ―Έμ§ κ΄λ¦¬
# μ΄λ―Έμ§ λͺ©λ‘ νμΈ
docker images
# μ΄λ―Έμ§ μμ
docker rmi {μ΄λ―Έμ§ ID}
6. 컨ν μ΄λ κ΄λ¦¬
# μ€ν μ€μΈ 컨ν
μ΄λ νμΈ
docker ps
# λͺ¨λ 컨ν
μ΄λ νμΈ
docker ps -a
# 컨ν
μ΄λ μ€μ§
docker stop {컨ν
μ΄λ ID}
# 컨ν
μ΄λ μμ
docker rm {컨ν
μ΄λ ID}
Dockerλ₯Ό νμ©ν μ€μ΅
- μΉ μ ν리μΌμ΄μ μ€ν: Dockerλ‘ Node.js, Spring Boot, λλ Django μ ν리μΌμ΄μ μ€νν΄ λ³΄κΈ°
- λ°μ΄ν°λ² μ΄μ€ 컨ν μ΄λ μ¬μ©: MySQL, PostgreSQL, Redis λ± λ°μ΄ν°λ² μ΄μ€ 컨ν μ΄λ μ€ν
- λ©ν° 컨ν μ΄λ κ΄λ¦¬: Docker Composeλ₯Ό μ¬μ©ν΄ νλ‘ νΈμλ, λ°±μλ, λ°μ΄ν°λ² μ΄μ€λ₯Ό νλμ μλΉμ€λ‘ ꡬμ±
λ§λ¬΄λ¦¬
Dockerλ νλ μννΈμ¨μ΄ κ°λ°μμ νμ λκ΅¬λ‘ μ리 μ‘μμ΅λλ€. Dockerλ₯Ό μ¬μ©νλ©΄ κ°λ°κ³Ό λ°°ν¬ νλ‘μΈμ€λ₯Ό λ¨μννκ³ , λ λμ μ ν리μΌμ΄μ μ΄μμ±κ³Ό νμ₯μ±μ μ 곡ν©λλ€.