๐Ÿ“˜ [Docker] Docker ๊ฐœ๋… ์ •๋ฆฌ

์–‘์•„ยท2021๋…„ 8์›” 24์ผ
1

DOCKER

๋ชฉ๋ก ๋ณด๊ธฐ
1/1
post-thumbnail
post-custom-banner

๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด Docker๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๋งŽ์ด ๋“ฃ๊ณ  ์“ฐ๊ฒŒ ๋˜๋Š”๋ฐ, ๋ˆ„๊ตฐ๊ฐ€ ๋‚˜ํ•œํ…Œ ๋„์ปค๊ฐ€ ๋ญ๋ƒ๊ณ  ๋ฌผ์–ด๋ณด๋ฉด ๋ช…ํ™•ํ•˜๊ฒŒ ๋Œ€๋‹ตํ•ด ์ค„ ์ž์‹ ์ด ์—†์–ด์„œ ์ •๋ฆฌํ•ด๋ณด๋Š” ๊ธ€๐Ÿคญ


๋‚˜๋Š” ๋„์ปค์™€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐ™์€ ๊ฐœ๋…์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ ๋„์ปค = ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ด์™”๋‹ค.
ํ•˜์ง€๋งŒ ์ด๊ฑด VM = Vmware๋ผ๋Š” ๋ง์ฒ˜๋Ÿผ ํ‹€๋ฆฐ ๋ง์ด๋‹ค.
์ •ํ™•ํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ ์„ ์ด์šฉํ•˜์—ฌ ๊ฐ€์ƒํ™”ํ•˜์ง€ ์•Š๊ณ  ๊ฒฉ๋ฆฌํ•ด์„œ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

๐Ÿ“Œ Docker๋ž€ ๋ฌด์—‡์ผ๊นŒ?

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

๐Ÿง ๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ ์ปจํ…Œ์ด๋„ˆ๋ž€ ๋ฌด์—‡์ผ๊นŒโ“

์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ”์ด๋„ˆ๋ฆฌ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ ๋ชจ๋“  ์ข…์†์„ฑ์„ ํŒจํ‚ค์ง€๋กœ ๋ฌถ์–ด ์„œ๋กœ ๋‹ค๋ฅธ ์ปดํ“จํŒ… ํ™˜๊ฒฝ์—์„œ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ํ‘œ์ค€ ๋‹จ์œ„์ด๋‹ค.
์ฆ‰, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ๋งŒ๋“  ์•ฑ์„ ๊ฒฉ๋ฆฌ์‹œ์ผœ ๋กœ์ปฌ ํ™˜๊ฒฝ ๋ฟ ์•„๋‹ˆ๋ผ ์–ด๋Š ํ™˜๊ฒฝ์—์„œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋Š” ๋Ÿฐํƒ€์ž„์— ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋˜๋Š”๋ฐ, Docker ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋Š” Docker Engine์—์„œ ์‹คํ–‰๋  ๋•Œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋œ๋‹ค. ์ฆ‰, ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•œ ์ƒํƒœ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ธ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค.
1. ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ
2. ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ๋ฒˆ๋“ค๋กœ ์••์ถ• ํ•ด์ œ
3. ๋ฒˆ๋“ค์—์„œ ์ด๋ฏธ์ง€ Run

๐Ÿง ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ž€โ“

๋„์ปค์—์„œ ์ปจํ…Œ์ด๋„ˆ์™€ ํ•จ๊ป˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋…์ธ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋Š” ์ฝ”๋“œ, ๋Ÿฐํƒ€์ž„, ์‹œ์Šคํ…œ ๋„๊ตฌ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์„ค์ • ๋“ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์„ค์น˜ํ•œ ๋’ค ํŒŒ์ผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์œผ๋กœ ์‹คํ–‰ ํŒŒ์ผ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ฆ‰, ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ฝ๊ธฐ ์ „์šฉ ํ…œํ”Œ๋ฆฟ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
Docker ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋Š” Docker hub์— ๋“ฑ๋กํ•˜๊ฑฐ๋‚˜ Docker Registry ์ €์žฅ์†Œ๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
์ฐธ๊ณ ๋กœ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ํ•˜๋‚˜๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿณ Dockerfile ๋ช…๋ น์–ด

Dockerfile์€ Docker ์ด๋ฏธ์ง€ ์„ค์ • ํŒŒ์ผ๋กœ Dockerfile์— ์„ค์ •๋œ ๋‚ด์šฉ๋Œ€๋กœ ์ด๋ฏธ์ง€๋ฅผ ์„ค์ •ํ•˜๊ฒŒ ๋œ๋‹ค.
Dockerfile์—์„œ ์ž์ฃผ ์“ฐ์ด๋Š” ๋ช…๋ น์–ด ๋ช‡ ๊ฐ€์ง€๋ฅผ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

  • FROM
    ์–ด๋–ค ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ• ์ง€ ์„ค์ •ํ•˜๋Š” ๊ณณ์œผ๋กœ ๊ธฐ์กด์— ๋งŒ๋“ค์–ด์ง„ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑํ•œ๋‹ค.

    • ํ˜•์‹: FROM <์ด๋ฏธ์ง€ ์ด๋ฆ„>:<ํƒœ๊ทธ>
    • ์˜ˆ์‹œ: FROM openjdk:8-jdk-alpine
  • WORKDIR
    ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์ „ํ™˜์„ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. ์ด ๋ช…๋ น๋ฌธ์œผ๋กœ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ „ํ™˜ํ•˜๋ฉด ์ดํ›„์— ๋“ฑ์žฅํ•˜๋Š” ๋ชจ๋“  RUN, CMD, COPY, ADD ๋“ฑ์˜ ๋ช…๋ น๋ฌธ์€ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.

    • ํ˜•์‹: WORKDIR <์ด๋™ํ•  ๊ฒฝ๋กœ>
    • ์˜ˆ์‹œ: WORKDIR /usr/app
  • RUN
    Shell ์Šคํฌ๋ฆฝํŠธ ํ˜น์€ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค. ์ด ๋ช…๋ น์–ด๋กœ ๊ฑฐ์˜ ๋ชจ๋“  ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ฃผ๋กœ ์ด๋ฏธ์ง€ ์•ˆ์— ํŠน์ • ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

    • ํ˜•์‹: RUN <์ „์ฒด ์ปค๋งจ๋“œ>
    • ์˜ˆ์‹œ: RUN apt-get update
  • CMD
    ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์„ ๋•Œ ๋””ํดํŠธ๋กœ ์‹คํ–‰ํ•  ์‹คํ–‰ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ด๋‹ค.

    • ํ˜•์‹: CMD ["<์ปค๋งจ๋“œ>","<ํŒŒ๋ผ๋ฏธํ„ฐ1>","<ํŒŒ๋ผ๋ฏธํ„ฐ2>"]
    • ์˜ˆ์‹œ: CMD ["sh", "-c", "java -Dspring.profiles.active=dev -jar ./api.jar"]
  • EXPOSE
    ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๋ฆฌ์Šค๋‹ํ•˜๋Š” ํฌํŠธ์™€ ํ”„๋กœํ† ์ฝœ์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
    ํ”„๋กœํ† ์ฝœ์€ TCP์™€ UDP๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋งŒ์•ฝ ํ”„๋กœํ† ์ฝœ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด TCP๋กœ ์ž๋™ ์ง€์ •๋œ๋‹ค.

    • ํ˜•์‹: EXPOSE <ํฌํŠธ> or <ํฌํŠธ>/<ํ”„๋กœํ† ์ฝœ>
    • ์˜ˆ์‹œ: EXPOSE 80
  • COPY
    ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์— ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋‚˜ ํŒŒ์ผ์„ Docker ์ด๋ฏธ์ง€ ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
    ์ฃผ์˜ํ•  ์ ์€ ์••์ถ• ํŒŒ์ผ ์‚ฌ์šฉ ์‹œ ์••์ถ•์„ ํ•ด์ œํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•˜๋ฉฐ, ํŒŒ์ผ URL๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
    ์ด๋ฏธ์ง€์—์„œ ํŒŒ์ผ์ด ์œ„์น˜ํ•  ๊ฒฝ๋กœ ๋งˆ์ง€๋ง‰์ด /๋กœ ๋๋‚˜๋ฉด ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ํ•ด๋‹น ํŒŒ์ผ์€ ๊ทธ ์•„๋ž˜์— ๋ณต์‚ฌ๋œ๋‹ค.

    • ํ˜•์‹: COPY <๋ณต์‚ฌํ•  ํŒŒ์ผ ๊ฒฝ๋กœ><์ด๋ฏธ์ง€์—์„œ ํŒŒ์ผ์ด ์œ„์น˜ํ•  ๊ฒฝ๋กœ>
    • ์˜ˆ์‹œ: COPY nginx.conf /etc/nginx/conf.d/
  • ADD
    COPY์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํŒŒ์ผ์„ ์ด๋ฏธ์ง€์— ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
    ์ฐจ์ด์ ์€ COPY์—์„œ ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋˜ ์••์ถ• ํŒŒ์ผ, ํŒŒ์ผ URL ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ํ˜•์‹: ADD <๋ณต์‚ฌํ•  ํŒŒ์ผ ๊ฒฝ๋กœ><์ด๋ฏธ์ง€์—์„œ ํŒŒ์ผ์ด ์œ„์น˜ํ•  ๊ฒฝ๋กœ>
    • ์˜ˆ์‹œ: ADD ADD ./build/libs/test-api-1.0-SNAPSHOT.jar api.jar
  • ENV
    ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ RUN, CMD, ENTRYPOINT์— ์ ์šฉ๋œ๋‹ค.

    • ํ˜•์‹: ENV <ํ‚ค> <๊ฐ’>
    • ์˜ˆ์‹œ: ENV NODE_ENV production

๐Ÿ“ท ์ดํ•ด๋ฅผ ๋•๋Š” ์ด๋ฏธ์ง€

๊ตฌ๊ธ€๋ง ํ•˜๋‹ค๊ฐ€ ์ดํ•ด๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋ช‡ ๊ฐœ GET! ๊ตฌ๊ธ€๋ง ์ตœ๊ณ ๐Ÿ‘
๊ฐœ๋…์€ ์ด์ •๋„๋กœ ์ •๋ฆฌํ•˜๊ณ  ๋‹ค์Œ๋ฒˆ์—๋Š” ๋„์ปค ์„ค์น˜ ๊ด€๋ จ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ด์•ผ์ง€๐Ÿ˜‰

๐Ÿณ Docker ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ workflow

  1. ์ฝ”๋“œ ๊ฐœ๋ฐœ ๋ฐ ์ดˆ๊ธฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ์„œ๋น„์Šค ๊ธฐ์ค€ ์ƒ์„ฑ
  2. ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ Dockerfile ์ƒ์„ฑ (DSL Domain-Specific Language ์–ธ์–ด ์‚ฌ์šฉ)
  3. ์‚ฌ์šฉ์ž ์ง€์ • Dockerfile ์ด๋ฏธ์ง€ ์ƒ์„ฑ (+์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ์„œ๋น„์Šค ํฌํ•จ)
  4. (opt) ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ Docker ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ ์‹œ docker-compose.yml์—์„œ ์„œ๋น„์Šค ์ •์˜
  5. Docker ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰
  6. ๋กœ์ปฌ Docker ํ˜ธ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Docker ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ…Œ์ŠคํŠธ

๐Ÿ”— ์ฐธ์กฐ: https://docs.microsoft.com/en-us/dotnet/architecture/microservices/docker-application-development-process/docker-app-development-workflow

๐Ÿณ Docker Architecture

๐Ÿ”— ์ฐธ์กฐ: https://nordicapis.com/api-driven-devops-spotlight-on-docker/

๐Ÿณ Docker ์ปจํ…Œ์ด๋„ˆ์™€ VM ๋น„๊ต

๐Ÿ”— ์ฐธ์กฐ: https://www.docker.com/resources/what-container

profile
Back-end developer
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€