Docker and Kubernetes - 3sam5oh/webtoon-search-service GitHub Wiki

์•„ํ‚คํ…์ณ ๊ทธ๋ฆฌ๋˜ ๋„์ค‘์— ๋„์ปค๋ž‘ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ด€๋ จ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๋‚ด์šฉ ๊ณต์œ ํ•ด๋ด…๋‹ˆ๋‹ค. 
ํ˜น์‹œ ์ž˜๋ชป๋˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ์ž์œ ๋กญ๊ฒŒ ์ˆ˜์ •ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค !

๐Ÿณ Docker

1. ๊ฐœ์š”

๊ฐ€์ƒํ™” ๊ธฐ์ˆ ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฉ๋ฆฌ๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค์–ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋žซํผ.
์‚ฌ์šฉ์ž์˜ OSํ™˜๊ฒฝ๊ณผ ๋ณ„๊ฐœ๋กœ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ ์—์„œ ๊ฐ€์ƒ ๋จธ์‹ (Virtual Machine)๊ณผ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ 
VM์€ ํ™˜๊ฒฝ ์ƒ์„ฑ ์‹œ Guest OS๊นŒ์ง€ ์„ค์น˜ํ•ด์•ผ ํ•ด์„œ ์„ค์น˜ ๋ฐ ์‹คํ–‰์— ๋งŽ์€ ์ปดํ“จํŒ… ์ž์›์ด ํ•„์š”ํ•œ ๋ฐ˜๋ฉด 
Docker ์ปจํ…Œ์ด๋„ˆ๋Š” ์ปค๋„์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„๋งŒ์„ ๊ฐ€์ง€๊ณ  ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ณ  ๊ฐ€๋ณ๊ฒŒ ๊ฒฉ๋ฆฌ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ์Œ

image

์‚ฌ์šฉ ์ด์œ 

  1. ์ด์‹์„ฑ : ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๊ฐ€๋ฆฌ์ง€ ์•Š๊ณ , ๊ฐœ๋ฐœ ํ™˜๊ฒฝ, ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ, ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ๋™์ผํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ ๊ฐ€๋Šฅ. ํ•œ ๋ฒˆ ๊ตฌ์ถ•, ์–ด๋””์„œ๋‚˜ ์‹คํ–‰
  2. ํšจ์œจ์ ์ธ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ : ํ•˜๋‚˜์˜ ์„œ๋ฒ„์—์„œ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ฒŒ๋จ์œผ๋กœ ์„œ๋ฒ„ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ํ™•์žฅ์„ฑ : ํ•˜๋‚˜์˜ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ๋‹ค์ˆ˜์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑ ๊ฐ€๋Šฅ (Scale out์ด ์‰ฝ๋‹ค)
  4. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ผ์น˜ : ๋™์ผํ•œ docker image๋ฅผ ์‚ฌ์šฉ, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ํ†ต์ผ์‹œ์ผœ ์ผ๊ด€๋œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์œ ์ง€ํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. ('๋‚ด pc์—์„œ๋Š” ์ž˜ ๋˜๋˜๋ฐ?' ๋ฐฉ์ง€)
  5. ๋ฒ„์ „ ๊ด€๋ฆฌ : ์ด๋ฏธ์ง€๊ฐ€ tag๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ๋˜๋ฉฐ, ๋งŒ์•ฝ ๋ฐฐํฌํ•œ ์ด๋ฏธ์ง€์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๊ฒฝ์šฐ ์ด์ „ ๋ฒ„์ „ ์ด๋ฏธ์ง€๋กœ ๋น ๋ฅธ ์žฌ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  6. ์˜คํ”ˆ์†Œ์Šค ์ƒํƒœ๊ณ„ : ์ปจํ…Œ์ด๋„ˆ ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋งŒํผ ๋‹จ๋‹จํ•œ ์ƒํƒœ๊ณ„๊ฐ€ ๊ตฌ์ถ•๋˜์–ด ์žˆ์Œ

2. ํ‚ค์›Œ๋“œ

  • ํ•ต์‹ฌ์ด ๋˜๋Š” ํ‚ค์›Œ๋“œ๋Š” ๊ฒฉ๋ฆฌ, ํ˜ธํ™˜์„ฑ, ํŽธ์˜์„ฑ ์ด๋ผ๊ณ  ์ดํ•ดํ•จ

1) ๊ฒฉ๋ฆฌ

  • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ํ•ต์‹ฌ์ด ๋˜๋Š” ๊ฐœ๋… ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ
  • ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?
    1. ์‚ฌ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ ๋ณ„๋กœ ํ•„์š” ์กฐ๊ฑด(๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ ํ˜น์€ ์˜์กด์„ฑ ๋“ฑ)์ด ๋‹ค๋ฅด๋‹ค.

    2. ์‹œ์Šคํ…œ ๊ตฌ๋™์— ์žˆ์–ด์„œ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ ํ˜น์€ ์˜์กด์„ฑ์„ ๊ณต์œ ํ•˜์ง€๋งŒ ํ•„์š”ํ•œ ๋ฒ„์ „์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. image

    • App A์™€ App B๊ฐ€ ๋ชจ๋‘ ๊ตฌ๋™ํ•˜๋Š”๋ฐ App C๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€๋งŒ, ํ•„์š”๋กœํ•˜๋Š” ๋ฒ„์ „์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ
      image
    • 1.0์„ ์„ ํƒํ•˜๋ฉด B๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ณ , 2.0์„ ์„ ํƒํ•˜๋ฉด A๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค. image
    • ์ด๋Ÿฐ ์ƒํ™ฉ์„ ํ”ผํ•˜๊ธฐ์œ„ํ•ด ๊ฒฉ๋ฆฌ๋œ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ฐ์ž๊ฐ€ ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ํ™•๋ณดํ•˜์—ฌ ์‹คํ–‰์— ๋ฌธ์ œ๊ฐ€ ์—†๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

2) ํ˜ธํ™˜์„ฑ

  • Docker ์ด์™ธ์—๋„ LXC, Solaris Zones, BSD Jail ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ ๋“ค์ด ์กด์žฌํ•˜์ง€๋งŒ, ์ด๋Ÿฐ ๊ธฐ์ˆ ๋“ค์€ ํŠน์ • OS(Solaris, FreeBSD)์—์„œ๋งŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋Š OS์—์„œ๋“  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„์ปค๊ฐ€ ํ‘œ์ค€์œผ๋กœ ์ฑ„ํƒ๋˜์—ˆ๋‹ค.

3) ํŽธ์˜์„ฑ

  • ํ˜ธํ™˜์„ฑ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ ํ”Œ๋žซํผ์— ๋น„ํ•ด์„œ ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ๋‚ฎ์•„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ํƒ„ํƒ„ํ•œ ์ƒํƒœ๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋งŽ์€ ๋ ˆํผ๋Ÿฐ์Šค์™€ ๋‹ค์–‘ํ•œ ์˜คํ”ˆ ์†Œ์Šค ๋ฐ ์ƒ์šฉ ํˆด๊ณผ์˜ ํ†ตํ•ฉ์„ ์ง€์›ํ•œ๋‹ค(= ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ์˜ ์‚ฌ์šฉ์ด ํŽธํ•˜๋‹ค).

3. ์šฉ์–ด

๋„์ปค ๊ด€๋ จ ๊ธฐ๋ณธ์ ์ธ ์šฉ์–ด ์ •๋ฆฌ

1) Docker Image

  • Docker Image๋Š” ํŠน์ • ์‹œ์ ์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜/ํ™˜๊ฒฝ์„ ์ •์˜ํ•˜๋Š” R/OํŒŒ์ผ๋กœ์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ์†Œ์Šค ์ฝ”๋“œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์ข…์†์„ฑ ๋“ฑ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.
  • ์ด๋ฏธ์ง€๋Š” ์ฝ๊ธฐ ์ „์šฉ ํŒŒ์ผ ์ด๋ฏ€๋กœ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•ด Container ์ƒ์„ฑ์‹œ R/W๊ฐ€ ๊ฐ€๋Šฅํ•œ Container Layer๋ฅผ ๋งŒ๋“ค์–ด ์“ฐ๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Layer๊ด€๋ จ ์ฐธ๊ณ  : ์ฐธ๊ณ 1 ์ฐธ๊ณ 2 docker.docs

2) Dockerfile

  • Dockerfile ์€ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ • ํŒŒ์ผ(์Šคํฌ๋ฆฝํŠธ)์ด๋‹ค.
  • Dockerfile ์— ์ด๋ฏธ์ง€ ๋นŒ๋“œ๋ฅผ ์œ„ํ•œ ์ปค๋งจ๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด build ์‹œ ํŒŒ์ผ์— ๊ธฐ์žฌ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•œ๋‹ค.
  • Dockerfile ์˜ˆ์‹œ (๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ณต์‹ ๋ฌธ์„œ๋‚˜ ์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ๋ฅผ ์‚ดํŽด๋ณผ ๊ฒƒ)
FROM openjdk:17-alpine

# redis ๋ฐ tzdata ์„ค์น˜
RUN apk add --no-cache redis tzdata

# ํƒ€์ž„์กด ์„ค์ •
ENV TZ=Asia/Seoul
RUN cp /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# JAR ํŒŒ์ผ ๋ณต์‚ฌ
COPY build/libs/*.jar app.jar

# JASYPT_KEY ARG ๋ฐ ENV ์„ค์ •
ARG JASYPT_KEY
ENV JASYPT_KEY=$JASYPT_KEY

# ํฌํŠธ ๋…ธ์ถœ - ์ƒ์„ฑ๋œ ์ปจํ…Œ์ด๋„ˆ์— ์—ด์–ด์ค„ ์ด๋ฏธ์ง€๋ฅผ ์ •์˜
EXPOSE 8080

# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ // ENTRYPOINT - ๋ฌด์กฐ๊ฑด์ ์ธ ์‹คํ–‰, CMD - ์‹คํ–‰ ์‹œ์˜ ์˜ต์…˜์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
ENTRYPOINT ["java", "-jar", "/app.jar"]

3) Container

  • ์ปจํ…Œ์ด๋„ˆ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์„œ๋กœ ๋‹ค๋ฅธ ์ปดํ“จํŒ… ํ™˜๊ฒฝ์—์„œ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์‹คํ–‰๋˜๋„๋ก ์ฝ”๋“œ์™€ ๋ชจ๋“  ์ข…์†์„ฑ์„ ํŒจํ‚ค์ง€ํ™”ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ํ‘œ์ค€ ๋‹จ์œ„์ด๋‹ค.
  • ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ฃผ์œ„ ํ™˜๊ฒฝ์œผ๋กœ๋ถ€ํ„ฐ ๊ฒฉ๋ฆฌํ•˜๊ณ  ๊ฐœ๋ฐœ๊ณผ ์Šคํ…Œ์ด์ง• ๊ฐ„์˜ ์ฐจ์ด์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ท ์ผํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ๋ณด์žฅ
  • ๋ณ€๊ฒฝ๋œ container๋ฅผ ๊ฐ€์ง€๊ณ  ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค (commit ์ปค๋งจ๋“œ)
  • ๋กœ์ปฌ ํ™˜๊ฒฝ๊ณผ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์ปฌ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ container์— ์ ‘์†ํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š” localhost๊ฐ€ ์•„๋‹ˆ๋ผ ์‹ค์ œ ip์™€ ์—ด์–ด์ค€ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ ‘์†ํ•ด์•ผ ํ•œ๋‹ค.

4) Registry

  • Docker Image๊ฐ€ ์ €์žฅ๋˜๋Š” ์ €์žฅ์†Œ. Docker hub ๊ฐ€ ๋Œ€ํ‘œ์ ์ธ public registry ์ด๊ณ , AWS ECR(Elastic Container Registry)๋„ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์ด๋‹ค.
  • ECR vs Dokcer hub?
    • AWS ECR์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ IAM์„ ์‚ฌ์šฉํ•œ ๊ถŒํ•œ ๊ด€๋ฆฌ. docker hub๋„ private/public ์œผ๋กœ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์„ธ๋ถ€์ ์ธ ๊ด€๋ฆฌ๋Š” ECR์ด ์šฐ์ˆ˜ํ•˜๋‹ค.
    • ํƒ€ AWS ์„œ๋น„์Šค์™€๋„ ์—ฐ๊ณ„๊ฐ€ ์ž˜ ๋˜์–ด์žˆ๋‹ค๋Š” ๊ฒƒ๋„ ECR์˜ ์žฅ์ ์ด๋ผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

5) Docker Volume

  • ์ƒ์„ฑ๋œ Docker container์™€ ํ˜ธ์ŠคํŠธ PC(๋˜๋Š” ๋‹ค๋ฅธ Docker Container)๊ฐ„์— ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ €์žฅ ๊ณต๊ฐ„
  • ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ€์ƒํ™” ๊ธฐ์ˆ ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์—…ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ๋งŒ ์กด์žฌํ•œ๋‹ค.
  • (= ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ์ž‘์—…ํ•œ ๋ฐ์ดํ„ฐ๋„ ๊ฐ™์ด ์‚ฌ๋ผ์ง„๋‹ค.)
  • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ญ์ œ๋˜๋”๋ผ๋„ ์ž‘์—…ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•ด์„œ ๋‹ค์Œ ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” ํ˜ธ์ŠคํŠธ OS์™€ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ volume์„ ์ƒ์„ฑํ•˜์—ฌ ๋งˆ์šดํŠธ์‹œํ‚จ๋‹ค.
  • ์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ

6) Docker Network

  • ๊ฒฉ๋ฆฌ๋œ Docker container ๊ฐ„์— ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋…ผ๋ฆฌ์  ๋„คํŠธ์›Œํฌ
  • ์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ

4. ์‚ฌ์šฉ๋ฒ•

๋„์ปค ์‚ฌ์šฉ์— ์žˆ์–ด์„œ ๊ธฐ๋ณธ์ด ๋˜๋Š” ์ปค๋งจ๋“œ๋“ค๋งŒ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌ. ์ด์™ธ์— ํ•„์š”ํ•œ ์ปค๋งจ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ๊ณต์‹ ๋ฌธ์„œ ๋˜๋Š” ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด์„œ ์ฐพ์ž.

1) Image ๊ด€๋ จ ์ปค๋งจ๋“œ

  • build : Dockerfile ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
docker build -t [image name:tag] [Dockerfile path]
  • push : ๋ณด์œ ํ•œ Docker image๋ฅผ registry์— ์˜ฌ๋ฆฐ๋‹ค. default๋กœ Docker hub๋กœ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๊ณ , ECR ๋“ฑ์˜ ํƒ€ registry๋กœ ์ด๋ฏธ์ง€๋ฅผ ์˜ฌ๋ฆฌ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—๋Š” ๋ณ„๋„์˜ ์„ค์ •(AWS CLI, ECR ๋กœ๊ทธ์ธ ๋“ฑ)์ด ํ•„์š”ํ•˜๋‹ค.
docker push [image name:tag]
  • pull : registry์— ๋“ฑ๋ก๋œ image๋ฅผ ๋กœ์ปฌ ์„œ๋ฒ„๋กœ ๋ฐ›์•„์˜จ๋‹ค. push์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Docker hub์™ธ์˜ registry์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ๋Š” ๋ณ„๋„์˜ ์„ค์ • ํ›„์— pullํ•œ๋‹ค. tag๋ฅผ ์‚ฌ์šฉํ•ด ๋ฒ„์ „์„ ๋ช…์‹œํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ latest ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„์˜จ๋‹ค.
docker pull [image name:tag] 
  • rmi : ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
docker rmi [image name:tag]
  • images : ๋กœ์ปฌ ํ™˜๊ฒฝ์— ๋ณด์œ ์ค‘์ธ ์ด๋ฏธ์ง€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์กฐํšŒํ•œ๋‹ค.
docker images

2) Container ๊ด€๋ จ ์ปค๋งจ๋“œ

  • run : Docker iamge๋ฅผ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ ๋‹ค. ๋งŒ์•ฝ ๋ณด์œ ์ค‘์ธ image๊ฐ€ ์—†๋‹ค๋ฉด registry์—์„œ ์ด๋ฏธ์ง€๋ฅผ pullํ•ด์„œ ์‹คํ–‰ํ•œ๋‹ค.
docker run [option] [image name:tag]

// ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜ ์กฐํ•ฉ 
docker run -d --name [container name] [image name:tag]
-d: ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ํ•œ๋‹ค. 
--name: ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ์ง€์ •ํ•œ๋‹ค.

// docker volume ๋งˆ์šดํŠธ
// ๋งˆ์šดํŠธ ์‹œ์—๋Š” [volume name]์˜ ๋‚ด์šฉ์œผ๋กœ [container inner path] ๋‚ด์šฉ์ด ๋ฎ์–ด์”Œ์›Œ์ง€๋‹ˆ ์ฃผ์˜ํ•  ๊ฒƒ
docker run -d --name [container name] -v [volume name]:[container inner path] [image name:tag]
  • ps : ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก์„ ์ถœ๋ ฅํ•œ๋‹ค.
// ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก ์ถœ๋ ฅ
docker ps

// ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ(์ค‘์ง€ ์ƒํƒœ๋ฅผ ํฌํ•จ) ๋ชฉ๋ก ์ถœ๋ ฅ
docker ps -a
  • start : ์ •์ง€ ์ƒํƒœ์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.
docker start [container name]
  • stop : ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •์ง€ ์‹œํ‚จ๋‹ค.
docker stop [container name]
  • restart : ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์žฌ์‹ค์ž‘ํ•œ๋‹ค.
docker restart [container name]
  • logs : ์ปจํ…Œ์ด๋„ˆ์˜ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
docker logs [container name]
  • rm : ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
docker rm [container name]
  • exec : ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.
docker exec [option] [container name] [command]

// ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์กฐํ•ฉ 
docker exec -it [container name] [/bin/bash | /bash]
- ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์˜ bash shell์„ ์‹คํ–‰์‹œํ‚ค๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œํ•œ๋‹ค.

3) Network ๊ด€๋ จ ์ปค๋งจ๋“œ

  • create : ์ƒˆ๋กœ์šด Docker Network๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
docker network create [network name]
  • connect : ๋„คํŠธ์›Œํฌ์— container๋ฅผ ์—ฐ๊ฒฐ์‹œํ‚จ๋‹ค.
docker connect [network name] [container name]
  • ls : ํ˜„์žฌ ์กด์žฌํ•˜๋Š” Docker Network ๋ชฉ๋ก์„ ์ถœ๋ ฅํ•œ๋‹ค.
docker network ls
  • inspect : ๋„คํŠธ์›Œํฌ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
docker network inspect [network name]
  • rm : ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
docker network rm [network name]

4) Volume ๊ด€๋ จ ์ปค๋งจ๋“œ

volume ์€ connect๋ช…๋ น์–ด๊ฐ€ ์—†๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ -v๋˜๋Š” --mount ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์„œ ๋งˆ์šดํŠธ ์‹œํ‚ฌ ๊ฒƒ.

  • create : ์ƒˆ๋กœ์šด ๋ณผ๋ฅจ์„ ์ƒ์„ฑํ•œ๋‹ค.
docker volume create [volume name]
  • ls : ํ˜„์žฌ ์กด์žฌํ•˜๋Š” Docker volume ๋ชฉ๋ก์„ ์ถœ๋ ฅํ•œ๋‹ค.
docker volume ls
  • inspect : ๋ณผ๋ฅจ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
docker volume inspect [volume name]
  • rm : ๋ณผ๋ฅจ์„ ์‚ญ์ œํ•œ๋‹ค.
docker volume rm [volume name]

๐Ÿณ Docker-compose

1. ๊ฐœ์š”

docker-compose๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•œ ๋ฒˆ์— ์ •์˜ํ•˜์—ฌ ์ƒ์„ฑ/์‚ญ์ œํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค.
docker-compose.yml ํŒŒ์ผ์„ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€์™€ ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ ๋“ฑ์„ ์ •์˜ํ•˜์—ฌ ๋‹ค์ˆ˜์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.  

2. ์‚ฌ์šฉ๋ฒ•

  • docker-compose.yml ํŒŒ์ผ์„ ์ •์˜ํ•œ ๋’ค, docker-compose -f [docker-compose.yml path] up [option] ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
    • ๋งŒ์•ฝ -f [docker-compose.yml path] ์˜ต์…˜ ์—†์ด ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” docker-compose.ymlํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ž‘ํ•˜๋ฉฐ, ํŒŒ์ผ์ด ์—†์„ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•จ
  • docker-compose.yml ํŒŒ์ผ์˜ ์ด๋ฆ„์€ ๋ณ€ํ•ด์„œ๋Š” ์•ˆ๋˜๋ฉฐ, ํ•˜๋‚˜์˜ ํด๋”(๋””๋ ‰ํ† ๋ฆฌ)์— ํ•˜๋‚˜์˜ docker-compose.yml ํŒŒ์ผ๋งŒ์ด ์กด์žฌํ•ด์•ผํ•œ๋‹ค.
  • docker-compose.yml ํŒŒ์ผ ์˜ˆ์‹œ

  • ๊ธฐํƒ€ ์ปค๋งจ๋“œ
    • docker compose down : docker-compose.yml์— ์ •์˜๋œ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ์ •์ง€ํ•˜๊ณ  ์‚ญ์ œ์‹œํ‚จ๋‹ค.
    • docker compose stop : docker-compose.yml์— ์ •์˜๋œ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ์ •์ง€์‹œํ‚จ๋‹ค.
    • docker compose start : ํŒŒ์ผ์— ์ •์˜๋˜์–ด์žˆ์ง€๋งŒ ์ •์ง€ ์ƒํƒœ์ธ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ์‹คํ–‰์‹œํ‚จ๋‹ค. up์„ ์‚ฌ์šฉํ•ด๋„ ๋ฌด๋ฐฉํ•จ.
    • docker compose ps : ๋„์ปค ์ปดํฌ์ฆˆ์— ์ •์˜๋˜์–ด ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์ด์™ธ์˜ ์ปค๋งจ๋“œ๋‚˜ ์˜ต์…˜๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ๊ณต์‹ ๋ฌธ์„œ๋‚˜ ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด์„œ ์ฐพ์•„๋ณด๊ธฐ

๋งจ ์œ„๋กœ

๐ŸŽก Kubernetes

1. ๊ฐœ์š”

Kubernetese(k8s)๋Š” ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ๋กœ ๋‹ค์ˆ˜์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑ/์‚ญ์ œ ํ•ด์ฃผ๊ณ  ์ปจํ…Œ์ด๋„ˆ์˜ ๋„คํŠธ์›Œํฌ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์ž๋™ํ™”ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค.

2. ํ‚ค์›Œ๋“œ

1) Ochestration

  • k8s์™€ docker compose์˜ ์ฐจ์ด๊ฐ€ ์—ฌ๊ธฐ์„œ ๋ฐœ์ƒํ•œ๋‹ค.
  • docker compose๋Š” ๋‹ค์ˆ˜์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์• ๋“œํ›…ํ•˜๊ฒŒ ์ƒ์„ฑ/์‚ญ์ œ ํ•˜๋Š” ๋ฐ˜๋ฉด k8s๋Š” etcd์— ๋“ฑ๋ก๋œ manifest file์„ ๊ธฐ์ค€์œผ๋กœ ์ด์ƒ์ ์ธ ์ƒํƒœ๋ฅผ ๊ธฐ์–ต, ํ•ด๋‹น ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์ค€๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฐฐํฌ, ์ œ์–ด ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง, ๋„คํŠธ์›Œํ‚น, ์Šค์ผ€์ผ๋ง ์ž‘์—…์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

3. ์šฉ์–ด

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ด€๋ จ ๊ธฐ๋ณธ์ ์ธ ์šฉ์–ด ์ •๋ฆฌ

1) Node

  • ๋ฌผ๋ฆฌ์  ์„œ๋ฒ„ ๋˜๋Š” ๊ฐ€์ƒํ™” ์„œ๋ฒ„ ํ™˜๊ฒฝ์„ ์˜๋ฏธ.(๊ทธ๋ƒฅ app์ด ๋™์ž‘ํ•  ์ปดํ“จํ„ฐ ํ•˜๋‚˜๋ผ๊ณ  ์ดํ•ดํ•˜์ž)
  • k8s๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์ˆ˜์˜ ๋…ธ๋“œ ๊ฐ„ ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
  • k8s๋Š” ๋‘ ์ข…๋ฅ˜์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค : 1) Master Node 2) Worker Node

k8s cluster image

  • Master Node : Control Plane์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋ฉฐ k8s ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐ์ •ํ•˜๋Š” ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. Worker Node์™€ ๋‹ฌ๋ฆฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ผ์€ ์—†๊ณ  kubectl ๋“ฑ์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.\
    • ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ์ปดํฌ๋„ŒํŠธ : kube-apiserver, kube-controller-manager, kube-scheduler, cloud-controller-manager, etcd
      • kube-apiserver : ์™ธ๋ถ€์™€ ํ†ต์‹ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค, kubectl๋กœ๋ถ€ํ„ฐ ๋ช…๋ น์„ ์ „๋‹ฌ๋ฐ›์•„ ์‹คํ–‰ํ•œ๋‹ค.
      • kube-controller-manager : ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ฉ ๊ด€๋ฆฌ, ์‹คํ–‰ํ•œ๋‹ค.
        • controller : ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ตœ์ ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ง€์†์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ฐ์‹œํ•˜๊ณ  ์ด๋ฅผ ์กฐ์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋ฃจํ”„
      • kube-scheduler : ํŒŒ๋“œ๋ฅผ ์›Œ์ปค ๋…ธ๋“œ์— ํ• ๋‹นํ•œ๋‹ค.
      • cloud-controller-manager : ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์™€ ์—ฐ๋™ํ•ด ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
      • etcd : ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ จ ์ •๋ณด ์ „๋ฐ˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค.
    • EKS : AWS ํ™˜๊ฒฝ์—์„œ k8sํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์ผ์ข…์˜ Control Plane ์—ญํ• ์„ ํ•˜๋Š” ์„œ๋น„์Šค์ด๋‹ค.
  • Worker Node : ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์›Œํฌ๋กœ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋…ธ๋“œ. ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ์ฃผ์ฒด์ด๋‹ค.
    • Worker node์˜ ์ปดํฌ๋„ŒํŠธ : kubelet, kube-proxy
        1. kubelet : ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์— ์žˆ๋Š” kube-scheduler์™€ ์—ฐ๋™ํ•˜๋ฉฐ ์›Œ์ปค ๋…ธ๋“œ์— ํŒŒ๋“œ๋ฅผ ๋ฐฐ์น˜ํ•˜๊ณ  ์‹คํ–‰ํ•œ๋‹ค. ๋˜ ์‹คํ–‰ ์ค‘์ธ ํŒŒ๋“œ์˜ ์ƒํƒœ๋ฅผ ์ •๊ธฐ์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉฐ kube-scheduler์— ํ†ต์ง€ํ•œ๋‹ค.
        1. kube-proxy : ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์˜ ๋ผ์šฐํŒ… ๋ฉ”์ปค๋‹ˆ์ฆ˜. ํŒŒ๋“œ ๊ฐ„์˜ ํ†ต์‹  ๋ฐ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ๋‹ด๋‹นํ•œ๋‹ค.

2) Cluster

  • Master Node(Control Plane)์™€ Worker Node๋กœ ๊ตฌ์„ฑ๋œ ํ™˜๊ฒฝ์„ ์šฐ๋ฆฌ๋Š” Kubernetes Cluster๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

3) Pod

  • Kubernetes์—์„œ ๋ฐฐํฌ๋˜๊ณ  ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„. ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ + ๋ณผ๋ฅจ ์กฐํ•ฉ์„ ํŒŒ๋“œ๋ผ ํ•œ๋‹ค.

4) Service

  • ๋‹ค์ˆ˜์˜ ํŒŒ๋“œ๋ฅผ ์ด๋„๋Š” ๋ฐ˜์žฅ ์—ญํ• ์ด๋ผ๊ณ  ์ดํ•ด.
  • ์—ฌ๋Ÿฌ Pod์— ๋Œ€ํ•œ ๋‹จ์ผ ์ง„์ž…์ ์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ๊ณผ ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ํ•˜๋‚˜์˜ ์„œ๋น„์Šค ์•„๋ž˜์—๋Š” ๋™์ผํ•œ ๊ตฌ์„ฑ(๋™์ผํ•œ ์ด๋ฏธ์ง€์˜ ์ปจํ…Œ์ด๋„ˆ + ๋ณผ๋ฅจ)์˜ ํŒŒ๋“œ๋“ค์ด ์กด์žฌํ•œ๋‹ค.
  • ๊ตฌ์„ฑ์ด ๋‹ค๋ฅธ ํŒŒ๋“œ๋Š” ๋ณ„๊ฐœ์˜ ์„œ๋น„์Šค๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์—ญํ• . ๊ฐ ์„œ๋น„์Šค๋Š” ์ž๋™์ ์œผ๋กœ ๊ณ ์ •๋œ IP์ฃผ์†Œ(cluster ip) ๋ฅผ ๋ถ€์—ฌ ๋ฐ›์œผ๋ฉฐ, ์ด ์ฃผ์†Œ๋กœ ๋“ค์–ด์˜ค๋Š” ํ†ต์‹ ์„ ๊ฐ ํŒŒ๋“œ์— ๋ถ„๋ฐฐํ•ด์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ๋“œ๊ฐ€ ์žˆ์–ด๋„ ๋ฐ–์—์„œ๋Š” ํ•˜๋‚˜์˜ IP ์ฃผ์†Œ(cluster IP)๋งŒ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ์ฃผ์†Œ๋กœ ์ ‘๊ทผํ•˜๋ฉด ์„œ๋น„์Šค๊ฐ€ ํ†ต์‹ ์„ ์ ์ ˆํžˆ ๋ถ„๋ฐฐํ•ด์ฃผ๋Š” ๊ตฌ์กฐ๋‹ค.
  • ์„œ๋น„์Šค๊ฐ€ ๋ถ„๋ฐฐํ•˜๋Š” ํ†ต์‹ ์€ ๋™์ผํ•œ ๊ตฌ์„ฑ์˜ ํŒŒ๋“œ๋กœ ๊ตญํ•œ๋œ๋‹ค. ์—ฌ๋Ÿฌ ์„œ๋น„์Šค ๋…ธ๋“œ ๊ฐ„์˜ ๋ถ„๋ฐฐ๋Š” ์ƒ์œ„ ๋‹จ์—์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋‚˜ Ingress๊ฐ€ ๋‹ด๋‹นํ•จ.
  • LB๋‚˜ Ingress๋Š” ๋ฌผ๋ฆฌ์  ํ•˜๋“œ์›จ์–ด์ด๊ฑฐ๋‚˜ master/worker node์™€ ๋‹ค๋ฅธ node์—์„œ ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.

image

5) ReplicaSet

  • ์„œ๋น„์Šค๊ฐ€ ์š”์ฒญ์„ ๋ฐฐ๋ถ„ํ•˜๋Š” ๋ฐ˜์žฅ์ด๋ผ๋ฉด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ ํŒŒ๋“œ์˜ ์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ˜์žฅ.
  • ์žฅ์•  ๋“ฑ์˜ ์ด์œ ๋กœ ํŒŒ๋“œ๊ฐ€ ์ข…๋ฃŒ๋์„ ๋•Œ, ๋ชจ์ž๋ผ๋Š” ํŒŒ๋“œ๋ฅผ ๋ณด์ถฉํ•˜๊ฑฐ๋‚˜ ์ •์˜ ํŒŒ์ผ์— ์ •์˜๋œ ํŒŒ๋“œ์˜ ์ˆ˜๊ฐ€ ๊ฐ์†Œํ•˜๋ฉด ๊ทธ๋งŒํผ ํŒŒ๋“œ์˜ ์ˆ˜๋ฅผ ์‹ค์ œ๋กœ ๊ฐ์†Œ์‹œํ‚จ๋‹ค.
  • Replica : ReplicaSet์ด ๊ด€๋ฆฌํ•˜๋Š” ๋™์ผํ•œ ๊ตฌ์„ฑ์˜ ํŒŒ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

6) Manifest file

  • Manifest file์€ Kubernetes ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•˜๋Š” YAML ๋˜๋Š” JSON ํ˜•์‹์˜ ํŒŒ์ผ.
  • docker-compose.yml ๊ณผ ๋‹ค๋ฅด๊ฒŒ ํŒŒ์ผ๋ช…์— ์ œ์•ฝ์€ ์—†์ง€๋งŒ ์˜๋ฏธ์—†๋Š” ์ด๋ฆ„์„ ๋ถ™์ด์ง€ ์•Š๋„๋ก ํ•œ๋‹ค. (์ปจ๋ฒค์…˜ ์ค€์ˆ˜)
  • k8s๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ(์ •์˜ ํŒŒ์ผ)์— ๊ธฐ์žฌ๋œ ๋‚ด์šฉ์— ๋”ฐ๋ผ ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.
  • ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ์—…๋กœ๋“œํ•˜๋ฉด ๊ทธ ๋‚ด์šฉ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(etcd)์— ๋“ฑ๋ก๋˜๋ฉฐ, ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ์„ ์ด ์ƒํƒœ๋กœ ์œ ์ง€ํ•œ๋‹ค.
  • ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์€ ๋ฆฌ์†Œ์Šค(Pod, Deployment, Service, ReplicaSet...) ๋ณ„๋กœ ๋”ฐ๋กœ ์ž‘์„ฑํ•ด์ค˜์•ผ ํ•˜๋ฉฐ ๊ฐ๊ฐ์˜ ๋ฆฌ์†Œ์Šค ๋ณ„๋กœ ๋ณ„๋„์˜ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ํ•˜๋‚˜์˜ ํŒŒ์ผ์—์„œ ๊ตฌ๋ถ„์„  (---)์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ฆฌ์†Œ์Šค์˜ ์„ค์ •์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ ์ฃผ ํ•ญ๋ชฉ :
apiVersion: 
kind: 
metadata:
spec:

/*
1) apiVersion : API ๊ทธ๋ฃน ๋ฐ ๋ฒ„์ „, ๊ทธ๋ฃน์ด๋‚˜ ๋ฒ„์ „์€ ๋ณ€๊ฒฝ๋  ์ˆ˜์žˆ์œผ๋ฏ€๋กœ ๊ณต์‹ ์ฐธ์กฐ๋ฌธ์„œ์˜ ๋ฆฌ์†Œ์Šค ์œ ํ˜•์„ ์ฐธ์กฐํ•ด์„œ ๋งŒ๋“ ๋‹ค.
2) kind : ๋ฆฌ์†Œ์Šค ์œ ํ˜•(Deployment, Service, Pod, ReplicaSet..์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋Š” Deployment์™€ Service์ด๋‹ค) 
3) metadata: ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ (๋ฆฌ์†Œ์Šค์˜ ์ด๋ฆ„์ด๋‚˜  ๋ ˆ์ด๋ธ”๋“ฑ์˜ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ) 
4) spec: ๋ฆฌ์†Œ์Šค ๋‚ด์šฉ. ์–ด๋–ค ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ค๊ฒƒ์ธ๊ฐ€? ์ŠคํŽ™์—์„œ ์ •์˜ํ•˜๋Š” ํ•ญ๋ชฉ์€ ๋ฆฌ์†Œ์Šค ์œ ํ˜•์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ ๋”ฐ๋กœ ์ •๋ฆฌํ•  ๊ฒƒ
*/
  • Deployment Manifest file ๊ธฐ๋ณธ ๊ตฌ์กฐ ์–ด๋””๊นŒ์ง€๋‚˜ ๊ธฐ๋ณธ์ด๋‹ˆ ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•œ ๋ถ€๋ถ„์€ ๊ณต์‹ ๋ฌธ์„œ๋‚˜ ๊ตฌ๊ธ€๋ง์„ ์ฐธ๊ณ ํ•˜์ž.
apiVeresion:
kind:
metadata:
  name: (๋“ฑ๋กํ•  Deployment์˜ ์ด๋ฆ„)
spec:
  selector:
    matchLabels: (์…€๋ ‰ํ„ฐ๊ฐ€ ๊ด€๋ฆฌํ•  ๋ผ๋ฒจ ์ด๋ฆ„)
  replicas: (๋ ˆํ”Œ๋ฆฌ์นด ์„ค์ • - ํŒŒ๋“œ๋ฅผ ๋ช‡๊ฐœ ์œ ์ง€ํ•  ๊ฒƒ์ธ์ง€)
  template: (Pod์˜ ์ •๋ณด)
    metadata: (Pod์˜ ์ด๋ฆ„, ๋ผ๋ฒจ ๋‹จ, Pod๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๊ด€๋ฆฌํ•  ๊ฒฝ์šฐ ์ด๋ฆ„์€ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.)
      labels: 
        app: (Pod์˜ ๋ผ๋ฒจ - ์œ„์˜ selector๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ผ๋ฒจ์ด ๋ถ™์€ ํŒŒ๋“œ๋“ค์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.) 
    spec: (Pod์˜ ์ŠคํŽ™)
      containers:
      - name: (์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„) 
        image: (์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€)
        ports:
        - containerPort: (์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์–ด๋–ค ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ •๋ณด) 

/* 
Deployment manifest file์—์„œ ์ง€์ •ํ•˜๋Š” containerPort ๋Š” ๋‹จ์ˆœํžˆ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์ด๋ฉฐ
์ฃผ๋กœ ์‚ฌ๋žŒ์ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋„์™€์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์‹ค์ œ ํฌํŠธํฌ์›Œ๋”ฉ์— ๊ด€๋ จ๋œ ์„ค์ •์€ 
Service manifest file์—์„œ ์ง€์ •ํ•˜๊ฒŒ๋œ๋‹ค. 
*/
  • Service Manifest file ๊ธฐ๋ณธ ๊ตฌ์กฐ
apiVersion:
kind: Service
metadata:
  name: (์„œ๋น„์Šค ์ด๋ฆ„) 
spec:
  type: (์„œ๋น„์Šค ์œ ํ˜• - ์„œ๋น„์Šค์˜ ์ข…๋ฅ˜๋ฅผ ๋งํ•œ๋‹ค. ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์„œ๋น„์Šค์— ์–ด๋–ค ์œ ํ˜•์˜ IP ์ฃผ์†Œ(๋˜๋Š” DNS)๋กœ ์ ‘๊ทผํ• ์ง€๋ฅผ ์„ค์ • 
  ports: ํฌํŠธ ์„ค์ • 
  - port: (์„œ๋น„์Šค ํฌํŠธ)
  - targetPort: (์ปจํ…Œ์ด๋„ˆ ํฌํŠธ) 
  - protocol : (ํ†ต์‹ ์— ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ)
  - nodePort: (Worker node์˜ ํฌํŠธ) 
  selector: (์…€๋ ‰ํ„ฐ ์„ค์ •)

/*
์„œ๋น„์Šค ์œ ํ˜• :
1) ClusterIP : ํด๋Ÿฌ์Šคํ„ฐ IP๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๋„๋ก ํ•จ(์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผ ์•ˆ๋จ)
2) NodePort: ์›Œ์ปค ๋…ธ๋“œ์˜ IP๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๋„๋ก ํ•จ 
3) LoadBalancer : ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์˜ IP๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๋„๋ก ํ•จ 
4) ExternalName : ํŒŒ๋“œ์—์„œ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€๋กœ ๋‚˜๊ฐ€๊ธฐ ์œ„ํ•œ ์„ค์ •
*/
  • ์„œ๋น„์Šค ์œ ํ˜• image

4. ์‚ฌ์šฉ๋ฒ•

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‚ฌ์šฉ์— ์žˆ์–ด์„œ ๊ธฐ๋ณธ์ด ๋˜๋Š” ์ปค๋งจ๋“œ๋“ค๋งŒ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌ. ์ด์™ธ์— ํ•„์š”ํ•œ ์ปค๋งจ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ๊ณต์‹ ๋ฌธ์„œ ๋˜๋Š” ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด์„œ ์ฐพ์ž.

  • apply : manifest file์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. ์ฃผ๋กœ -f์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํŒŒ์ผ์„ ์ง€์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
kubectl apply -f [manifest file path]
  • get : ์ง€์ •ํ•œ ๋ฆฌ์†Œ์Šค ๋ชฉ๋ก์„ ๋‚˜์—ดํ•œ๋‹ค.
kubectl get nodes
kubectl get services
kubectl get deployments
kubectl get pods 
  • logs : Pod ์˜ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
kubectl logs [pod name]
  • describe : ๋ฆฌ์†Œ์Šค์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
kubectl describe node [node name]
kubectl describe service [service name]
kubectl describe deployment [deployment name]
kubectl describe pod [pod name]
  • rollout restart : registry์— ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๊ฐ€ ๋“ฑ๋ก๋˜์—ˆ์„ ๋•Œ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋กœ pod๋ฅผ ์žฌ์‹คํ–‰ํ•œ๋‹ค.
kubectl rollout restart deployments [deployment name]
  • delete : ๋“ฑ๋ก๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.
kubectl delete pods [pod name]
kubectl delete deployments [deployment name]
kubectl delete services [service name]

Docker & k8s ๊ด€๋ จ ์‹œํ–‰์ฐฉ์˜ค

Docker Container root ๊ถŒํ•œ

docker exec -it --user root [container name] [/bin/bash ๋“ฑ..] 

exec๋กœ ์ ‘๊ทผํ•  ๋•Œ ์œ„ ๋ช…๋ น์–ด๋กœ ์ ‘๊ทผํ•˜๋ฉด root๋กœ exec์ ‘๊ทผ์ด ๋ฉ๋‹ˆ๋‹ค. ์ดํ›„ yum ๋“ฑ์œผ๋กœ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ๋‹ค์šด๋กœ๋“œ ํ•œ ๋‹ค์Œ์— docker commit์œผ๋กœ ์ƒˆ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๋ฉด ์ปค์Šคํ…€ํ•œ ์ƒํƒœ๋กœ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.