1 minute read

๐Ÿ“– Dockerfile์ด ์žˆ๋Š”๋ฐ ๋นŒ๋“œ ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ• ๊นŒ?

  • ๊ฐœ์ธ ๊ฐœ๋ฐœ์ด๋‚˜ ์ž‘์€ ๊ทœ๋ชจ์˜ ๊ฒฝ์šฐ ์ƒ๊ด€์—†๋‹ค.
  • ํ•˜์ง€๋งŒ ํ˜‘์—…์„ ํ†ตํ•˜์—ฌ ์„œ๋กœ์˜ ๋ฒ„์ „์„ ๋งž์ถฐ์ค˜์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ค‘์š”ํ•˜๋‹ค.

์‹ค์ œ๋กœ ๋‚˜๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” CI/CD์„ ์ง€์›ํ•˜๋Š” github๋ฅผ ํ†ตํ•˜์—ฌ, ์–ด๋–ค ํ™˜๊ฒฝ์—์„œ ๋ธ”๋กœ๊ทธ ํŒŒ์ผ์— ์ ‘์†ํ•˜๋“ ์ง€ ๋˜‘๊ฐ™์€ ํ™˜๊ฒฝ์„ ๋ณด์žฅ๋ฐ›๊ณ , ์ฝ”๋“œ๋ฅผ commit ํ›„ pushํ•˜๋ฉด ์ž๋™์œผ๋กœ build ํ›„ deployment๊นŒ์ง€ ๋˜๋Š” ๊นƒ ๋ธ”๋กœ๊ทธ๋ฅผ ์šด์˜ํ•˜๊ณ  ์žˆ๋‹ค.

๋‚ด ๋ธ”๋กœ๊ทธ github

๋ธ”๋กœ๊ทธ 1

๋ธ”๋กœ๊ทธ 2


๐Ÿ“– ์ž๋ฐ” ์†Œ์Šค ์ฝ”๋“œ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ

์‹ค์Šต์€ ๋„์ปค๊ต๊ณผ์„œ์˜ 4์žฅ์„ ์ฐธ๊ณ ํ•˜์˜€๋‹ค.

๐Ÿ„ ๋ฉ”์ด๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๋Š” Dockerfile ์Šคํฌ๋ฆฝํŠธ

์•„๋ž˜ ์ฝ”๋“œ๋Š” NASA์˜ ์˜ค๋Š˜์˜ ์ฒœ๋ฌธ ์‚ฌ์ง„ ์„œ๋น„์Šค์—์„œ ์˜ค๋Š˜์ž ์‚ฌ์ง„์„ ๋ฐ›์•„์˜ค๋Š” ๊ฐ„๋‹จํ•œ REST API์ด๋‹ค.

FROM diamol/maven AS builder

WORKDIR /usr/src/iotd
COPY pom.xml .
RUN mvn -B dependency:go-offline

COPY . .
RUN mvn package

# app
FROM diamol/openjdk

WORKDIR /app
COPY --from=builder /usr/src/iotd/target/iotd-service-0.1.0.jar .

EXPOSE 80
ENTRYPOINT ["java", "-jar", "/app/iotd-service-0.1.0.jar"]

Dockerfile์€ ์ผ๋ จ์˜ ์ธ์ŠคํŠธ๋Ÿญ์…˜์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๋กœ ๋„์ปค ์ด๋ฏธ์ง€๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.

  • FROM
    • ๋ชจ๋“  ์ด๋ฏธ์ง€๋Š” ๋‹ค๋ฅธ ์ด๋ฏธ์ง€์—์„œ ์ถœ๋ฐœํ•˜๋Š”๋ฐ, ์ด ์ด๋ฏธ์ง€๋Š” diamol/maven์„ ์‹œ์ž‘์ ์œผ๋กœ ์ง€์ •ํ–ˆ๋‹ค.
    • AS๋ฅผ ์‚ฌ์šฉํ•ด ์ด๋ฆ„์„ ๋ถ™์ผ ์ˆ˜๋„ ์žˆ๋‹ค.
  • WORKDIR
    • ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ , ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ง€์ •ํ•˜๋Š” ์ธ์ŠคํŠธ๋Ÿญ์…˜.
    • ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” /usr/src/iotd
    • ์œˆ๋„์šฐ์—์„œ๋Š” C:\usr\src\iotd
  • COPY
    • ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ํŒŒ์ผ ํ˜น์€ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋กœ ๋ณต์‚ฌํ•˜๋Š” ์ธ์ŠคํŠธ๋Ÿญ์…˜
    • โ€“from ์ธ์ž๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด๋‹น ํŒŒ์ผ์ด ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ์•„๋‹ˆ๋ผ ์•ž์„  ๋นŒ๋“œ ๋‹จ๊ณ„์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์žˆ๋Š” ํŒŒ์ผ์„ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋‹ค.
    • COPY [์›๋ณธ๊ฒฝ๋กœ] [๋ณต์‚ฌ๊ฒฝ๋กœ]
    • ์œ„ ์ฝ”๋“œ์—์„œ๋Š” ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์žˆ๋Š” pom.xmlํŒŒ์ผ์„ ์ด๋ฏธ์ง€์˜ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌํ•˜์˜€๋‹ค.
  • RUN
    • ๋นŒ๋“œ ์ค‘์— ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ ๋‹ค์Œ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด์— ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ

์ด builder ๋‹จ๊ณ„๊ฐ€ ๋๋‚˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.


๐Ÿ„ ์ด๋ฏธ์ง€ ๋นŒ๋“œ

์•„๋ž˜์™€ ๊ฐ™์ด cd (ํŒŒ์ผ์œ„์น˜) ์ดํ›„, docker image build -t image-of-the-day .๋ฅผ ์‹คํ–‰ํ•ด ์ฃผ์—ˆ๋‹ค.
docker image build -t [์ด๋ฏธ์ง€์˜ ์ด๋ฆ„] [์ด๋ฏธ์ง€๊ฐ€ ๋“ค์–ด๊ฐˆ ๋””๋ ‰ํ† ๋ฆฌ] ์œผ๋กœ .์„ ๋นผ๋จน์œผ๋ฉด ์•ˆ๋œ๋‹ค.

image

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

image

์ดํ›„, ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:800/์— ์ ‘์†ํ•ด์ฃผ๋ฉด NASA์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ์˜ค๋Š˜ ์‚ฌ์ง„์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ JSON์œผ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

image



๊ฐœ์ธ ๊ณต๋ถ€ ๊ธฐ๋ก์šฉ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
ํ‹€๋ฆฌ๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์ œ๋ณดํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.๐Ÿ˜