Skip to content

yu-heejin/docker-swarm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

7 Commits
ย 
ย 

Repository files navigation

์ฐธ๊ณ ํ•œ ์‚ฌ์ดํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

EC2 3๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Docker swarm ์‹ค์Šต์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • worker host: docker-swarm-1, docker-swarm-2
  • manager host: docker-swarm-3

Docker Swarm์ด๋ž€?

Container Orchestration

  • ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์ด๋ž€ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฐฐํฌ, ๊ด€๋ฆฌ, ํ™•์žฅ, ๋„คํŠธ์›Œํ‚น์„ ์ž๋™ํ™”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…

  • ํ”„๋กœ๋น„์ €๋‹ ๋ฐ ๋ฐฐํฌ
  • ๊ตฌ์„ฑ ๋ฐ ์ผ์ • ์กฐ์ •
  • ๋ฆฌ์†Œ์Šค ํ• ๋‹น
  • ์ปจํ…Œ์ด๋„ˆ ๊ฐ€์šฉ์„ฑ
  • ์ปจํ…Œ์ด๋„ˆ ์Šค์ผ€์ผ๋ง ๋˜๋Š” ์ œ๊ฑฐ
  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๋ฐ ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ…
  • ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‹ˆํ„ฐ๋ง
  • ์‹คํ–‰๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •
  • ์ปจํ…Œ์ด๋„ˆ๊ฐ„ ๋ณด์•ˆ ์œ ์ง€

Docker Swarm

  • ์ผ๋ฐ˜์ ์œผ๋กœ Docker ์‚ฌ์šฉ๋ฒ•์€ ํ•˜๋‚˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.
  • docker ps, docker run, docker create ๋“ฑ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋“ค์€ ๋ชจ๋‘ ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.
  • ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ๋„์ปค๋ฅผ ์šด์˜ ํ™˜๊ฒฝ์— ์ ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด, ํ•˜๋‚˜์˜ ํ˜ธ์ŠคํŠธ์— ๋„์ปค๋ฅผ ์„ค์น˜ํ•ด ์šด์˜ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต๋‹ค.
    • ๋‹จ์ผ ํ˜ธ์ŠคํŠธ๋กœ ๊ตฌ์„ฑ๋œ ํ™˜๊ฒฝ์€ ํ™•์žฅ์„ฑ(Scalability), ๊ฐ€์šฉ์„ฑ(Availability), ์žฅ์•  ํ—ˆ์šฉ์„ฑ(Fault Tolerance) ์ธก๋ฉด์—์„œ ๋งŽ์€ ํ•œ๊ณ„์ ์„ ๊ฐ€์ง„๋‹ค.
    • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„๋ฅผ ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๋ฌถ์–ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณ‘๋ ฌ๋กœ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋„์ปค ์Šค์›œ์€ ์ด์ฒ˜๋Ÿผ ์„œ๋กœ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์— ์žˆ๋Š” ์—ฌ๋Ÿฌ ๋Œ€์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ๋งˆ์น˜ ํ•˜๋‚˜์˜ ํ˜ธ์ŠคํŠธ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ์ด๋‹ค.

์žฅ์ 

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

Docker Swarm ๊ตฌ์กฐ

๋ถ„์‚ฐ ์ฝ”๋””๋„ค์ดํ„ฐ(Distributed Coordinator)

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋„์ปค ์„œ๋ฒ„๋ฅผ ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ข… ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ๋™๊ธฐํ™”ํ•œ๋‹ค.

์—์ด์ „ํŠธ

  • ๊ฐ ์„œ๋ฒ„๋ฅผ ์ œ์–ดํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์›Œ์ปค ๋…ธ๋“œ

  • ์‹ค์ œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ด€๋ฆฌ๋˜๋Š” ๋„์ปค ์„œ๋ฒ„์ด๋‹ค.
  • ์›Œ์ปค ๋…ธ๋“œ๋Š” ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค.

๋งค๋‹ˆ์ € ๋…ธ๋“œ

  • ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ ์›Œ์ปค ๋…ธ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋„์ปค ์„œ๋ฒ„์ด๋‹ค.
  • ๋งค๋‹ˆ์ € ๋…ธ๋“œ๋Š” ์›Œ์ปค ๋…ธ๋“œ์˜ ์—ญํ• ๋„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.
  • ๋งค๋‹ˆ์ € ๋…ธ๋“œ๋Š” ๋ฌด์กฐ๊ฑด 1๊ฐœ ์ด์ƒ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.

Swarm classic vs Swarm mode

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

์Šค์›œ ํด๋ž˜์‹

  • ๋„์ปค ๋ฒ„์ „ 1.6 ์ดํ›„๋ถ€ํ„ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • docker run, docker ps ๋“ฑ ์ผ๋ฐ˜์ ์ธ ๋„์ปค ๋ช…๋ น์–ด์™€ ๋„์ปค API๋กœ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์„œ๋ฒ„๋ฅผ ์ œ์–ดํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ๋ถ„์‚ฐ ์ฝ”๋””๋„ค์ดํ„ฐ, ์—์ด์ „ํŠธ ๋“ฑ์„ ๋ณ„๋„๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

์Šค์›œ ๋ชจ๋“œ

  • ๋„์ปค ๋ฒ„์ „ 1.12 ์ดํ›„๋ถ€ํ„ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์ƒ์„ฑํ•ด ํ•„์š”์— ๋”ฐ๋ผ ์œ ๋™์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ์˜ ์ˆ˜๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ปจํ…Œ์ด๋„ˆ๋กœ์˜ ์—ฐ๊ฒฐ์„ ๋ถ„์‚ฐํ•˜๋Š” ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ๊ธฐ๋Šฅ์„ ์ž์ฒด์ ์œผ๋กœ ์ง€์›ํ•œ๋‹ค.
  • ๋ถ„์‚ฐ ์ฝ”๋””๋„ค์ดํ„ฐ, ์—์ด์ „ํŠธ ๋“ฑ์ด ๋ชจ๋‘ ๋„์ปค ์—”์ง„ ์ž์ฒด์— ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค.

์ฃผ์š” ์šฉ์–ด

์ด๋ฆ„ ์„ค๋ช…
๋…ธ๋“œ(Node) ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐœ๋ณ„ ๋„์ปค ์„œ๋ฒ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
๋งค๋‹ˆ์ € ๋…ธ๋“œ(Manager Node) โ€ข ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์™€ ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ๋‹ด๋‹นํ•œ๋‹ค. โ—ฆ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์™€ ๊ฐ™์€ ์—ญํ• ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
์›Œ์ปค ๋…ธ๋“œ(Worker Node) โ€ข ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค๋“ค์ด ์‹ค์ œ ๊ตฌ๋™๋˜๋Š” ๋…ธ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. โ—ฆ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์™€ ๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ค๋ฉด, Docker swarm์—์„œ๋Š” ๋งค๋‹ˆ์ € ๋…ธ๋“œ๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์›Œ์ปค ๋…ธ๋“œ์˜ ์—ญํ• ์„ ๊ฐ™์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. โ—ฆ ์Šค์ผ€์ค„๋ง์„ ์ž„์˜๋กœ ๋ง‰๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
์Šคํƒ(Stack) โ€ข ํ•˜๋‚˜ ์ด์ƒ์˜ ์„œ๋น„์Šค(Service)๋กœ ๊ตฌ์„ฑ๋œ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฌถ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. โ—ฆ ๋„์ปค ์ปดํฌ์ฆˆ์™€ ์œ ์‚ฌํ•œ ์–‘์‹์˜ yaml ํŒŒ์ผ๋กœ ์Šคํƒ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
์„œ๋น„์Šค(Service) โ€ข ๋…ธ๋“œ์—์„œ ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ์ž‘์—…๋“ค์„ ์ •์˜ํ•ด๋†“์€ ๊ฒƒ์œผ๋กœ, ํด๋Ÿฌ์Šคํ„ฐ ์•ˆ์—์„œ ๊ตฌ๋™์‹œํ‚ฌ ์ปจํ…Œ์ด๋„ˆ ๋ฌถ์Œ์„ ์ •์˜ํ•œ ๊ฐ์ฒด์ด๋‹ค. โ—ฆ ๋„์ปค ์Šค์›œ์—์„œ์˜ ๊ธฐ๋ณธ์ ์ธ ๋ฐฐํฌ ๋‹จ์œ„๋กœ ์ทจ๊ธ‰๋œ๋‹ค. โ—ฆ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋Š” ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ๋™๋˜๋ฉฐ, ์ด๋“ค ๊ฐ๊ฐ์ด ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ๋™์— ํ•„์š”ํ•œ ๊ฐœ๋ณ„์ ์ธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค(microservice)๋กœ ๊ธฐ๋Šฅํ•œ๋‹ค.
ํ…Œ์Šคํฌ(Task) โ€ข ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋™์‹œํ‚ฌ ๋•Œ, ๋„์ปค ์Šค์›œ์€ ํ•ด๋‹น ์„œ๋น„์Šค์˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋งž์ถฐ ์‹ค์ œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ๋™์ž‘ํ•  ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ๋…ธ๋“œ์— ๋ถ„๋ฐฐํ•˜๋Š”๋ฐ, ์ด๋ฅผ ํ…Œ์Šคํฌ๋ผ๊ณ  ํ•œ๋‹ค. โ—ฆ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋Š” ์ง€์ •๋œ ๋ณต์ œ๋ณธ(replica) ์ˆ˜์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์Šคํฌ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ์˜ ํ…Œ์Šคํฌ์—๋Š” ํ•˜๋‚˜์”ฉ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํฌํ•จ๋œ๋‹ค.
์Šค์ผ€์ค„๋ง(Scheduling) โ€ข ์„œ๋น„์Šค ๋ช…์„ธ์— ๋”ฐ๋ผ ํ…Œ์Šคํฌ๋ฅผ ๋…ธ๋“œ์— ๋ถ„๋ฐฐํ•˜๋Š” ์ž‘์—…์„ ์˜๋ฏธํ•œ๋‹ค. โ—ฆ 2022๋…„ 8์›” ๊ธฐ์ค€์œผ๋กœ ๋„์ปค ์Šค์›œ์—์„œ๋Š” ์˜ค์ง ๊ท ๋“ฑ ๋ถ„๋ฐฐ(spread) ๋ฐฉ์‹๋งŒ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค.

์‚ฌ์šฉ ํฌํŠธ

# AWS ์ธ๋ฐ”์›ƒ๋“œ ๊ทœ์น™๋„ ํŽธ์ง‘ํ•ด์•ผํ•œ๋‹ค.
sudo ufw allow {port}
  • 2377/tcp: ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” ํฌํŠธ
  • 7946/tcp, 7946/udp: ๋…ธ๋“œ ๊ฐ„ ํ†ต์‹ ์— ์‚ฌ์šฉ๋˜๋Š” ํฌํŠธ
  • 4789/udp: ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” Ingress ์˜ค๋ฒ„๋ ˆ์ด ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์— ์‚ฌ์šฉ๋œ๋‹ค.

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

๋งค๋‹ˆ์ € ๋…ธ๋“œ ์ƒ์„ฑํ•˜๊ธฐ

docker swarm init --advertise-addr { private_ip }
  • ๋งค๋‹ˆ์ € ํ˜ธ์ŠคํŠธ์— ์ ‘์†ํ•ด ์œ„ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์•ผํ•œ๋‹ค.

์›Œ์ปค ๋…ธ๋“œ ์ƒ์„ฑํ•˜๊ธฐ

docker swarm join --token { token } { private_ip }:2377
# This node joined a swarm as a worker.
  • ์›Œ์ปค ํ˜ธ์ŠคํŠธ์— ์ ‘์†ํ•ด ์œ„ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.
ubuntu@ip-:~$ docker node ls
ID                            HOSTNAME          STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
4ekbnwh2ayfy2qo9alcarsy5q     ip-               Ready     Active                          24.0.5
f4ag8t9kczcn0sg0wzexfac3x *   ip-               Ready     Active         Leader           24.0.5
js2iuhm3i5r7qpnsrxs15ojc1     ip-               Ready     Active                          24.0.5
  • ๋งค๋‹ˆ์ € ํ˜ธ์ŠคํŠธ์— ์ ‘์†ํ•ด list๋ฅผ ํ™•์ธํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • docker node ls ๋ช…๋ น์–ด๋Š” ๋งค๋‹ˆ์ € ๋…ธ๋“œ์—์„œ๋งŒ ๋™์ž‘ํ•œ๋‹ค.
    • ID ๊ฐ’ ์˜†์— ๋ถ™์€ *์€ ์กฐํšŒ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ ๋งค๋‹ˆ์ € ๋…ธ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ID๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์ฐจ์›์—์„œ ๊ฐ ๋…ธ๋“œ์— ๋ถ€์—ฌ๋œ ๊ณ ์œ  ๊ฐ’์ด๋ฉฐ, HOSTNAME์€ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ด๋ฆ„์ด๋‹ค.
    • HOSTNAME์€ ์ค‘๋ณต์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ID๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.
    • ํ˜ธ์ŠคํŠธ๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋– ๋‚ฌ๋‹ค(leave)๊ฐ€ ๋‹ค์‹œ ํ•ฉ๋ฅ˜(join)ํ•˜๋Š” ๊ฒฝ์šฐ ์ด์ „๊ณผ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ID ๊ฐ’์ด ๋ถ€์—ฌ๋œ๋‹ค.
  • AVAILABILITY์˜ ์ข…๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • Active: ์ •์ƒ์ ์œผ๋กœ ํƒœ์Šคํฌ๋ฅผ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ
    • Pause: ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์ƒˆ๋กœ์šด ํ…Œ์Šคํฌ ํ• ๋‹น์„ ํ•˜์ง€ ์•Š์ง€๋งŒ, ํ…Œ์Šคํฌ๊ฐ€ ๊ตฌ๋™ ์ƒํƒœ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•œ๋‹ค.
    • Drain: ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์ƒˆ๋กœ์šด ํ…Œ์Šคํฌ๋ฅผ ํ• ๋‹นํ•˜์ง€ ์•Š๊ณ , ํ•ด๋‹น ๋…ธ๋“œ์—์„œ ๋Œ์•„๊ฐ€๋˜ ํ…Œ์Šคํฌ๊ฐ€ ๋ชจ๋‘ ์ข…๋ฃŒ๋˜๋ฉฐ, Active ์ƒํƒœ์ธ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๋‹ค์‹œ ์Šค์ผ€์ค„๋ง ๋œ๋‹ค.
  • MANAGER STATUS์˜ ์ข…๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • Leader: ์Šค์›œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ด€๋ฆฌ์™€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๋…ธ๋“œ์ด๋‹ค.
    • Reachable: ๋งค๋‹ˆ์ € ๋…ธ๋“œ๋กœ์„œ ๋‹ค๋ฅธ ๋งค๋‹ˆ์ € ๋…ธ๋“œ๋“ค๊ณผ ์ •์ƒ์ ์œผ๋กœ ํ†ต์‹  ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ด๋‹ค.
      • ๋งŒ์•ฝ Leader ๋…ธ๋“œ์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ํ•ด๋‹น ์ƒํƒœ๊ฐ’์„ ๊ฐ€์ง„ ๋งค๋‹ˆ์ € ๋…ธ๋“œ๊ฐ€ ์ƒˆ Leader ํ›„๋ณด๊ตฐ์ด ๋œ๋‹ค.
    • Unavailable: Leader๋ฅผ ํฌํ•จํ•œ ๋‹ค๋ฅธ ๋งค๋‹ˆ์ € ๋…ธ๋“œ๋“ค๊ณผ ํ†ต์‹ ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ด๋‹ค.
  • ํด๋Ÿฌ์Šคํ„ฐ๋Š” 1๊ฐœ ์ด์ƒ์˜ ๋งค๋‹ˆ์ € ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , **Leader๋กœ ์„ ๋ณ„๋œ ๋งค๋‹ˆ์ € ๋…ธ๋“œ๊ฐ€ ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‹ค์งˆ์ ์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.**
    • ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋ฆฌ๋” ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด ์ „ํŒŒ๋˜๊ณ , ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๋“ค์ด ๋ฆฌ๋” ๋…ธ๋“œ์™€ ๋™๊ธฐํ™”๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.

Service์™€ Task

์„œ๋น„์Šค(Service)

  • docker run์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๊ตฌ๋™์‹œํ‚ค๋Š” ๋ช…๋ น์–ด์ด๋‹ค.
    • ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„, ์ด๋ฏธ์ง€ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๋„์ปค ์—”์ง„์ด ์•Œ์•„์„œ ํ•„์š”ํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋‚ด๋ ค๋ฐ›์•„ ๊ตฌ๋™์‹œํ‚จ๋‹ค.
  • Docker์˜ ๊ธฐ๋ณธ ๋ฐฐํฌ ๋‹จ์œ„๊ฐ€ ์ปจํ…Œ์ด๋„ˆ๋ผ๋ฉด, **Docker Swarm์˜ ๊ธฐ๋ณธ ๋ฐฐํฌ ๋‹จ์œ„๋Š” ์„œ๋น„์Šค(Service)**์ด๋‹ค.
    • ํ”ํžˆ โ€˜๊ฐ™์€ ์ด๋ฏธ์ง€์—์„œ ์ƒ์„ฑ๋œ ์ปจํ…Œ์ด๋„ˆ์˜ ์ง‘ํ•ฉโ€™์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ๋‹ค.
    • ๋‹จ์ผ ์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ์•ˆ์—์„œ ๊ตฌ๋™์‹œํ‚ฌ ์ปจํ…Œ์ด๋„ˆ ๋ฌถ์Œ์„ ์ •์˜ํ•œ ๊ฐ์ฒด์— ๋” ๊ฐ€๊น๋‹ค.
  • ์„œ๋น„์Šค๋Š” ์„ ์–ธ์ ์œผ๋กœ ๊ตฌ์„ฑ๋”˜๋‹ค.
    • ์ฆ‰, ์›ํ•˜๋Š” ์ƒํƒœ๋ฅผ ์ •์˜ํ•˜๋ฉด, ๋„์ปค๋Š” ๊ทธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ž‘์—…์„ ์ง€์†์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    • ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์š”์†Œ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
      1. ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐฐํฌํ•  ์ด๋ฏธ์ง€์˜ ์ •๋ณด
      2. ์ „์ฒด ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•  ์ปจํ…Œ์ด๋„ˆ์˜ ์ˆ˜
      3. ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฐฐ์น˜ ํ˜•ํƒœ
      4. ์ปจํ…Œ์ด๋„ˆ์— ๋ถ™์ผ ๋ณผ๋ฅจ ์ •๋ณด
      5. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐ์น˜์‹œํ‚ฌ ๋…ธ๋“œ ์กฐ๊ฑด
      6. ์ปจํ…Œ์ด๋„ˆ์˜ ์—…๋ฐ์ดํŠธ ์ „๋žต ๋ฐ ์ •์ฑ… ์ง€์ •

์„œ๋น„์Šค(service)์™€ ํ…Œ์Šคํฌ(Task)์˜ ๊ด€๊ณ„

Untitled

  • ์„ ์–ธ์ ์œผ๋กœ ์ •์˜๋œ ์„œ๋น„์Šค์˜ ๋ช…์„ธ์— ๋”ฐ๋ผ ์ƒ์„ฑ๋˜์–ด ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ์— ๋ฐฐ์น˜๋˜๋Š” ๊ฐœ๋ณ„ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฐฐํฌ ๋‹จ์œ„๊ฐ€ ๋ฐ”๋กœ ํ…Œ์Šคํฌ(Task)์ด๋‹ค.
  • ๊ฐ ํ…Œ์Šคํฌ์—๋Š” ์„œ๋น„์Šค๋ช….์ผ๋ จ๋ฒˆํ˜ธ ํ˜•ํƒœ์˜ ์ด๋ฆ„์ด ๋ถ™๊ฒŒ ๋˜๋ฉฐ, ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ปจํ…Œ์ด๋„ˆ์˜ ์ˆ˜(replicas) ๋งŒํผ ์ƒ์„ฑ๋˜์–ด ๊ฐ€์šฉํ•œ ๋…ธ๋“œ์— ์ œ๊ฐ๊ฐ ๋ฐฐ์น˜๋œ๋‹ค.
  • ์ •์˜๋œ ์„œ๋น„์Šค์˜ ๋ช…์„ธ๋ฅผ ์Šค์›œ ๋งค๋‹ˆ์ €๊ฐ€ ํŒŒ์•…ํ•œ ๋’ค, ๊ฐ€์šฉํ•œ ๋…ธ๋“œ์— ์ง€์ •๋œ ๋ ˆํ”Œ๋ฆฌ์นด ์ˆ˜ ๋งŒํผ์˜ ํ…Œ์Šคํฌ๋ฅผ ๋งŒ๋“ค์–ด ํ• ๋‹นํ•œ๋‹ค.

Swarm์— ์„œ๋น„์Šค ๋ฐฐํฌ

docker service create --replicas 1 --name helloworld alpine ping docker.com
  • ping docker.com ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ์„œ๋น„์Šค ์ƒ์„ฑ์€ ๋งค๋‹ˆ์ € ํ˜ธ์ŠคํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • --name: ์„œ๋น„์Šค์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•œ๋‹ค.
    • --replicas: ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•  ํ…Œ์Šคํฌ(์ปจํ…Œ์ด๋„ˆ)์˜ ์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค. ์ง€์ •๋œ ์ˆซ์ž ๋งŒํผ ํ…Œ์Šคํฌ๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ์— ๋ฐฐ์น˜๋œ๋‹ค.
    • alpine ping docker.com: ํ…Œ์Šคํฌ์— ํฌํ•จ์‹œํ‚ฌ ์ด๋ฏธ์ง€ ์ •๋ณด๋ฅผ ์ง€์ •ํ•œ๋‹ค.
ubuntu@ip-:~$ docker service ls
ID             NAME          MODE         REPLICAS   IMAGE            PORTS
zpume3y3ng7r   hello         replicated   1/1        alpine:latest    
  • docker service ls๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ƒ์„ฑ๋œ ์„œ๋น„์Šค ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
Error response from daemon: This node is not a swarm manager. 
Worker nodes can't be used to view or modify cluster state. 
Please run this command on a manager node or promote the current node to a manager.
  • ๋งŒ์•ฝ ์›Œ์ปค ํ˜ธ์ŠคํŠธ์—์„œ ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

Swarm์—์„œ ์„œ๋น„์Šค ๊ฒ€์‚ฌํ•˜๊ธฐ

ubuntu@ip-:~$ docker service inspect --pretty helloworld

ID:             m6n03eshissl401jy1ixc4j5i
Name:           helloworld
Service Mode:   Replicated
 Replicas:      1
Placement:
UpdateConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Update order:      stop-first
RollbackConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Rollback order:    stop-first
ContainerSpec:
 Image:         alpine:latest@sha256:82d1e9d7ed48a7523bdebc18cf6290bdb97b82302a8a9c27d4fe885949ea94d1
 Args:          ping docker.com 
 Init:          false
Resources:
Endpoint Mode:  vip

ubuntu@ip-:~$ docker service inspect helloworld
[
    {
        "ID": "m6n03eshissl401jy1ixc4j5i",
        "Version": {
            "Index": 21
        },
        "CreatedAt": "2023-08-02T11:35:37.50905067Z",
        "UpdatedAt": "2023-08-02T11:35:37.50905067Z",
        "Spec": {
            "Name": "helloworld",
            "Labels": {},
            "TaskTemplate": {
                "ContainerSpec": {
                    "Image": "alpine:latest@sha256:82d1e9d7ed48a7523bdebc18cf6290bdb97b82302a8a9c27d4fe885949ea94d1",
                    "Args": [
                        "ping",
                        "docker.com"
                    ],
                    "Init": false,
                    "StopGracePeriod": 10000000000,
                    "DNSConfig": {},
                    "Isolation": "default"
                },
                "Resources": {
                    "Limits": {},
                    "Reservations": {}
                },
                "RestartPolicy": {
                    "Condition": "any",
                    "Delay": 5000000000,
                    "MaxAttempts": 0
                },
                "Placement": {
                    "Platforms": [
                        {
                            "Architecture": "amd64",
                            "OS": "linux"
                        },
                        {
                            "OS": "linux"
                        },
                        {
                            "OS": "linux"
                        },
                        {
                            "Architecture": "arm64",
                            "OS": "linux"
                        },
                        {
                            "Architecture": "386",
                            "OS": "linux"
                        },
                        {
                            "Architecture": "ppc64le",
                            "OS": "linux"
                        },
                        {
                            "Architecture": "s390x",
                            "OS": "linux"
                        }
                    ]
                },
                "ForceUpdate": 0,
                "Runtime": "container"
            },
            "Mode": {
                "Replicated": {
                    "Replicas": 1
                }
            },
            "UpdateConfig": {
                "Parallelism": 1,
                "FailureAction": "pause",
                "Monitor": 5000000000,
                "MaxFailureRatio": 0,
                "Order": "stop-first"
            },
            "RollbackConfig": {
                "Parallelism": 1,
                "FailureAction": "pause",
                "Monitor": 5000000000,
                "MaxFailureRatio": 0,
                "Order": "stop-first"
            },
            "EndpointSpec": {
                "Mode": "vip"
            }
        },
        "Endpoint": {
            "Spec": {}
        }
    }
]
  • docker service inspect --pretty {service_name} ๋ช…๋ น์–ด ์ž…๋ ฅ ์‹œ ์„œ๋น„์Šค์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • --pretty ์˜ต์…˜์„ ์ œ๊ฑฐํ•˜๋ฉด json ํ˜•์‹์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
ubuntu@ip-:~$ docker service ps helloworld
ID             NAME           IMAGE           NODE             DESIRED STATE   CURRENT STATE                ERROR     PORTS
xr6gphsn80x6   helloworld.1   alpine:latest   docker-swarm-1   Running         Running about a minute ago
  • docker service ps {service_name} ๋ช…๋ น์–ด ์ž…๋ ฅ ์‹œ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰์ค‘์ธ ๋…ธ๋“œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
ubuntu@docker-swarm-1:~$ docker ps
CONTAINER ID   IMAGE           COMMAND             CREATED         STATUS         PORTS     NAMES
84c745434f77   alpine:latest   "ping docker.com"   5 minutes ago   Up 5 minutes             helloworld.1.xr6gphsn80x6sne1gw7dpqan4
  • ํ•ด๋‹น ์ž‘์—…์„ ์‹คํ–‰์ค‘์ธ ๋…ธ๋“œ์—์„œ docker ps๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํ•ด๋‹น ์ž‘์—…์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Swarm์—์„œ ์„œ๋น„์Šค ํ™•์žฅํ•˜๊ธฐ

ubuntu@ip-:~$ docker service scale helloworld=5
helloworld scaled to 5
overall progress: 5 out of 5 tasks 
1/5: running   
2/5: running   
3/5: running   
4/5: running   
5/5: running   
verify: Service converged
  • docker service scale ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐํฌ๋œ ์„œ๋น„์Šค์˜ ๋ ˆํ”Œ๋ฆฌ์นด ์ˆ˜๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ, ๋„์ปค ์Šค์›œ์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์™€ ๊ฐ™์€ ์˜คํ†  ์Šค์ผ€์ผ๋ง ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.
ubuntu@ip-:~$ docker service ps helloworld
ID             NAME           IMAGE           NODE              DESIRED STATE   CURRENT STATE            ERROR     PORTS
xr6gphsn80x6   helloworld.1   alpine:latest   docker-swarm-1    Running         Running 7 minutes ago              
as2oomtuoxqy   helloworld.2   alpine:latest   docker-swarm-3    Running         Running 37 seconds ago             
nqtryz8kpe9t   helloworld.3   alpine:latest   docker-swarm-2   Running         Running 36 seconds ago             
h77a77vek40e   helloworld.4   alpine:latest   docker-swarm-2   Running         Running 36 seconds ago             
z88qhti23kao   helloworld.5   alpine:latest   docker-swarm-1    Running         Running 41 seconds ago
  • docker service ps ${service_name}๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ฐ ๋…ธ๋“œ๋งˆ๋‹ค ์—…๋ฐ์ดํŠธ๋œ ์ž‘์—… ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์„œ๋น„์Šค ๋กœ๊ทธ ํ™•์ธํ•˜๊ธฐ

docker service logs {option} {service_name}
helloworld.1.xr6gphsn80x6@ip-    | 64 bytes from 141.193.213.21: seq=763 ttl=46 time=2.435 ms
helloworld.1.xr6gphsn80x6@ip-    | 64 bytes from 141.193.213.21: seq=764 ttl=46 time=2.361 ms
helloworld.1.xr6gphsn80x6@ip-    | 64 bytes from 141.193.213.21: seq=765 ttl=46 time=2.339 ms
helloworld.1.xr6gphsn80x6@ip-    | 64 bytes from 141.193.213.21: seq=766 ttl=46 time=2.409 ms
helloworld.1.xr6gphsn80x6@ip-    | 64 bytes from 141.193.213.21: seq=767 ttl=46 time=2.450 ms
helloworld.1.xr6gphsn80x6@ip-    | 64 bytes from 141.193.213.21: seq=768 ttl=46 time=2.373 ms
helloworld.1.xr6gphsn80x6@ip-    | 64 bytes from 141.193.213.21: seq=769 ttl=46 time=2.393 ms
helloworld.1.xr6gphsn80x6@ip-    | 64 bytes from 141.193.213.21: seq=770 ttl=46 time=2.464 ms
helloworld.1.xr6gphsn80x6@ip-    | 64 bytes from 141.193.213.21: seq=771 ttl=46 time=2.368 ms
helloworld.1.xr6gphsn80x6@ip-    | 64 bytes from 141.193.213.21: seq=772 ttl=46 time=2.365 ms
  • ์œ„ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ping docker.com ์„œ๋น„์Šค๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • --follow, -f : ๋กœ๊ทธ๋ฅผ ์ฝ˜์†”์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ณ„์† ์ŠคํŠธ๋ฆฌ๋ฐํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.
    • --tail, -n : ๋กœ๊ทธ๋ฅผ ๊ฐ€์žฅ ์ตœ๊ทผ ๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ๋ช‡๊ฐœ๊นŒ์ง€ ์ถœ๋ ฅ์‹œํ‚ฌ์ง€ ์ˆซ์ž๋กœ ์ •ํ•œ๋‹ค.
      • ๋งŒ์•ฝ ์Œ์ˆ˜ ๋˜๋Š” all๋กœ ์ง€์ •ํ•  ๊ฒฝ์šฐ ์ „์ฒด ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    • --since : ์ง€์ •๋œ ์‹œ๊ฐ ์ดํ›„์˜ ๋กœ๊ทธ๋งŒ ์ถœ๋ ฅํ•œ๋‹ค.
    • --timestamp, -t : ๋กœ๊ทธ์˜ ๊ฐ ์ค„๋งˆ๋‹ค ํƒ€์ž„ ์Šคํƒฌํ”„๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ถœ๋ ฅ์‹œํ‚จ๋‹ค.

์‹คํ–‰์ค‘์ธ ์„œ๋น„์Šค ์‚ญ์ œํ•˜๊ธฐ

ubuntu@ip-:~$ docker service rm helloworld
helloworld
  • ๊ด€๋ฆฌ์ž ๋…ธ๋“œ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์„œ๋น„์Šค๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ž‘์—… ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •๋ฆฌํ•˜๋Š”๋ฐ ์ผ์ • ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์‚ญ์ œ ํ•˜๊ณ  ๋ฐ”๋กœ ์กฐํšŒ ์‹œ ์•„์ง ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก์— ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.

    docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS     NAMES
    db1651f50347        alpine:latest       "ping docker.com"        44 minutes ago      Up 46 seconds                 helloworld.5.9lkmos2beppihw95vdwxy1j3w
    43bf6e532a92        alpine:latest       "ping docker.com"        44 minutes ago      Up 46 seconds                 helloworld.3.a71i8rp6fua79ad43ycocl4t2
    5a0fb65d8fa7        alpine:latest       "ping docker.com"        44 minutes ago      Up 45 seconds                 helloworld.2.2jpgensh7d935qdc857pxulfr
    afb0ba67076f        alpine:latest       "ping docker.com"        44 minutes ago      Up 46 seconds                 helloworld.4.1c47o7tluz7drve4vkm2m5olx
    688172d3bfaa        alpine:latest       "ping docker.com"        45 minutes ago      Up About a minute             helloworld.1.74nbhb3fhud8jfrhigd7s29we
    
    docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS     NAMES
  • ์„œ๋น„์Šค๊ฐ€ ์‚ญ์ œ๋˜๋ฉด ์„œ๋น„์Šค์— ํฌํ•จ๋œ ๋ชจ๋“  ํ…Œ์Šคํฌ(์ปจํ…Œ์ด๋„ˆ)๊ฐ€ ๋…ธ๋“œ์—์„œ ํ•จ๊ป˜ ์ œ๊ฑฐ๋œ๋‹ค.

    • ๋‹จ, ์„œ๋น„์Šค์—์„œ ๋„์ปค ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค๋ฉด, ํ•ด๋‹น ๋ณผ๋ฅจ์€ ๋ณ„๋„๋กœ ์‚ญ์ œํ•˜์ง€ ์•Š๋Š” ํ•œ ํด๋Ÿฌ์Šคํ„ฐ์— ๋‚จ์•„์žˆ๊ฒŒ ๋œ๋‹ค.

๋ฐœ์ƒํ–ˆ๋˜ ์˜ค๋ฅ˜

Error response from daemon: Timeout was reached before node joined. 
The attempt to join the swarm will continue in the background. 
Use the "docker info" command to see the current swarm status of your node.
  • private๊ฐ€ ์•„๋‹Œ public ip๋กœ ๋งค๋‹ˆ์ € ๋…ธ๋“œ๋ฅผ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
  • ์šฐ๋ถ„ํˆฌ ๋‚ด๋ถ€์—์„œ port ํ—ˆ์šฉ, AWS ์ž์ฒด์—์„œ ํฌํŠธ๋ฅผ ํ—ˆ์šฉํ•ด์ค€๋‹ค.
ubuntu@ip-:~$ docker service ps helloworld
ID             NAME               IMAGE           NODE              DESIRED STATE   CURRENT STATE            ERROR                              PORTS
a4vzxy4vqoux   helloworld.1       alpine:latest   ip-               Running         Running 2 hours ago                                         
dgeqqpgl329w    \_ helloworld.1   alpine:latest   ip-               Shutdown        Failed 2 hours ago       "No such container: helloworldโ€ฆ"   
n4b623sieipy   helloworld.2       alpine:latest   ip-               Running         Running 38 seconds ago                                      
dv6kdbneyykd   helloworld.3       alpine:latest   ip-               Running         Running 38 seconds ago
  • ์™œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ๋˜์ง€ ์•Š์€ ์›์ธ์€ ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ๋‹ค์šด๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ..

    ubuntu@ip-:~$ docker node ls
    ID                            HOSTNAME           STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
    dueqzu3vaew408t8awg6xe854     ip-                Down      Active                          24.0.5
    gb2bdfnxbqhcrqm4gqgtyxlj2 *   ip-                Ready     Active         Leader           24.0.5
    dp24k5afwv6nprh0fqrty6uda     ip-                Down      Active                          24.0.5

About

Docker Swarm Practice

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors