1. λ컀λ ?
λ컀(Docker)λ 리λ μ€ μ»¨ν μ΄λμ 리λ μ€ μ΄ν리μΌμ΄μ μ νλ‘μΈμ€ 격리기μ μ μ¬μ©νμ¬ λ μ½κ² 컨ν μ΄λλ‘ μ€ννκ³ κ΄λ¦¬ν μ μκ² ν΄μ£Όλ μ€νμμ€ νλ‘μ νΈμ΄λ€. λ컀λ μΌλ°μ μΌλ‘ λ컀 μμ§ νΉμ λ컀μ κ΄λ ¨λ λͺ¨λ νλ‘μ νΈλ₯Ό μλ―Ένλ€.
λ컀 μμ§(Docker Engine)μ 컨ν μ΄λλ₯Ό μμ±νκ³ κ΄λ¦¬νλ 주체λ‘μ μ΄ μ체λ‘λ 컨ν μ΄λλ₯Ό μ μ΄ν μ μκ³ λ€μν κΈ°λ₯μ μ 곡νλ λ컀μ νλ‘μ νΈμ΄λ€. λ컀 μνκ³μ μλ μ¬λ¬ νλ‘μ νΈλ€μ λ컀 μμ§μ μ’ λ ν¨μ¨μ μΌλ‘ μ¬μ©νκΈ° μν κ²μ λΆκ³ΌνκΈ° λλ¬Έμ λ컀μ ν΅μ¬μ λ컀 μμ§μ΄λ€.
Virtual Machine (κ°μλ¨Έμ ) vs Docker Container (λ컀 컨ν μ΄λ)
κΈ°μ‘΄μ μ¬μ©νλ κ°μν κΈ°μ κ³Ό λ컀μ μ°¨μ΄μ μ μμ보λλ‘ νμ.
κΈ°μ‘΄μ κ°μν κΈ°μ μΈ κ°μλ¨Έμ μ νμ΄νΌλ°μ΄μ λ₯Ό μ΄μ©ν΄ μ¬λ¬κ°μ μ΄μ체μ λ₯Ό νλμ νΈμ€νΈμμ μμ±ν΄ μ¬μ©νλ λ°©μμ΄μλ€.
μ΄λ¬ν μ¬λ¬ κ°μ μ΄μ체μ λ κ°μ λ¨Έμ μ΄λλ λ¨μλ‘ κ΅¬λ³λκ³ κ° κ°μλ¨Έμ μλ μ΄μ체μ κ° μ€μΉλμ΄ μλ€. κ·Έλμ νμ΄νΌλ°μ΄μ μ μν΄ μμ±λκ³ κ΄λ¦¬λλ μ΄μ체μ λ κ²μ€νΈ μ΄μ체μ (Guest OS)λΌκ³ νλ©°, κ° κ²μ€νΈ μ΄μ체μ λ λ€λ₯Έ κ²μ€νΈ μ΄μ체μ μλ μμ ν λ 립λ 곡κ°κ³Ό μμ€ν μμμ ν λΉλ°μ μ¬μ©νλ€. μ΄λ¬ν λ°©μμ μ¬μ©νλ ν΄μ VirtualBox, VMware λ±μ΄ μλ€.
κ·Έλ¬λ, κ°μ’ μμ€ν μμμ κ°μννκ³ λ 립λ 곡κ°μ μμ±νλ μμ μ νμ΄νΌλ°μ΄μ λ₯Ό λ°λμ κ±°μΉκΈ° λλ¬Έμ μΌλ° νΈμ€νΈμ λΉν΄ μ±λ₯μ μμ€μ΄ λ°μνλ€. κ·Έ λΏλ§ μλλΌ κ°μ λ¨Έμ μ κ²μ€νΈ μ΄μ체μ λ₯Ό μ¬μ©νκΈ° μν λΌμ΄λΈλ¬λ¦¬, 컀λ λ±μ μ λΆ ν¬ν¨νκΈ° λλ¬Έμ κ°μ λ¨Έμ μ λ°°ν¬νκΈ° μν μ΄λ―Έμ§λ‘ λ§λ€μμ λ μ΄λ―Έμ§μ ν¬κΈ°κ° λ§€μ° ν¬λ€.
μμ μ μλ²λ₯Ό 곡λΆνλ©΄μ VirtualBoxμ ubuntuλ₯Ό μ€μΉνλλ° μ©λμ΄ λΆμ‘±ν΄ νμΌμ 리λ₯Ό νλ κ²½νμ΄ μλ€..
μ¦, κ°μ λ¨Έμ μ μλ²½ν μ΄μ체μ λ₯Ό μμ±ν μ μλ€λ μ₯μ μ΄ μ‘΄μ¬νμ§λ§ μΌλ° νΈμ€νΈμ λΉν΄ μ±λ₯μ΄ λ¨μ΄μ§κ³ , μ©λμ΄ ν° μ΄λ―Έμ§λ₯Ό λ°°ν¬νκΈ°μλ λΆλ΄μ€λ½λ€λ λ¨μ μ΄ μλ€.
Docker Container (λ컀 컨ν μ΄λ)
λλ λ컀λ₯Ό μλ μ μ²μ μ¬μ©ν΄ λ΄€λλ° μ μ¬μ©νλμ§ λͺ°λκ³ μ¬μ©νκΈ° μ μ μ΄ν΄νκΈ°λ μ΄λ €μμ΄ μμλ€. μ€μ λ‘ λ°°ν¬ νκ²½μ ꡬμ±νκΈ° μ κΉμ§λ κ·Έλ₯ μλ²μ μ¬λ €μ λ°°ν¬νμ§ κ΅³μ΄ λ컀λ₯Ό μ¨? λΌλ 무μ§ν μκ°μ νλ€. μ¬μ€ νλ‘μ νΈμμ μꡬμ¬νμ΄ μΆκ°λλ©΄μ λ컀λ₯Ό μ΄μ©μ μμ΄ μ¬μ©νκ² λμλλ° μ΄λ μ λ§ νμ΄μ΄μλ€.
λ컀 컨ν μ΄λλ κ°μνλ 곡κ°μ μμ±νκΈ° μν΄ λ¦¬λ μ€ μ체 κΈ°λ₯μΈ chroot, λ€μμ€νμ΄μ€, cgroupμ μ¬μ©ν¨μΌλ‘μ¨ νλ‘μΈμ€ λ¨μμ 격리 νκ²½μ λ§λ€κΈ° λλ¬Έμ μ±λ₯ μμ€μ΄ κ±°μ μλ€. 컨ν μ΄λμ νμν 컀λμ 곡μ ν΄μ μ¬μ©νκ³ , 컨ν μ΄λ μμλ μ΄ν리μΌμ΄μ μ ꡬλνλ λ° νμν λΌμ΄λΈλ¬λ¦¬ λ° μ€ν νμΌλ§ μ‘΄μ¬νκΈ° λλ¬Έμ 컨ν μ΄λλ₯Ό μ΄λ―Έμ§λ‘ λ§λ€μμ λ μ΄λ―Έμ§μ μ©λ λν κ°μ λ¨Έμ μ λΉν΄ λν μ€μ΄λ λ€. λ°λΌμ 컨ν μ΄λλ₯Ό μ΄λ―Έμ§λ‘ λ§λ€μ΄ λ°°ν¬νλ μκ°μ΄ κ°μ λ¨Έμ μ λΉν΄ λΉ λ₯΄κ³ , κ°μνλ 곡κ°μ μ¬μ©ν λμ μ±λ₯ μμ€λ κ±°μ μλ€λ μ₯μ μ΄ μλ€.
- λ컀 컨ν μ΄λλ κ°μνλ 곡κ°μ μμ±ν λ 리λ μ€ μ체 κΈ°λ₯μ μ¬μ©νμ¬ νλ‘μΈμ€ λ¨μμ 격리 νκ²½μ λ§λ€μ΄ μ±λ₯ μμ€μ΄ μμ
- κ°μ λ¨Έμ κ³Ό λ¬λ¦¬ 컀λμ 곡μ ν΄μ μ¬μ©νλ―λ‘, 컨ν μ΄λμλ λΌμ΄λΈλ¬λ¦¬ λ° μ€ννμΌλ§ μ‘΄μ¬
Docker κ΅¬μ± μμ
Docker Client - λ컀λ₯Ό μ€μΉνλ©΄ κ·Έκ²μ΄ Clientκ³ build, pull, run λ±μ λ컀 λͺ λ Ήμ΄λ₯Ό μν
DOCKER_HOST - λμ»€κ° λμμ Έ μλ μλ²λ₯Ό μλ―Έ
Docker daemon - λ컀 μμ§
Registry - μΈλΆ μ΄λ―Έμ§ μ μ₯μ
λ컀 μ΄λ―Έμ§μ 컨ν μ΄λ
λ컀 μμ§μμ μ¬μ©νλ κΈ°λ³Έ λ¨μλ μ΄λ―Έμ§μ 컨ν μ΄λμ΄λ©° λ컀 μμ§μ ν΅μ¬μ΄λ€.
λ컀 μ΄λ―Έμ§μ 컨ν μ΄λλ 1:Nμ κ΄κ³μ΄λ€.
λ컀 νμΌμ μμ±νκ³ μ΄λ₯Ό build νκ²λλ©΄ λ컀 μ΄λ―Έμ§κ° μμ±λλ€. μμ±λ μ΄λ―Έμ§λ₯Ό runνλ©΄ λ컀 컨ν μ΄λκ° μ€νλλ ꡬ쑰μ΄λ€.
FROM openjdk:17
CMD ["./mvnw", "package", "-DuserTests=true"]
ARG JAR_FILE_PATH=./target/*.jar
COPY ${JAR_FILE_PATH} app.jar
ENTRYPOINT ["java", "-jar", "-Duser.timezone=Asia/Seoul", "app.jar"]
// ν΄λΉ λλ ν 리μμ λ컀 μ΄λ―Έμ§ μμ±
$ docker build -t ${Docker_IMAGE}.
// λ컀 컨ν
μ΄λ μ€ν
$ docker run -d 80:80 --name ${DOCKER_CONTAINER} ${DOCKER_HUB_IMAGE}:latest
μλ νλ‘μ νΈ λΉμ mavenμΌλ‘ λ°°ν¬λ₯Ό νλ λ컀 νμΌμ΄λ€.
μ΄λ κ² λ§λ λ컀 νμΌμ λΉλν΄μ£Όλλ‘ νλ€. μ΄λ κ² λλ©΄ docker imageκ° μκΈ°κ² λλλ° μ΄ μ΄λ―Έμ§ νμΌμ runνλ©΄ 컨ν μ΄λκ° μ€νλλ€.
λ컀λ₯Ό μ€μ λ‘ μ¬μ©νλ€λ³΄λ©΄ μ λ§ νΈλ¦¬νλ€λ κ²μ λλ μ μλ€. λ°°μ°λ λ°μλ ν° μ΄λ €μμ΄ μκ³ μλ£κ° λ§μΌλ 곡μλ¬Έμλ₯Ό μ°Έκ³ νλ©΄ λ§μ λμμ΄ λ μ μλ€.
'π CS [ComputerScience] > π CS λ©΄μ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
π [CSλ©΄μ ] μΉ λ©΄μ μ§λ¬Έ [14] [μκ³ λ¦¬μ¦] (0) | 2024.03.08 |
---|---|
π [CSλ©΄μ ] μΉ λ©΄μ μ§λ¬Έ [13] [ Database ] (0) | 2024.03.07 |
π [CSλ©΄μ ] μΉ λ©΄μ μ§λ¬Έ [11] [μλ° μ»¬λ μ / Collection Framework] (0) | 2024.03.02 |
π [CSλ©΄μ ] μΉ λ©΄μ μ§λ¬Έ [10] [μλ£κ΅¬μ‘°] (0) | 2024.03.01 |
π [CSλ©΄μ ] μΉ λ©΄μ μ§λ¬Έ [9] [Servlet] (0) | 2024.02.29 |