๐ ํด๋น ํฌ์คํ ์ ์์ํ์ธ์! ๋์ปค/์ฟ ๋ฒ๋คํฐ์ค ์์ ์ ์ฝ๊ณ ๊ฐ์ธ์ ์ธ ๋ชฉ์ ํ์ ์์ฑ๋๋ ๊ธ์ ๋๋ค. ํฌ์คํ ์ ์ฌ์ฉ๋๋ ๋ชจ๋ ์๋ฃ๋ ์ ๊ฐ ์ง์ ์ฌ๊ตฌ์ฑํ์์์ ์๋ฆฝ๋๋ค.
์ ๋ฒ ํฌ์คํ ๊น์ง๋ ํ๋์ ํธ์คํธ ์์์์ ๋์ปค ์์ง์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ ์ด์ ์ฌ๋ฌ ํธ์คํธ ์ฆ, ์ฌ๋ฌ ๊ฐ์ ํธ์คํธ ๋จธ์ ๋ค ๊ฐ๊ฐ์ ์ค์น๋์ด ์๋ ๋์ปค ์์ง๋ค์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ ์ค ํ๋์ธ ๋์ปค ์ค์์ ๋ํด ์์๋ณด๋๋ก ํ์.
1. ์ ๋์ปค ์ค์์ ์ธ๊น?
์ค์ ํ๋ก๋์ ํ๊ฒฝ์์๋ ํ๋์ ํธ์คํธ์ ์ค์น๋์ด ์๋ ๋์ปค ์์ง์ผ๋ก๋ง ๋ชจ๋ ์ปจํ ์ด๋๋ฅผ ๊ด๋ฆฌํ์ง๋ ์๋๋ค. ์ด์ ๋ ์๊ฐ๋ณด๋ค ๊ฐ๋จํ๋ค. ๊ทธ ๋์ปค ์์ง์ด ์ค์น๋์ด ์๋ ํธ์คํธ ์ฆ, ๋ฌผ๋ฆฌ ๋จธ์ ์ด ๊ฐ์๊ธฐ ๋ค์ด๋๊ฑฐ๋ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ๊ทธ ์ฆ์ ํ๋ก๋์ ์ ๋ ์ด์ ์ฌ์ฉ์๋ค์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํ ์ ์๊ฒ ๋๋ค. ๋ฟ๋ง ์๋๋ผ ํ๋์ ํธ์คํธ ๋จธ์ ์์ ๋ง์ฝ CPU๋ ๋ฉ๋ชจ๋ฆฌ ๋ํฌ์ค ์ฉ๋๊ณผ ๊ฐ์ ๋ฆฌ์์ค ๋ถ์กฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ๊ฐ์ฅ ์ฌํํ ๋ฐฉ๋ฒ์ ๋งค์ฐ ์ฑ๋ฅ์ด ์ข์ ์๋ฒ๋ฅผ ์ฌ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์๋ฌด๋ฆฌ ์ข์ ์ฑ๋ฅ์ ์๋ฒ๋ฅผ ์ฐ๋ค๊ณ ํ๋๋ผ๋ ๊ทธ ์๋ฒ์ ์ฑ๋ฅ์ 100% ํ์ฉํ๊ธฐ์๋ ํ๋ค ๊ฒ์ด๋ค. ๋ถ๋ช ๋จ์์ ๋๊ณ ์๋ ๋ฆฌ์์ค๋ ์กด์ฌํ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ํ์ฅ์ฑ ์ธก๋ฉด์ด๋ ์๋ฒ ์ ์ง ๋น์ฉ ์ธก๋ฉด์์๋ ์ด๋ฐ ํด๊ฒฐ๋ฒ์ ํฉ๋ฆฌ์ ์ด์ง ๋ชปํ๋ค. ๋ฐ๋ผ์ ์์ฆ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ๋ฌ ๋์ ์๋ฒ๋ฅผ ํด๋ฌ์คํฐ๋ก ๋ง๋ค์ด์ ์์์ ๋ณ๋ ฌ๋ก ํ์ฅํ๋ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด, ํ์ฌ ๊ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ 4GB์ธ ๋ฌผ๋ฆฌ ๋จธ์ 3๋๋ฅผ ์๋ฒ๋ก ํ์ฉํ๊ณ ์๋ค๊ณ ํด๋ณด์. ๊ทธ๋ฌ๋ฉด ์ด ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ๋ 12GB์ด๋ค. ํ๋ก๋์ ์ผ๋ก ์ด์ํ๋ ์ค ํธ๋ํฝ์ด ์ฆ๊ฐํด ๋ 4GB ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ ์๋ฒ 1๋๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์ฆ์คํด์ผ ํ ํ์๊ฐ ์๊ฒผ๋ค. ๊ทธ๋ฌ๋ฉด ์ด ๋, ์ด๋ฏธ ๊ฐ๊ณ ์๋ 3๋์ ์๋ฒ์ ๋ณ๋ ฌ์ ์ผ๋ก 1๋์ ์๋ฒ๋ง ์ถ๊ฐํด์ฃผ์ด ์ผ์ข ์ ์์(๋ฆฌ์์ค) Pool์ ๋ง๋ค์ด ์ฌ์ฉํ ์ ์๋ค.
์ด๋ ๊ฒ ์ฌ๋ฌ ์๋ฒ๋ฅผ ์์ Pool๋ก ๋ง๋๋ ์์ ๋ํ ์ฝ์ง ์๋ค. ์๋ก์ด ์๋ฒ๋ ์ปจํ ์ด๋๊ฐ ์ถ๊ฐ๋์์ ๋ ์ด๋ฅผ ๋ฐ๊ฒฌํ๋ ์์ (Service Discovery)๋ถํฐ ์ด๋ค ์๋ฒ์ ์ปจํ ์ด๋๋ฅผ ํ ๋นํ ๊ฒ์ธ๊ฐ์ ๋ํ ์ค์ผ์ฅด๋ฌ, ๋ก๋๋ฐธ๋ฐ์ ๋ฌธ์ , ๋ํ ํด๋ฌ์คํฐ ๋ด์ ์๋ฒ๊ฐ ๋ค์ด๋์์ ๋ ๊ณ ๊ฐ์ฉ์ฑ์ ์ต๋ํ ๋ณด์ฅํ๊ธฐ ์ํด์๋ ์ด๋ป๊ฒ ํด์ผํ ์ง ๋ฑ.. ๊ด๋ฆฌ์ ์ธ ์ธก๋ฉด์์ ์ฌ๋ฌ๊ฐ์ง ๊ณ ๋ฏผ์ด ๋ฐ์ํ๋ค. ํ์ง๋ง ํ๋์๋ ์ด๋ฌํ ๊ณ ๋ฏผ๋ค๋ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋๋ก ํด์ฃผ๋ ์ฌ๋ฌ ์คํ์์ค ํด์ด ์กด์ฌํ๋ค. ๊ทธ ์ค ๋ํ์ ์ธ ๊ฒ์ด ๋ฐ๋ก ๋์ปค ์ค์๊ณผ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์๋ค.
์์ฆ ์ค์ ํ๊ฒฝ์์๋ ๋์ปค ์ค์๋ณด๋ค๋ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ๋งค์ฐ ์์ฃผ ์ฌ์ฉํ๋ ์ถ์ธ๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ฒ ํฌ์คํ ์์๋ ๋์ฒด ์ ๋์ปค ์ค์์ ๋ํด์ ๋ฐฐ์ธ๊น? ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๊ธฐ์ ์ด๋ผ๊ณ ๋ ํ ์ ์๋ ๋์ปค ์ค์์ ๋ฐฐ์ธ ํ์๊ฐ ์์ง ์์๊น? ํ ์๋ ์๊ฒ ๋ค. ํ์ง๋ง ์ฑ ์ ์ ์๋ถ์ ์๋ฒ ํด๋ฌ์คํฐ๋ฅผ ์ ํด๋ณธ ์ ์ด ์๋ ์ด๋ณด์๋ผ๋ฉด ๋์ปค ์ค์์ ๋จผ์ ์ฌ์ฉํด๋ณด๋ฉด์ ๊ธฐ์ด๋ฅผ ์ตํ๊ธธ ๊ถ์ฅํ๋ค. ๋์ปค ์ค์์ด ์์ปค ํด๋ฌ์คํฐ์์ ์ปจํ ์ด๋๋ฅผ ์ด๋ป๊ฒ ๋ค๋ฃจ๋์ง์ ๋ํ ๊ธฐ์ด ์ง์์ ์๊ธฐ์ ์ ํฉํ๋ค๊ณ ํ๋ค. ๋ฐ๋ผ์ ํด๋ฌ์คํฐ๋ฅผ ์์ ์ฒ์(?) ์ ํด๋ณด๋ ํ์์ด๊ธฐ์ ๋์ปค ์ค์์ ๋ฐฐ์๋ณด๊ณ ์ ํ๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ ๋์ปค ์ค์์ ๋ํด ์ดํด๋ณด์.
2. ๋์ปค ์ค์ ๋ชจ๋
๋์ปค ์ค์์ ๋ณ๋์ ์ค์น ๊ณผ์ ์ด ํ์ ์์ด ๋์ปค ์์ง ์์ฒด์ ๋ด์ฅ๋์ด ์๋ค. ์ฆ, ์ ๋ฒ ํฌ์คํ ๊น์งํด์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํด๋ณธ ๋์ปค๋ ๋์ปค ์ค์ ๋ชจ๋๊ฐ ๋นํ์ฑํ๋ ์ํ์์ ๋ค๋ฃจ์ด๋ณธ ๊ฒ์ด์๋ค. ์ค์ ๋ก, ๋์ปค๊ฐ ์ค์น๋ ํธ์คํธ์์ ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํด๋ณด์.
$ docker info | grep -E "Swarm"
์์ฒ๋ผ inactive ๋ผ๊ณ ๋์ค๋ฉฐ ๋์ปค ์ค์ ๋ชจ๋๊ฐ ๋นํ์ฑํ๋ ์ํ์์ ์ ์ ์๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ ๋์ปค ์ค์ ๋ชจ๋์ ์ฉ์ด์ ๊ตฌ์กฐ์ ๋ํด์ ์์๋ณด์.
3. ๋์ปค ์ค์ ๋ชจ๋์ ๊ตฌ์กฐ
์ค์ ๋ชจ๋์๋ ๋งค๋์ (manager) ๋ ธ๋์ ์์ปค(worker) ๋ ธ๋๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ์์ปค ๋ ธ๋๋ ์ค์ ์ ์ผ๋ก ์ปจํ ์ด๋๊ฐ ์์ฑ๋๊ณ ๊ด๋ฆฌ๋๋ ๋์ปค ์๋ฒ์ด๊ณ , ๋งค๋์ ๋ ธ๋๋ ์์ปค ๋ ธ๋๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋์ปค ์๋ฒ์ด๋ค. ๋ฌผ๋ก ๋งค๋์ ๋ ธ๋์์๋ ์์ปค ๋ ธ๋์ฒ๋ผ ์ปจํ ์ด๋๋ฅผ ์์ฑํ ์๋ ์๋ค. ๊ทธ๋์ ์์ปค ๋ ธ๋ ์์ด ๋งค๋์ ๋ ธ๋๋ง์ผ๋ก ์ค์ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ ์๋ ์๋ค. ํ์ง๋ง ๋ณดํต์ ๋งค๋์ ๋ ธ๋์ ์์ปค ๋ ธ๋๋ฅผ ๋ถ๋ฆฌํด์ ์ฌ์ฉํ๋ค. ์๋ํ๋ฉด ์ค์ ํด๋ฌ์คํฐ(์๋ฒ ํด๋ฌ์คํฐ)๋ฅผ ๊ตฌ์ฑํ ์ ์๋ ๊ฒ์ ๋งค๋์ ๋ ธ๋์์๋ง ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋งค๋์ ๋ ธ๋์ ์์ปค ๋ ธ๋์ ํน์ง๊ณผ ๊ด๊ณ๋ฅผ ๋์ํํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
์ฐ์ ์ ๊ทธ๋ฆผ์์ VM ์์ด์ฝ์ด ์๋ฏธํ๋ ๋ฐ๋ ๋ฌผ๋ฆฌ ๋จธ์ ์ ์๋ฏธํ๋ค. ์ฆ, ๋งค๋์ ๋ ธ๋1์ ๋ฌผ๋ฆฌ ๋จธ์ 1๋, ์์ปค ๋ ธ๋ 1~3์ ๋ฌผ๋ฆฌ ๋จธ์ 3๋, ์ด ๋ฌผ๋ฆฌ ๋จธ์ ์ด 4๋๊ฐ ์กด์ฌํ๋ ์ํฉ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์์ปค ๋ ธ๋๋ค ์์ ์๋ ์ปจํ ์ด๋ ์์ด์ฝ๋ค์ ์์ปค ๋ ธ๋ ์์์ ์ค์ ์์ฑ๋ ์ปจํ ์ด๋๋ค์ ์๋ฏธํ๋ค. ์ ์ฌ์ง์์๋ ๋งค๋์ ๋ ธ๋๊ฐ 1๊ฐ ์ด์ง๋ง, ์ค์ ํ๋ก๋์ ํ๊ฒฝ์์๋ ๋งค๋์ ๋ ธ๋๋ฅผ N๊ฐ๋ฅผ ๋์ด ๋ค์คํ๋ฅผ ํ๋ค. ๊ทธ๋์ผ ๋งค๋์ ์ ๋ถํ๋ฅผ ๋ถ์ฐ์ํค๊ณ , ํน์ฌ๋ ํน์ ๋งค๋์ ๋ ธ๋๊ฐ ๋ค์ด๋์๋ค๊ณ ํ๋ค ๋ค๋ฅธ ๋งค๋์ ๋ ธ๋๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ์์ ์ผ๋ก ์ค์ ํด๋ฌ์คํฐ๋ฅผ ์ ์งํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋์ปค ์ค์ ๋ชจ๋๋ ๋งค๋์ ๋ ธ๋์ ์ ๋ฐ ์ด์์ด ์ฅ์ ๊ฐ ์๊ธธ ๊ฒฝ์ฐ, ์ฅ์ ๊ฐ ์๊ธด ๋งค๋์ ๋ ธ๋๊ฐ ๋ณต๊ตฌ๋ ๋๊น์ง ํด๋ฌ์คํฐ์ ์ด์์ ์ค๋จํ๋ค. ์ด์ ๊ฐ์ ํน์ฑ ๋๋ฌธ์ ์ง์ ๊ฐ์์ ๋งค๋์ ๋ ธ๋๋ก ์ด์ํ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ์๊ธฐ๊ธฐ์ ํ์ ๊ฐ์๋ก ๋งค๋์ ๋ ธ๋๋ฅผ ๊ตฌ์ฑํ์ฌ ๊ณผ๋ฐ์ ์ด์์ด ์ ์ง๋๋ ์ฟผ๋ผ ๋งค๋์ ์์ ํด๋ฌ์คํฐ ์ด์์ ๊ณ์ํ ์ ์๋ค. ๋ฐ๋ผ์ ๋งค๋์ ๋ ธ๋์ ๊ฐ์๋ ํ์ ๊ฐ๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค๊ณ ํ๋ค.
์ฐธ๊ณ ๋ก ๋งค๋์ ๋ ธ๋๋ 2๊ฐ์ง๋ก ๋ ๋ถ๋ฅ๋๋๋ฐ, ์ผ๋ฐ์ ์ธ ๋งค๋์ ์ญํ ์ ํ๋ ๋ ธ๋์ ๋ฆฌ๋ ์ญํ ์ ํ๋ ๋ ธ๋๋ก ๋๋๋ค. ๋ฆฌ๋ ๋งค๋์ ๋ ธ๋๋ ๋ชจ๋ ๋งค๋์ ๋ ธ๋์ ๋ํ ๋ฐ์ดํฐ ๋๊ธฐํ์ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๋ฏ๋ก ํญ์ ์๋ํ ์ ์๋ ์ํ์ฌ์ผ ํ๋ค. ๋ง์ฝ ๋ฆฌ๋ ๋งค๋์ ๋ ธ๋์ ์๋ฒ๊ฐ ๋ค์ด๋๊ฑฐ๋ ์ฅ์ ๊ฐ ์๊ธฐ๋ฉด ๋๋จธ์ง์ ์ผ๋ฐ์ ์ธ ๋งค๋์ ๋ ธ๋๋ค ์ค์์ ๋ฆฌ๋ ๋งค๋์ ๋ ธ๋๋ฅผ ๋ค์ ์ ์ถํ๊ฒ ๋๋๋ฐ, ์ด ๋๋ Raft Consensus ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํด ์ ์ถํ๋ค๊ณ ํ๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์๋ ํด๋น ์ฑ ์์ ๊น๊ฒ ๋ค๋ฃจ์ง๋ ์๋๋ค.
4. ์ค์ ๋ชจ๋์ ์๋ฒ ํด๋ฌ์คํฐ ๊ตฌ์ถ
๊ทธ๋ฌ๋ฉด ์ด์ ๋์ปค ์ค์ ๋ชจ๋์์ ์๋ฒ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ถํ์ฌ ์ฌ๋ฌ ๊ฐ์ ํธ์คํธ์์ ๋์ปค ์์ง์ ํ์ฉํด๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ฐฐ์๋ณด์. ์ฐ์ ๋ฌผ๋ฆฌ ๋จธ์ 3๋๋ฅผ ์๋์ ๊ฐ์ Hostname ๊ณผ IP ์ฃผ์๋ก ์ฌ์ฉํ์๋ค. ๋ฌผ๋ฆฌ ๋จธ์ 3๋๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ VM์ 3๋ ์ค์นํ์ฌ๋ ์ข๊ณ , ํด๋ผ์ฐ๋ ์๋น์ค๋ฅผ ์ด์ฉํ์ฌ๋ ์ข์ ๊ฒ ๊ฐ๋ค.(์ฐธ๊ณ ๋ก IP ์ฃผ์๋ ์๋ณธ๊ณผ ๋ค๋ฅธ ์์์ ์ฃผ์๋ก ๋ณํํ์๋ค) ๋ํ ์ฌ์ฉํ๋ ๋จธ์ 3๋์๋ ๋ชจ๋ ๋ฐ๋์ docker๊ฐ ์ค์น๋์ด ์์ด์ผ ํ๋ค.
HOSTNAME IP Address
swarm-manager 123.456.789.12
swarm-worker1 123.456.789.13
swarm-worker2 123.456.789.14
์ ํ๊ฒฝ์ด ๋ง๋ จ๋์๋ค๊ณ ๊ฐ์ ํ๊ณ , ๊ฐ์ฅ ๋จผ์ ํ ์ผ์ ๋งค๋์ ์ญํ ์ ํ๋ ์๋ฒ ์ฆ, HOSTNAME์ด swarm-manager์ธ ๋จธ์ ์ผ๋ก ๋ค์ด๊ฐ ์ค์ ํด๋ฌ์คํฐ๋ฅผ ์์ฑ(์์) ํด์ค๋ค. ์๋ ๋ช ๋ น์ด ํ์์ ํ์ฉํ๋ฉด ๋๋ค. ์ฐธ๊ณ ๋ก --advertise-addr ์ต์ ์๋ ๋ค๋ฅธ ๋์ปค ์๋ฒ(๋ ๋ค๋ฅธ ๋งค๋์ ๋ ธ๋์ด๊ฑฐ๋ ์์ปค ๋ ธ๋)๊ฐ ํด๋น ๋งค๋์ ๋ ธ๋์ ์ ๊ทผํ ์ ์๋๋ก ๋งค๋์ ๋ ธ๋์ IP ์ฃผ์๋ฅผ ๋ช ์ํด์ค๋ค.
$ docker swarm init --advertise-addr 123.456.789.12
์ ๋ช ๋ น์ด๊ฐ ์ ๋์ํ๋ค๋ฉด ์์ ๊ฐ์ ์ถ๋ ฅํ๋ฉด์ด ๋ํ๋ ๊ฒ์ด๋ค. ์ฃผ๋ชฉํ ๋ถ๋ถ์ 2๊ฐ์ง์ด๋ค. ์ฒซ ๋ฒ์งธ๋ ์ฌ์ง์ ๋งจ ์ค๋ฅธ์ชฝ ๋์ IP ์ฃผ์์ 2377๋ฒ์ด๋ผ๋ ํฌํธ๋ฒํธ๊ฐ ๊ฐ๋ฐฉ๋์์์ ์ฃผ๋ชฉํ์. ์ฆ, ์ฐ๋ฆฌ๋ ์์ปค ๋ ธ๋๋ฅผ ์์ฑํ ๋ ๋งค๋์ ๋ ธ๋์ IP ์ฃผ์์ 2377๋ฒ ํฌํธ๋ฒํธ๋ฅผ ์ด์ฉํ ๊ฒ์ด๋ค. ๋ ๋ฒ์งธ๋ ์์ปค ๋ ธ๋ ์์ฑ ์ ์ฌ์ฉํ ํ ํฐ์ด๋ค. ์ด ํ ํฐ์ ํ์ฉํด์ผ๋ง ์์ปค ๋ ธ๋๋ฅผ ์์ฑํ ์ ์๋ค. ์ด ํ ํฐ์ ํ์ธํ ์ ์๋ ๋ช ๋ น์ด๋ ์๋๋ฐ, ์ด๋ ์๋์ ๊ฐ๋ค.
$ docker swarm join-token worker
๋งค๋์ ๋ ธ๋๋ฅผ ๋ง๋ค์ด๋ณด์์ผ๋, ์ด์ ์์ปค ๋ ธ๋๋ฅผ ์์ฑํด๋ณด์. HOSTNAME์ด swarm-worker1์ธ ๋จธ์ ์ผ๋ก ๋ค์ด๊ฐ ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํด๋ณด์.
$ docker swarm join \
--token [YOUR TOKEN] \
123.456.789:2377
์ ๋ช ๋ น์ด๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋์ํ๋ค๋ฉด ํฐ๋ฏธ๋์ ํ์ค์ถ๋ ฅ์ "This node joined a swarm as a worker." ์ด๋ผ๋ ๋ฌธ์ฅ์ด ๋ณด์ผ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๋ค swarm-manager ๋จธ์ ์ผ๋ก ๋์๊ฐ ํด๋ฌ์คํฐ์ ์ถ๊ฐ๋ ๋ ธ๋๊ฐ ๋ฌด์์ด ์๋์ง ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด๋ณด์.
$ docker node ls
์ ํ๋ฉด์ ๋ณด๋ฉด swarm-worker1 ์ด๋ผ๋ ์์ปค ๋ ธ๋๊ฐ ํ๋ ์๊ฒผ์์ ๋ณผ ์ ์๋ค. ๋ฐฉ๊ธํ๋ ๊ฒ์ฒ๋ผ swarm-worker2 ๋ผ๋ ์์ปค ๋ ธ๋๋ ๊ฐ์ด ์ถ๊ฐํด๋ณด๋๋ก ํ์.
๋ค์์ ๋งค๋์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์. ๋งค๋์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด์๋ ์์ปค ๋ ธ๋๋ฅผ ์ถ๊ฐํ ๋ ํ์ฉํ๋ ํ ํฐ์ ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. ์ฆ, ๋งค๋์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ ๋ ํ์ฉํ๊ธฐ ์ํ ๋ณ๋์ ํ ํฐ์ด ํ์ํ๋ค. ์ด ํ ํฐ์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์๋ ๋ช ๋ น์ด๋ฅผ ํ์ฉํ๋ฉด ๋๋ค.
$ docker swarm join-token manager
์ ๋ช ๋ น์ด๋ก ์ถ๋ ฅ๋๋ ํ ํฐ์ ์ธ๋ถ์ ๋ ธ์ถ๋์ง ์๋๋ก ์ฃผ์ํด์ผ ํ๋ค. ์๋ํ๋ฉด ์ด ํ ํฐ์ ์๊ฒ ๋๋ฉด ์๋ฌด๋ ๋งค๋์ ๋ ธ๋๋ฅผ ์์ฑํ์ฌ ํด๋ฌ์คํฐ์ ์์ปค ๋ ธ๋๋ฅผ ์์๋ก ์ถ๊ฐํ ์ ์๊ฒ ๋๊ณ ๊ทธ ์์ปค ๋ ธ๋ ์์ ์ ์ฑ์ฝ๋๋ฅผ ์ฌ์ ์ปจํ ์ด๋๋ฅผ ์ค์นํ๋ ๋ฑ ์ฌ๋ฌ๊ฐ์ง ๋ณด์ ์ด์๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ค์ ์ด์ํ๊ฒฝ์์๋ ๋ณด์์ ์ํด ๋งค๋์ ๋ ธ๋๋ฅผ ์์ฑํ๊ธฐ ์ํ ํ ํฐ์ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฐฑ์ ํด์ค๋ค๊ณ ํ๋ค. ํ ํฐ์ ๊ฐฑ์ ํด์ฃผ๋ ๋ฐฉ๋ฒ์ --rotate ์ต์ ์ ํ์ฉํ ์๋ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค.
$ docker swarm join-token --rotate manager
๋ค์์ ์์ฑ๋ ์์ปค ๋ ธ๋๋ฅผ ์ญ์ ํด๋ณด๋๋ก ํ์. ์ญ์ ํ๊ณ ์ถ์ ์์ปค ๋ ธ๋๊ฐ ์๋ ๋จธ์ ์ผ๋ก ๋ค์ด๊ฐ ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.
$ docker swarm leave
leave ๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํด์ ํด๋น ์์ปค ๋ ธ๋๋ ์ค์ ๋ชจ๋๋ฅผ ํด์ ํ๊ฒ ๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด ๋งค๋์ ๋ ธ๋๋ ์ด ์์ปค ๋ ธ๋๋ฅผ Down์ด๋ผ๋ ์ํ๋ก ์ธ์งํ๊ฒ ๋๋ค. ์ค์ ๋ก ํด๋น ์์ปค ๋ ธ๋๊ฐ ์ค์ ๋ชจ๋๋ฅผ ํด์ ํ๊ธฐ ์ /ํ์ ๋งค๋์ ๋ ธ๋ ํ๋ฉด์ ๋ณด๋ฉด ์๋์ ๊ฐ์ด ๋ณํ ๊ฒ์ ๋ณผ ์ ์๋ค.
ํ์ง๋ง ์์ฒ๋ผ Down ์ด๋ผ๋ ์ํ๊ฐ ์์ปค ๋ ธ๋๋ฅผ ์ญ์ ํ ๊ฒ์ ์๋๋ค. ์ ์ํ๋ก ๋ณ๊ฒฝ๋ ์ดํ, ๋ฐ๋์ ๋งค๋์ ๋ ธ๋์์ ํด๋น ์์ปค ๋ ธ๋๋ฅผ ์ญ์ ํด์ฃผ์ด์ผ ํ๋ค. ์ญ์ ๋ช ๋ น์ด๋ ์๋์ ๊ฐ๋ค.
$ docker node rm swarm-worker1
์ฆ, ์์ปค ๋ ธ๋๋ฅผ ์ค์ง์ ์ผ๋ก ์ญ์ ํ๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ญ์ ํ ์์ปค ๋ ธ๋ ๋จธ์ ์ผ๋ก ๋ค์ด๊ฐ ์ค์ ๋ชจ๋ ํด์
- ๋งค๋์ ๋ ธ๋ ๋จธ์ ์ผ๋ก ๋ค์ ๋์๊ฐ ์ญ์ ๋ช ๋ น์ด๋ฅผ ํตํด ํด๋น ์์ปค ๋ ธ๋๋ฅผ ์ญ์
๋งค๋์ ๋ ธ๋๋ฅผ ์ญ์ ํ๊ธฐ ์ํด์๋ ๋งค๋์ ๋ ธ๋ ๋จธ์ ์์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
$ docker swarm leave --force
๋งค๋์ ๋ ธ๋๋ฅผ ์ญ์ ํ ๊ฒฝ์ฐ์๋ ํญ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํ๋ค. ๋งค๋์ ๋ ธ๋๋ฅผ ์ค์ ํด๋ฌ์คํฐ์์ ์ญ์ ํ๊ฒ ๋๋ฉด ํด๋น ๋งค๋์ ๋ ธ๋์ ์ ์ฅ๋์ด ์๋ ํด๋ฌ์คํฐ ์ ๋ณด๋ ๋ชจ๋ ์ญ์ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ค์ ํด๋ฌ์คํฐ์ ๋งค๋์ ๋ ธ๋๊ฐ 1๊ฐ๊ฐ ์๋ ์ํ์ธ๋ฐ, ์ด ๋งค๋์ ๋ ธ๋๋ฅผ ์ญ์ ๊ฐ ๊ฐ๋ฅํ ๊น? ์๋ ๊ฒ ๊ฐ์ง๋ง.. ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ญ์ ๊ฐ ๋๋ ์๊ฐ ์ค์ ํด๋ฌ์คํฐ์ ๋งค๋์ ๋ ธ๋๊ฐ 0๊ฐ๊ฐ ๋๋ฏ๋ก ํด๋น ์ค์ ํด๋ฌ์คํฐ๋ ๋์ด์ ์ฌ์ฉํ์ง ๋ชปํ๋ ์ํ๊ฐ ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ์์ปค ๋ ธ๋๋ฅผ ๋งค๋์ ๋ ธ๋๋ก ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ, ๋ฐ๋๋ก ๋งค๋์ ๋ ธ๋๋ฅผ ์์ปค ๋ ธ๋๋ก ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์. ๋จผ์ ์์ปค ๋ ธ๋๋ฅผ ๋งค๋์ ๋ ธ๋๋ก ๋ณ๊ฒฝํ๋ ๋ช ๋ น์ด๋ ์๋์ ๊ฐ๋ค.
$ docker node promote swarm-worker1
๊ทธ๋ฆฌ๊ณ ๋ฐ๋๋ก ๋งค๋์ ๋ ธ๋๋ฅผ ์์ปค ๋ ธ๋๋ก ๋ณ๊ฒฝํ๋ ๋ช ๋ น์ด๋ ์๋์ ๊ฐ๋ค.
$ docker node demote swarm-worker1
๋งค๋์ ๋ ธ๋๊ฐ 1๊ฐ์ผ ๋, ๊ทธ ๋งค๋์ ๋ ธ๋์ ๋ํด์ demote ๋ช ๋ น์ด๋ฅผ ์ ์ฉํด ์์ปค ๋ ธ๋๋ก ๋ณ๊ฒฝํ ์๋ ์๋ค. ๋ํ ๋งค๋์ ๋ ธ๋๊ฐ ์ฌ๋ฌ๊ฐ์ผ ๋, ๋ฆฌ๋ ๋งค๋์ ๋ ธ๋์ demote ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ค๋ฅธ ๋งค๋์ ๋ ธ๋ ์ค ์๋ก์ด ๋ฆฌ๋๋ฅผ ์ ์ถํ๊ฒ ๋๋ค.
5. ์ค์ ๋ชจ๋ ์๋น์ค
์ค์ ๋ชจ๋๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์ด์ ๊น์ง์์์ ๋์ปค ๋ช ๋ น์ด์ ์ ์ด ๋จ์๋ ์ปจํ ์ด๋์๋ค. ์ฆ, ๋์ปค ํด๋ผ์ด์ธํธ๋ฅผ ํ์ฉํด์, ์๋ฅผ ๋ค์ด, docker run, docker rm ๋ฑ๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ค์ ์ ์ด ๋จ์๋ ์ปจํ ์ด๋์๋ค. ํ์ง๋ง ๋์ปค ์ค์์์์ ์ ์ด ๋จ์๋ ์๋น์ค(Service)์ด๋ค. ์๋น์ค๋ฅผ ์์ฑํด๋ณด๊ธฐ ์ ์ ์ด์ ๊ด๋ จ๋ ๊ฐ๋ ์ธ ์๋น์ค, ํ์คํฌ, ๋ ํ๋ฆฌ์นด์ ๊ฐ์ ์ฉ์ด์ ๊ฐ๋ ์ด ๋ฌด์์ธ์ง ์์งํ๊ณ ๋์ด๊ฐ๋ณด๋๋ก ํ์. ์๋ ๊ทธ๋ฆผ์ ๋ณด์.
๋จผ์ ์๋น์ค(Service)๋ ๊ฐ์ ์ด๋ฏธ์ง๋ก๋ถํฐ ์์ฑ๋ 1๊ฐ ์ด์์ ์ปจํ ์ด๋ ์งํฉ์ ์๋ฏธํ๋ค. ๊ทธ๋์ ์๋น์ค๋ฅผ ์ ์ดํ๋ฉด ๊ฐ์ ์๋น์ค ๋ด์ ๋ชจ๋ ์ปจํ ์ด๋๋ค์ ๊ฐ์ ๋ช ๋ น์ด ์ํ๋๋ค. ์ดํ ์ค์ ์ค์ผ์ฅด๋ฌ๊ฐ ์๋น์ค ๋ด์ ์ปจํ ์ด๋๋ค์ ์์์ ์์ปค ๋ ธ๋ ๋๋ ๋งค๋์ ๋ ธ๋์ ๋ถ์ฐํ์ฌ ํ ๋นํด์ค๋ค. ์ด ๋ ํ ์คํฌ์ ๋ ํ๋ฆฌ์นด์ ๊ฐ๋ ์ด ๋ฑ์ฅํ๋ค. ๋จผ์ ๊ฐ ๋ ธ๋์ ํ ๋น๋์ด ์๋ ์ปจํ ์ด๋๋ค ๋ชจ๋๋ฅผ ๊ฐ๋ฆฌ์ผ ํ์คํฌ(Task)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ํ์คํฌ๋ฅผ ๊ตฌ์ฑํ๋ ์ปจํ ์ด๋ ํ๋๋ฅผ ๋ ํ๋ฆฌ์นด(Replica) ํ๋๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ทธ๋์ ์์ ์๋น์ค์์๋ ์๋น์ค ๋ ํ๋ฆฌ์นด์ ์ด ์ด 4๊ฐ๋ผ๊ณ ํ ์ ์๋ค.
์ค์์ ์์ ๊ฐ์ด ์๋น์ค ๋ด์ ์ปจํ ์ด๋๋ค์ ๋ํ ์ํ๋ฅผ ๊ณ์ ํ์ธํ๋ฉด์ ๋ชจ๋ํฐ๋ง ํ๊ณ ์๋ค๊ฐ ์๋น์ค ๋ด์ ์ ์๋ ๋ ํ๋ฆฌ์นด์ ์ ์๋งํผ ์ปจํ ์ด๋ ๊ฐ์๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด ์๋ก์ด ์ปจํ ์ด๋ ๋ ํ๋ฆฌ์นด๋ฅผ ์์ฑํ๋ค. ๋ํ ํน์ ๋ ธ๋์ ์๋ฒ๊ฐ ๋ค์ด๋๊ฑฐ๋ ํน์ ๋ ธ๋ ๋ด์ ์ปจํ ์ด๋๊ฐ ๋์์ ํ์ง ์๊ณ ๋ฉ์ถฐ์๋ค๋ฉด ๊ทธ ๋๋ ๋ ํ๋ฆฌ์นด์ ์ ์์ ์ปจํ ์ด๋ ์๊ฐ ๋ถ์ผ์นํ๋ค๊ณ ๊ฐ์ฃผํ์ฌ ๋งค๋์ ๋ ธ๋๋ ์๋ก์ด ์ปจํ ์ด๋ ๋ ํ๋ฆฌ์นด๋ฅผ ์์ฑํ๊ฒ ๋๋ค.
์๋น์ค๋ ๋กค๋ง ์ ๋ฐ์ดํธ(Rolling Update) ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค. ๋กค๋ง ์ ๋ฐ์ดํธ๋, ์ฌ๋ฌ ๊ฐ์ ์๋ฒ, ์ปจํ ์ด๋ ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋ ํด๋ฌ์คํฐ์ ์ค์ ์ด๋ ๋ฐ์ดํฐ ๋ฑ์ ๋ณ๊ฒฝํ๊ธฐ ์ํด์ ์๋ฒ ๋๋ ์ปจํ ์ด๋๋ฅผ 1๊ฐ์ฉ ์ฌ์์ํ๋ ๊ธฐ๋ฅ์ ์๋ฏธํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ ๊ณตํ๋ ์๋น์ค์ ๋ค์ด ์๊ฐ์ด ์๊ธฐ์ง ์๊ณ ์ง์์ ์ธ ์๋น์ค๊ฐ ๊ฐ๋ฅํ๋ค. ๋ฌผ๋ก ์ฌ์์ํ๋ ์๋ฒ, ํด๋ฌ์คํฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ํธ๋ํฝ์ด ๋๋จธ์ง ์๋ฒ, ํด๋ฌ์คํฐ์ ๋ชฐ๋ฆฌ๊ธด ํ๊ฒ ์ง๋ง, ํ ๋ฒ์ ์ฌ์์ํ๋ ๋ฐฉ๋ฒ๋ณด๋ค๋ ํจ์ฌ ๋ ํฉ๋ฆฌ์ ์ผ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ ์๋น์ค์ ๋ํ ๊ฐ๋ ์ ๋ํด์๋ ์์๋ณด์์ผ๋, ์๋น์ค๋ฅผ ์์ฑํด๋ณด๋๋ก ํ์.
5-1. ์๋น์ค ์์ฑ
์ฐ์ , ์๋น์ค๋ฅผ ์ ์ดํ๋ ๋์ปค ๋ช ๋ น์ด๋ ๋ฐ๋์ ๋งค๋์ ๋ ธ๋์์๋ง ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ ์์ผ๋ก์ ์ค์ต ๋ช ๋ น์ด๋ ๋งค๋์ ๋ ธ๋ ํธ์คํธ ๋จธ์ ์์ ์ ๋ ฅ๋์์์ ์์๋์. ์ฐ์ docker service create ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ์๋น์ค๋ฅผ ์์ฑํด๋ณด์. ๋ช ๋ น์ด ํ์์ ์๋์ ๊ฐ๋ค.
$ docker service create [OPTIONS] IMAGE [COMMAND]
์์ฑํ ์๋น์ค์ ์ปจํ ์ด๋๋ ์ปจํ ์ด๋ ๋ด๋ถ์์ ๋ฐ๋์ ํ๋์ ํ๋ก์ธ์ค๋ฅผ ํฌ๊ทธ๋ผ์ด๋ ์ก์ผ๋ก ๊ณ์ ์ํ๋๊ณ ์๋ ์ํ์ฌ์ผ ํ๋ค. ๋ค์ ๋งํด, ๋งค๋์ ๋ ธ๋์ ์ฅ์์๋ ์๋น์ค์ ์ปจํ ์ด๋๋ฅผ ๋ฐ๋์ detached ๋ชจ๋๋ก ์คํํ ์ ์์ด์ผ ํ๋ค. ์ ๋ช ๋ น์ด ํ์์ COMMAND ๋ถ๋ถ์๋ ์ธ์๋ก ์ค IMAGE๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ปจํ ์ด๋ ์์ฑ ํ ์ฆ์ ์คํํ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ค๋ค. ๊ทธ๋์ ์๋ ์์ ๋ช ๋ น์ด์์๋ ๋ฌดํ๋ฃจํ๋ก "Hello zedd"๋ฅผ ์ถ๋ ฅํ๋ ์ ธ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋๋ก ํ๋ค.
$ docker service create \
ubuntu:14.04 \
/bin/sh -c "while true; do echo Hello zedd; sleep 1; done"
์๋น์ค๊ฐ ์ ์์ฑ์ด ๋์๋ค๋ฉด ์๋ ์ถ๋ ฅํ๋ฉด ์ฒ๋ผ ๋ณด์ผ ๊ฒ์ด๋ค. ํ์๋ ์์ฑํ ์๋น์ค ์ ๋ณด๋ฅผ ์ถ๋ ฅํด๋ณด๊ธฐ๋ ํ์๋ค. ์๋ ํ๋ฉด์์์ REPLICAS๋ ๋ฐฉ๊ธ ์ ๋ช ๋ น์ด๋ก ์์ฑํ ๋ ํ๋ฆฌ์นด ์ฆ, ์ปจํ ์ด๋์ ์ซ์๋ฅผ ์๋ฏธํ๋ค.
์๋น์ค์ ๊ด๋ จ๋ ๋ช ๋ น์ด๋ ์๋์ ๊ฐ๋ค. ๋ณดํต ์ปจํ ์ด๋๋ฅผ ์ ์ดํ ๋ ์ฌ์ฉํ ๋ช ๋ น์ด์ ๋น์ทํ๋ค.
๋ช ๋ น์ด | ์๋ฏธ | ํน์ง |
docker service ls | ์์ฑํ ์๋น์ค์ ์ ๋ณด๋ค์ ์ถ๋ ฅ | |
docker service ps [SERVICE] | ๋ช ์ํ ์๋น์ค์ ์์ธ ์ ๋ณด๋ฅผ ์ถ๋ ฅ | |
docker service rm [SERVICE] | ๋ช ์ํ ์๋น์ค๋ฅผ ์ญ์ | ์ปจํ ์ด๋ ๋์๋ ๋ฌ๋ฆฌ ์๋น์ค๋ ํด๋น ์๋น์ค์ ์ํ(๋์ ์ค์ด๋ ๋ง๋..)์ ์๊ด์์ด ๋ฐ๋ก ์ญ์ ๊ฐ๋ฅ |
docker service scale [SERVICE]=[์ซ์] | ๋ช ์ํ ์๋น์ค์ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋๋ฅผ [์ซ์]๋งํผ ๋๋ฆฌ๊ฑฐ๋ ์ค์ | |
docker service create --with-registry-with-auth ์ต์ ์ฌ์ฉ | ์๋น์ค ์์ฑ์ ์ํ ๊ธฐ๋ฐ ์ด๋ฏธ์ง๋ฅผ ๊นํ๊ณผ ๊ฐ์ Private ์ ์ฅ์ ๋๋ ์ฌ์ค ๋ ์ง์คํธ๋ฆฌ์์ ๋ฐ์์ฌ ๊ฒฝ์ฐ, ๋ก๊ทธ์ธ ์ธ์ฆํ๋ ์ต์ | ๋งค๋์ ๋ ธ๋์์ ํด๋น ์ต์ ์ ์ฌ์ฉํด ์๋น์ค ์์ฑํ๋ฉด ์์ปค ๋ ธ๋์์๋ ๊ทธ ์ด๋ฏธ์ง๊ฐ ์๋ ์ ์ฅ์ ๋๋ ๋ ์ง์คํธ๋ฆฌ์ ๋ณ๋๋ก ๋ก๊ทธ์ธ ํ๋ ์ ์ฐจ๋ฅผ ๊ฑฐ์น์ง ์์๋ ๋จ |
์์์๋ ๊ฐ๋จํ ์ ธ ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฉํด์ ์๋น์ค๋ฅผ ์์ฑํด๋ณด์๋ค. ์ด๋ฒ์ Nginx ๋ผ๋ ์น ์๋ฒ ์๋น์ค๋ฅผ ์๋น์ค๋ก ์์ฑํด๋ณด๋ ์ค์ต์ ํด๋ณด์. ์ฐ์ ๋ช ๋ น์ด๋ถํฐ ์ดํด๋ณด์.
$ docker service create \
--name zeddweb
--replicas 2 \
-p 80:80 \
nginx
์ด๋ฒ ์ค์ต์์ ์์ฑํ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋ ๊ฐ์๋ 2๊ฐ๋ก ์ค์ ํ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ช ๋ น์ด๋ก ์์ฑ๋ ์ปจํ ์ด๋๋ค๋ก ์ธ๋ถ์์ ์ ๊ทผ๊ฐ๋ฅํ๋๋ก ํ๊ธฐ ์ํด -p ์ต์ ์ ์ฃผ์ด ํฌํธํฌ์๋ฉ์ ์ํํด์ฃผ์๋ค. ๊ทธ๋ฆฌ๊ณ ์์ฑํ ์๋น์ค์ ๋ํ ์์ธ ์ ๋ณด ์ถ๋ ฅ์ ๋ณด์.
zeddweb ์ด๋ผ๋ ์๋น์ค๋ ์ด 2๊ฐ์ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ , ๊ทธ ์ปจํ ์ด๋๋ค์ ์ด๋ฆ์ ๊ฐ๊ฐ zeddweb.1 ๊ณผ zeddweb.2 ์ด๋ค. ๊ทธ๋ฆฌ๊ณ NODE ํญ๋ชฉ์ ์ดํด๋ณด๋ฉด, ์ด ์ปจํ ์ด๋๋ค์ ๊ฐ๊ฐ swarm-worker1, swarm-worker2 ๋ผ๋ ๋ ธ๋์ ํ ๋น๋์์์ ์ ์ ์๋ค. ์ค์ ๋ก ์์ปค ๋ ธ๋ ๋จธ์ ์ผ๋ก ๋ค์ด๊ฐ ์ปจํ ์ด๋ ๋จ์๋ฅผ ์ ์ดํ๋ ๋ช ๋ น์ด์ธ docker ps ๋ช ๋ น์ด๋ฅผ ๊ฐ๊ฐ ์ณ๋ณด๋ฉด ์ค์์์ ํ ๋นํ ์ปจํ ์ด๋๊ฐ ์คํ์ค์ธ(Up) ์ํ์์ ์ ์ ์๋ค.
๋ฐฉ๊ธ ์์์ 2๊ฐ์ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋๊ฐ ๊ฐ ์์ปค๋ ธ๋์ ํ ๋น๋์์์ ์์๋ค. swarm-manager์ธ ๋งค๋์ ๋ ธ๋์๋ ํด๋น ์ปจํ ์ด๋๊ฐ ํ ๋น๋์ง ์์๋ค. ๊ทธ๋ ๋ค๋ฉด ๋งค๋์ ๋ ธ๋์์๋ ์์ฑํ ๋ ํ๋ฆฌ์นด ์ผํ ์ด๋ ์ฆ, Nginx ์น ์๋ฒ๋ก ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ ๊น? ์๋๋ค. -p ์ต์ ์ ํตํ ํฌํธ๋ฒํธ ๊ฐ๋ฐฉ์ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋๊ฐ ํ ๋น๋ ๋ ธ๋์ธ์ง ์๋์ง์ ์๊ด์์ด ์ค์ ํด๋ฌ์คํฐ ๋ด์ ์๋ ๋ชจ๋ ๋ ธ๋๋ ํด๋น ํฌํธ๋ฒํธ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ๋ค์ ๋งํด, ์ ๋ช ๋ น์ด์์ ์ฌ์ฉํ -p 80:80 ์ด๋ผ๋ ์ต์ ์์์ ์์ 80 ์ซ์๋ ์ค์ ํด๋ฌ์คํฐ ์๋ฒ ์์ฒด ํฌํธ๋ฅผ ๊ฐ๋ฐฉํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
$ docker service create \
--replicas 2 \
-p [์ค์ ํด๋ฌ์คํฐ ์์ฒด PORT]:[์์ฑํ ์ปจํ
์ด๋ PORT] \
[IMAGE]
์ค์ ๋ก, ์๋ ์ฌ์ง์ ์์ปค ๋ ธ๋ 2๊ฐ, ๋งค๋์ ๋ ธ๋ 1๊ฐ์์ ๋ชจ๋ Nginx ์น ์๋ฒ๋ก curl ํ ์คํธ๋ฅผ ์ํํ๊ณ , ์ ์์ ์ธ HTTP status code์ธ 200์ด ๋ฐํ๋ ๊ฒ์ ์ ์๊ฐ ์๋ค.
๋ค์์ผ๋ก, ์์์ ์ค์ ํ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋ ์๋ฅผ ๋๋ฆฌ๊ฑฐ๋ ์ฆ๊ฐ์์ผ๋ณด์. ์ฌ์ฉํ๋ ๋ช ๋ น์ด๋ docker service scale ๋ช ๋ น์ด์ด๋ค.
$ docker service scale zeddweb=4
๋ ํ๋ฆฌ์นด์ ์ 4๊ฐ๋ก scale ํ๋๋ 2๊ฐ์ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋๊ฐ ์ถ๊ฐ๋ก ์์ฑ๋์๋ค. ์ ํ๋ฉด์ ๋ณด๋ฉด ์ถ๊ฐ๋ ์ปจํ ์ด๋๋ค 2๊ฐ ์ค ํ๋๋ swarm-manager๋ผ๋ ๋งค๋์ ๋ ธ๋์, ๋๋จธ์ง ํ๋๋ swarm-worker1 ๋ ธ๋์ ํ ๋น๋์๋ค. ๊ทธ๋ฐ๋ฐ ํ ๊ฐ์ง ์๊ฐํด๋ณผ ๋ฌธ์ ๊ฐ ์๋ค. ์ ํ๋ฉด ๊ธฐ์ค์ผ๋ก ํ๋ค๋ฉด Nginx ์น ์๋ฒ ์ปจํ ์ด๋๊ฐ swarm-worker1 ์๋ 2๊ฐ๊ฐ ์๋ฆฌ์ก๊ณ ์๊ณ , ์ด 2๊ฐ์ ์ปจํ ์๋ ๋ชจ๋ 80/tcp ํฌํธ ๋ฒํธ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค. swarm-worker1 ๋ ธ๋ ์๋ฒ์ 80/tcp ํฌํธ ๋ฒํธ๋ฅผ 2๊ฐ์ ์ปจํ ์ด๋๊ฐ ๊ฐ์ด ์ฌ์ฉํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ ํ ๋ฐ.. ์ด๋ป๊ฒ ๊ฐ๋ฅํ ๊ฑธ๊น?
์ ์ํฉ์ ์์๋ก ๋ค์ด๋ณด์. ํ์ฌ swarm-worker1 ์ด๋ผ๋ ์์ปค ๋ ธ๋์ ๋์ผํ ํฌํธ ๋ฒํธ๋ฅผ ๊ฐ๋ฐฉํ Nginx ์ปจํ ์ด๋ 2๊ฐ๊ฐ ์๊ณ swarm-worker2 ๋ ธ๋์ 1๊ฐ, swarm-manager ๋ ธ๋์ 1๊ฐ์ Nginx ์ปจํ ์ด๋๊ฐ ์๋ค. ์ด์์ ํ๋ ์ค ์ค์ ํด๋ฌ์คํฐ์ 80๋ฒ ํฌํธ๋ก ํธ๋ํฝ 1๊ฐ ์์ฒญ์ด ๋ค์ด์๋ค. ์ด ๋, ๋ค์ด์จ ์์ฒญ 1๊ฐ๋ฅผ 4๊ฐ์ ์ปจํ ์ด๋ ์ค 1๊ฐ๋ก ๋ฆฌ๋ค์ด๋ ํธํ๊ฒ ๋๋ค.
๊ฒฐ๊ตญ ๋์ผํ ํฌํธ ๋ฒํธ๋ฅผ ์ ์ ํ๊ณ ์๋ค๊ณ ํ๋๋ผ๋ ํธ๋ํฝ ์์ฒญ 1๊ฐ์๋ ๋ฐ๋์ 1๊ฐ์ ์ปจํ ์ด๋๋ก๋ง ์์ฒญ์ด ๋ค์ด๊ฐ๊ฒ ๋๋ค. ๋ฌผ๋ก ์ด ๊ณผ์ ์์ ๋ค์ด์จ ํธ๋ํฝ ์์ฒญ์ ์ด๋ค ์ปจํ ์ด๋๋ฅผ ์ ํํ ๊ฒ์ด๋์ ๋ํด์, ๋์ปค ์ค์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ผ์ด๋ ๋ก๋น ์๊ณ ๋ฆฌ์ฆ์ ํํ๊ณ ์๋ค. ํ์ง๋ง ํธ๋ํฝ์ด๋ ๋ฆฌ์์ค ์ฌ์ฉ๋ ๋ฑ์ ๊ณ ๋ คํด์ผ ํ๋ค๋ฉด ์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ฐํ ์ปจํ ์ด๋ ์ ํ์ ๋นํฉ๋ฆฌ์ ์ผ ์๋ ์์์ ์์๋์.
๋ค์์ global(๊ธ๋ก๋ฒ) ์๋น์ค๋ฅผ ์์ฑํด๋ณด๋๋ก ํ์. ์์์ ์๊ฐํ ๋์ปค ์ค์ ๊ฐ๋ ์ค ์๋น์ค์ ์ข ๋ฅ๋ก๋ 2๊ฐ์ง๊ฐ ์กด์ฌํ๋ค. ํ๋๋ ์ฐ๋ฆฌ๊ฐ ์ง๊ธ๊น์ง Nginx ์ค์ต์ ํ๋ฉด์ ์์๋ณธ ๋ณต์ ๋ชจ๋(Replicated) ์๋น์ค์ด๋ค. ๋๋จธ์ง ํ๋๋ ๋ณดํต ์ค์ ํด๋ฌ์คํฐ ๋ชจ๋ํฐ๋ง์ ํ๊ธฐ ์ํ ์ฉ๋๋ก ์ฌ์ฉํ๋ global ์๋น์ค๊ฐ ์กด์ฌํ๋ค. global ์๋น์ค๋ ๋ณต์ ๋ชจ๋์๋ ๋ฌ๋ฆฌ ํน์ดํ๊ฒ ์ฌ์ ์ ์์ฑํ ๋ ํ๋ฆฌ์นด ์ ๊ฐ์๋ฅผ ์ง์ ํ์ง ์๋๋ค. ์๋ํ๋ฉด global ์๋น์ค๋ ์ค์ ํด๋ฌ์คํฐ ๋ด์ ์๋ ๋ชจ๋ ๋ ธ๋์ ๊ฐ๊ฐ ํ๊ฐ์ฉ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ด๋ค. global ์๋น์ค๋ฅผ ์์ฑํ๋ ๋ช ๋ น์ด๋ --mode ๋ผ๋ ์ต์ ์ global ํค์๋๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. ๋ช ๋ น์ด ์์๋ ์๋์ ๊ฐ๋ค.
$ docker service create \
--name global_zedd \
--mode global \
nginx
์ถ๋ ฅํ๋ฉด์ ๋ณด๋ฉด global_zedd ์ด๋ผ๋ ์ด๋ฆ์ global ์๋น์ค ๋ด์ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋๊ฐ ์ด 3๊ฐ ์๊ฒผ๊ณ , ๊ฐ ๋ ธ๋๋ง๋ค 1๊ฐ์ฉ ์๊ธด ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด ๋ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋ ๊ฐ์๊ฐ 3๊ฐ์ธ ์ด์ ๋ ๋ ธ๋๊ฐ ์ด 3๊ฐ์ด๊ธฐ ๋๋ฌธ!
5-2. ์๋น์ค ์ฅ์ ๋ณต๊ตฌ
๋์ปค ์ค์์ ๋ ธ๋ ์๋ฒ๊ฐ ๋ค์ด๋๊ฑฐ๋ ๋ ธ๋ ๋ด์ ์ปจํ ์ด๋๊ฐ ๋์์ ๋ฉ์ถ ์ ์๋์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์์ฑํด์ฃผ์ด ์ฅ์ ๋ณต๊ตฌ๋ฅผ ์ํํด์ค๋ค๊ณ ํ๋ค. ์ด๋ฒ์ ์ด์ ๋ํด์ ํ๋ฒ ์ค์ต์ ํ๋ฉด์ ์ด๋ป๊ฒ ๋์ํ๋ ๊ฒ์ธ์ง ์ดํด๋ณด์. ์ฐ์ ํ์ฌ ์ํฉ์ ์๋์ ๊ฐ๋ค. zeddweb ์ด๋ผ๋ ์๋น์ค๋ฅผ ํ๋ ์ด์ ์ค์ด๊ณ , ์ด ์๋น์ค ๋ด์ ํ ๋น๋ ์ปจํ ์ด๋ ์ ๋ณด๋ ์๋์ ๊ฐ๋ค.
์ ์ํฉ์์ swarm-worker1 ํธ์คํธ๋ก ๋ค์ด๊ฐ ์ปจํ ์ด๋ zeddweb.1 ์ด๋ผ๋ ์ด๋ฆ์ ์ปจํ ์ด๋๋ฅผ ํ๋ ์ญ์ ์์ผ๋ณด์.
์ ํ๋ฉด์ ๋ณด์. ๋นจ๊ฐ์ ๋ค๋ชจ์นธ์ด ๋ฐ๋ก ๋ฐฉ๊ธ swarm-worker1 ๋ ธ๋์ ์๋ ์ปจํ ์ด๋๋ฅผ ์ญ์ ํจ์ผ๋ก์จ ๋ฐ์ํ ๊ฒ์ด๋ค. swarm-manager ๋ผ๋ ๋งค๋์ ๋ ธ๋์์ zeddweb.1 ์ด๋ผ๋ ๋์ผํ ์ด๋ฆ์ ์ปจํ ์ด๋๊ฐ ์์ฑ๋ ๊ฒ์ ๋ณผ ์๊ฐ ์๋ค.(๋ฌผ๋ก ์ปจํ ์ด๋ ์ด๋ฆ ๋์ hash ๊ฐ์ ๋ฌ๋ผ์ ธ์ ์ฌ์์ฑ๋จ) ๋ฐ๋ผ์, ์์ ๊ฐ์ด ์ปจํ ์ด๋์ ์ฅ์ ๊ฐ ๋ฐ์ํ์ ๋ ๋์ปค ์ค์์ ์์์ ๋ค๋ฅธ ๋ ธ๋์์ ๋์ผํ ์ปจํ ์ด๋๋ฅผ ์์ฑํด ๋ณต๊ตฌ์ํค๋ ๋์์ ์ํํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด์ ์ปจํ ์ด๋๊ฐ ์๋ ๋ ธ๋ ์๋ฒ๋ฅผ ๋ค์ด์์ผ๋ณด๋๋ก ํ์. ํ์ฌ ์ค์ ํด๋ฌ์คํฐ ๋ด์ ๋ ธ๋ ์ํ๊ฐ์ ์๋์ ๊ฐ๋ค.
๊ทธ๋ฌ๋ฉด ์ด๋ฒ์ swarm-worker2 ํธ์คํธ๋ก ๋ค์ด๊ฐ ๋์ปค ๋ฐ๋ชฌ ์๋ฒ๋ฅผ ์ข ๋ฃ์์ผ๋ณด๋๋ก ํ์. ๋์ปค ๋ฐ๋ชฌ ์๋ฒ๋ฅผ ์ข ๋ฃ์ํค๋ ๋ช ๋ น์ด๋ ์๋์ ๊ฐ๋ค.
$ service docker stop && systemctl stop docker.socket
๋ค์ ๋ ธ๋ ์ํ๊ฐ์ ๋ด๋ณด์. swarm-worker2 ๋ ธ๋์ STATUS ๊ฐ์ด DOWN์ผ๋ก ๋ณํ ๊ฒ์ ๋ณผ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๋ค ์ด์์ค์ธ ์๋น์ค์ ๋ ธ๋ ๋ด์ ์ปจํ ์ด๋ ์ ๋ณด๋ฅผ ์ถ๋ ฅํด๋ณด์.
swarm-worker2 ๋ ธ๋์ ๋์ปค ๋ฐ๋ชฌ ์๋ฒ๋ฅผ ์ข ๋ฃ์์ผฐ๊ธฐ ๋๋ฌธ์ ์ ํ๋ฉด์์ swarm-worker2 ๋ ธ๋์ ํ ๋น๋์ด ์๋ ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋์๊ณ ์ดํ, swarm-worker1 ๋ ธ๋์์ ์ปจํ ์ด๋๋ฅผ ๋ณต๊ตฌํ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ค๋ง, ๋์ปค ์ค์์ ๋ง์ฝ ์ฅ์ ๊ฐ ๋ ์ปจํ ์ด๋๋ค์ด ๋ณต๊ตฌ๋๋๋ผ๋ ๋ณต๊ตฌํ๊ธฐ ์ ์ ์ปจํ ์ด๋ ๊ตฌ์ฑ ํ๊ฒฝ์ผ๋ก ๋๋๋ ค ๋์ง ์๋๋ค.(์ฌ๊ท ํ ์์ ์ด ์ผ์ด๋์ง ์๋๋ค๋ผ๊ณ ๋ ํจ) ์๋ฅผ ๋ค์ด, swarm-worker1 ๋ ธ๋์ ์๋ ์ปจํ ์ด๋๊ฐ ๋์์ด ๋ฉ์ถ์์ ๋, ๋์ปค ์ค์์ swarm-manager ๋ ธ๋์ ์ปจํ ์ด๋๋ฅผ ์์ฑ์์ผฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์๊ฐ์ด ํ๋ฌ ๋์์ด ๋ฉ์ถ์๋ swarm-worker1 ๋ ธ๋์ ์ปจํ ์ด๋๊ฐ ๋ค์ ์ ์ ์ํ๋ก ๋์์จ๋ค๊ณ ํ์ฌ๋ swarm-manager ๋ ธ๋์ ๋ณต๊ตฌ๋ฅผ ์ํด ์์ฑํ๋ ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ๋ ๋ฑ๊ณผ ๊ฐ์ด ์ฌ๊ท ํ์ ๋ง์ถ๋ ๊ณผ์ ์ ์ํํ์ง๋ ์๋๋ค๋ ๊ฒ์ด๋ค.
๋ง์ฝ ์ฌ๊ท ํ ์์ ์ ํด์ฃผ๋ ค๊ณ ํ๋ค๋ฉด ์ฌ๋์ด ์ง์ ํด์ฃผ์ด์ผ ํ๋๋ฐ, scale ๋ช ๋ น์ด๋ก ์ปจํ ์ด๋ ์๋ฅผ ์ค์ด๊ณ ๋ค์ ๋๋ ค์ฃผ์ด์ผ ํ๋ค.
5-3. ์๋น์ค ๋กค๋ง ์ ๋ฐ์ดํธ
๋ค์์ผ๋ก ์์๋ณผ ๊ธฐ๋ฅ์ ์ค์ ๋ชจ๋์ ์๋น์ค ๋กค๋ง ์ ๋ฐ์ดํธ ๊ธฐ๋ฅ์ด๋ค. ์ค์ ๋ชจ๋๋ ์์ฒด์ ์ผ๋ก ๋กค๋ง ์ ๋ฐ์ดํธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ docker service update ๋ช ๋ น์ด๋ฅผ ํ์ฉํด ๊ธฐ์กด์ ์ด์์ค์ธ ์๋น์ค์ ๋ํด ๋กค๋ง ์ ๋ฐ์ดํธ๊ฐ ๊ฐ๋ฅํ๋ค.
์ค์ต ์์๋ก, ์ฐ์ ์๋ก์ด ์๋น์ค๋ฅผ ํ๋ ์์ฑํด๋ณด์. Nginx 1.10 ๋ฒ์ ์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ง๊ณ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋๋ 3๊ฐ๋ฅผ ์ง์ ํ์ฌ ์๋น์ค๋ฅผ ์๋์ฒ๋ผ ์์ฑํด๋ณด์.
$ docker service create \
--name nginx_service \
--replicas 3 \
nginx:1.10
์ ๋ช ๋ น์ด๋ก ๋ง๋ ์๋ก์ด ์๋น์ค ๋ด์ ๊ฐ ๋ ธ๋์ ํ ๋น๋ ์ปจํ ์ด๋๋ ์์ ๊ฐ๋ค. ์ด์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ์ ๋ฐ์ดํธํด๋ณด์. ์ ๋ฐ์ดํธํ ์ฌํญ์ ๊ฐ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋์ Nginx ์ด๋ฏธ์ง๋ฅผ 1.10 ๋ฒ์ ์์ 1.11 ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ ๊ฒ์ด๋ค.
$ docker service update \
--image nginx1.11 \
nginx_service
๊ทธ๋ฆฌ๊ณ ๋ ๋ค ํด๋น ์๋น์ค ๋ด์ ๊ฐ ๋ ธ๋์ ํ ๋น๋ ์ปจํ ์ด๋ ์ ๋ณด๋ ์๋์ฒ๋ผ ๊ฐฑ์ ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
" \_ " ๋ผ๋ ๋ฌธ์์ด์ด ์กด์ฌํ๋๋ฐ, ์ด ๋ฌธ์์ด์ด ๋ถ์ด์๋ ์ปจํ ์ด๋๋ ๋์์ ๋ฉ์ถ ์ปจํ ์ด๋๋ก์, ์๋น์ค์์์ ์ปจํ ์ด๋ ๋ณ๊ฒฝ ๊ธฐ๋ก์ ์๋ฏธํ๋ค. ๊ทธ๋์ ์ ํ๋ฉด์ ํด์ํ๋ฉด ๊ฐ ์ปจํ ์ด๋ ๋ง๋ค 1๋ฒ์ฉ ๋ณ๊ฒฝ์ด ๋ ํ์ ์ด ๋ณด์ด๊ณ , ๋ณ๊ฒฝ์ฌํญ์ Nginx ์ด๋ฏธ์ง๊ฐ 1.10 ์์ 1.11 ๋ฒ์ ์ผ๋ก ๋ณ๊ฒฝ๋ ๊ฒ์ ์ ์ ์๋ค.
์ถ๊ฐ๋ก, ๋กค๋ง ์ ๋ฐ์ดํธ๋ฅผ ์งํํ ๋ ์ฌ๋ฌ๊ฐ์ง ์ค์ ์ ํด์ค ์ ์๋ค. ์ด ์ค์ ๋ค์ ์๋น์ค๋ฅผ ์์ฑํ ๋ ์ค์ ํด์ฃผ์ด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด, ์ ๋ฐ์ดํธ ์งํ์ ํ๋ค๊ฐ ์คํจํ์ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํ ์ง ๋๋ ํ๋์ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋๋ฅผ ๋ช ์ด ๋จ์๋ก ์ ๋ฐ์ดํธ๋ฅผ ํ ์ง, ์ ๋ฐ์ดํธ ์์ ์ ํ ๋ฒ์ ์ํํ ๋ ๋ช ๊ฐ์ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋๋ฅผ ๊ฐ์ด ์งํํ ์ง ๋ฑ์ ์ค์ ํ ์ ์๋ค. ์ด์ ๋ํ ์ ๋ฆฌ๋ ์๋์ ๊ฐ๋ค. ๋ณด๋ค ์์ธํ ์ต์ ์ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์.
๋ช ๋ น์ด | ์ต์ | ์๋ฏธ |
docker service create | --update-delay 10s | ๊ฐ ์ปจํ ์ด๋ ๋ ํ๋ฆฌ์นด๋ฅผ 10์ด ๋จ์๋ก ์ ๋ฐ์ดํธ |
--update-paralleism 2 | ์ ๋ฐ์ดํธ ์ํ ์ 2๊ฐ์ ์ปจํ ์ด๋ ๋ ํ๋ฆฌ์นด๋ฅผ ํ ๋ฒ์ ์ ๋ฐ์ดํธ ์งํ | |
--update-failuer-action continue | ์
๋ฐ์ดํธ ์ํ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ์ด๋ป๊ฒ ํ ์ง์ ๋ํ ์ก์
. ๋ํดํธ๋ pause๋ก ์ ๋ฐ์ดํธ๋ฅผ ์ค์งํ๋ ์ค์ ์ด์ง๋ง continue๋ก ์ค์ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํด๋ ๊ณ์ ๋ค์ ๋กค๋ง ์ ๋ฐ์ดํธ๋ฅผ ์งํํ๋๋ก ์ค์ |
๋ง์ง๋ง์ผ๋ก, ๋กค๋ง ์ ๋ฐ์ดํธ๋ฅผ ํ๊ธฐ ์ ์ผ๋ก ๋๋๋ฆฌ๋ ๋กค๋ฐฑ(Rollback) ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค. ์๋ ๋ช ๋ น์ด ํ์์ ์ด์ฉํด ์ํ์ด ๊ฐ๋ฅํ๋ค. ์ฐธ๊ณ ๋ก ๋กค๋ฐฑ์ ์ํํ๊ณ ๋ ๋ค์ ์ปจํ ์ด๋๋ ์ต์ด ๋กค๋ง ์ ๋ฐ์ดํธ๋ฅผ ํ๊ธฐ ์ ์ ์ปจํ ์ด๋์ ๋๊ฐ์ ID ๊ฐ์ ๊ฐ๋ ๊ฒ์ผ๋ก ๋ณต๊ตฌํ๋ ๊ฒ์ด ์๋ ๋ณ๋์ ์ปจํ ์ด๋๋ฅผ ์๋กญ๊ฒ ์์ฑํ์ฌ ๋กค๋ฐฑ์ ์ํํ๋ค.
$ docker service rollback [SERVICE]
5-4. ์๋น์ค ์ปจํ ์ด๋์ ์ค์ ์ ๋ณด๋ฅผ ์ ๋ฌ, secret๊ณผ config
์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ๋ถ์ ๋ ธ์ถ์ํค๊ณ ์ด์ํ๋ ค๋ฉด ๊ฐ ์๋ฒ๋ง๋ค ์ ์ ํ ํ๊ฒฝ์ ์ค์ ํด์ฃผ์ด์ผ ํ๋ค. ๋จ์ ์ธ ์๋ก, ์๋ฒ๋ง๋ค ์ด๋ค ํ๊ฒฝ์ธ์ง(๊ฐ๋ฐ ํ๊ฒฝ์ธ์ง, ์ด์ ํ๊ฒฝ์ธ์ง, ...)๋ฅผ ์๋ฏธํ๋ ํ๊ฒฝ๋ณ์ ๊ฐ๋ถํฐ DB ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๊ทธ DB ์๋ฒ์ ๋ฃจํธ ๊ณ์ ๋น๋ฐ๋ฒํธ ๊ฐ์ ๊ฐ๊น์ง ์ฌ๋ฌ ์ค์ ๊ฐ๋ค์ด ์กด์ฌํ๋ค.
์ค์์ ๋ฐฐ์ฐ๊ธฐ ์ด์ ์ ์ปจํ ์ด๋ ๋จ์๋ก ๋์ปค๋ฅผ ์ ์ดํ ๋๋ -v ์ต์ ์ ํ์ฉํ ํธ์คํธ ๋ณผ๋ฅจ ๊ณต์ ๋ฅผ ํตํด ํน์ ์ค์ ํ์ผ์ ์ปจํ ์ด๋์ ๊ณต์ ํ๊ฑฐ๋ -e ์ต์ ์ ์ฌ์ฉํ์ฌ ํน์ ํ๊ฒฝ ๋ณ์ ๊ฐ์ ์ค์ ํ๋ ๋ฑ๊ณผ ๊ฐ์ด ์ํํ์๋ค. ์ด๋ฐ ๋ฐฉ๋ฒ์ ์ปจํ ์ด๋ 1๊ฐ ๋ง๋ค ์ค์ ์ ํด์ฃผ์ด์ผ ํ๋ ๊ฒ์ด๊ณ , ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ค์ ๊ด๋ฆฌํด์ผ ํ๋ ์ค์ ๋ชจ๋์์ ์ด์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ค๋ฉด ๋งค ์ปจํ ์ด๋ ๋ง๋ค ์ค์ ์ ๋งค๋ฒ ํด์ฃผ์ด์ผ ํ๋ ๊ท์ฐฎ์์ด ๋ฐ์ํ๋ค. ๋ํ DB ์๋ฒ์ ๊ณ์ ๋น๋ฐ๋ฒํธ์ ๊ฐ์ ๋ณด์์ ๋ฏผ๊ฐํ ๊ฐ๋ค์ -e ์ต์ ์ ์ ์ด์ฃผ๊ฒ ๋๋ฉด ๋ณด์ ์ด์๋ ๋ฐ์ํ๊ธฐ ๋ง๋ จ์ด๋ค. ์ด๋ฌํ ๋ฌธ์ ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด ๋น๋ฐ๋ฒํธ๋ SSH ํค์ ๊ฐ์ ๋ณด์์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํ secret ๊ธฐ๋ฅ์ด, ๋ณด์ ์ด์๊ฐ ๋ฐ์ํ์ง ์์ ๋งํ ๊ธฐํ ์ค์ ๊ฐ๋ค์ ์ ์กํ๊ธฐ ์ํด์๋ config ๊ธฐ๋ฅ์ด ๋์ปค ์ค์์ ์กด์ฌํ๋ค. ์ด์ ๋ํด ํ๋์ฉ ์์๋ณด๋๋ก ํ์. ์ฐธ๊ณ ๋ก secret, config ๊ธฐ๋ฅ์ ์ค์ ๋ชจ๋์์๋ง ์ ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ ๋จ์ผ ์ปจํ ์ด๋ ๋จ์๋ก ์ ์ดํ ๋(docker run ~ ๊ณผ ๊ฐ์ ๋ช ๋ น์ด ์ฌ์ฉ)๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
๋จผ์ secret ๊ธฐ๋ฅ์ ๋ํด ์์๋ณด์. secret์ ์์ฑํ๋ ๋ช ๋ น์ด๋ ์๋์ ๊ฐ๋ค.
$ docker secret create [secret ์ด๋ฆ] [๊ฐ]
์๋์ฒ๋ผ "1d2w3e4r" ์ด๋ผ๋ ํ ์คํธ๋ฅผ secret์ผ๋ก ์๋์ฒ๋ผ ์์ฑํด๋ณด๊ณ ์์ฑํ secret ์ ๋ณด๋ฅผ ์ถ๋ ฅํด๋ณด์.
๊ทธ๋ฆฌ๊ณ ํด๋น secret์ ์์ธ ์ ๋ณด๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด ์๋์ ๊ฐ์ ๋ด์ฉ์ ํ์ธํ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ ์์ฑํ secret์ ์์ธ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋๋ผ๋ ์์์ ์์ฑํ ๊ฐ์ธ "1d2w3e4r"๋ฅผ ์ด๋์์๋ ํ์ธํ ์๊ฐ ์๋ค. ์๋ํ๋ฉด secret ๊ฐ์ ๋งค๋์ ๋ ธ๋ ๊ฐ์ ์ํธํ๋ ์ํ๋ก ์ ์ฅ์ด ๋๋ฉฐ ์ปจํ ์ด๋์ secret ๊ฐ์ด ์ ์ฉ๋์ด ๋ฐฐํฌ๋์ด๋ ์ปจํ ์ด๋ ๋ด๋ถ์ ํ์ผ ์์คํ ์ด ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ํด๋น ์ปจํ ์ด๋๊ฐ ์ญ์ ๋ ๊ฒฝ์ฐ secret๋ ํจ๊ป ์ญ์ ๋๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ secret์ด ์ ์ฉ๋ ์ปจํ ์ด๋๋ฅผ ์์ฑํด๋ณด๋๋ก ํ์. ์์๋ MySQL ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ค. ์ฐ์ ๋ช ๋ น์ด๋ฅผ ์ดํด๋ณด์.
$ docker service create \
--name mysql \
--replicas 1 \
--secret source=mysql_pw,target=mysql_root_password \
--secret source=mysql_pw,target=mysql_password \
-e MYSQL_ROOT_PASSWORD_FILE="/run/secrets/mysql_root_password" \
-e MYSQL_PASSWORD_FILE="/run/secrets/mysql_password" \
-e MYSQL_DATABASE="wordpress" \
mysql:5.7
์ ๋ช ๋ น์์ ์ฃผ๋ชฉํ ๋ถ๋ถ์ --secret ์ต์ ๊ณผ ๊ทธ ์ต์ ์ ๋ถ์ด ์๋ source, target ์ธ์์ ์๋ ๊ฐ์ด๋ค. ํ์์ ์๋์ ๊ฐ๋ค.
$ docker service create --secret source=[secret ์ด๋ฆ],target=[์ปจํ
์ด๋ ๋ด๋ถ์์ ๋ณด์ฌ์ง secret ์ด๋ฆ]
--secret ์ต์ ์ source์ ์ง์ ํด์ค secret ๊ฐ์, target์๋ ์ง์ ํด์ค ์ด๋ฆ์ผ๋ก ์ปจํ ์ด๋ ๋ด๋ถ์ ๋ง์ดํธ ์์ผ์ค๋ค. ์ด ๋ ๊ธฐ๋ณธ์ ์ผ๋ก๋ ์ปจํ ์ด๋ ๋ด๋ถ์ "/run/secrets/" ๋ผ๋ ์ง์ ๋ ๊ฒฝ๋ก์ secret์ ๋ง์ดํธํ๋ค. ๊ทธ๋์ ์ปจํ ์ด๋ ๋ด๋ถ๋ก ๋ค์ด๊ฐ "/run/secrets/" ๋ผ๋ ๊ฒฝ๋ก๋ก ๋ค์ด๊ฐ๋ณด๋ฉด target์๋ค๊ฐ ์ง์ ํด์ค ์ด๋ฆ์ secret์ด ์๋ ๊ฒ์ ๋ฐ๊ฒฌํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ secret์ ๋ง์ดํธ ํด์ค ์ปจํ ์ด๋ ๋ด๋ถ ๊ฒฝ๋ก๋ ์ ๋๊ฒฝ๋ก๋ก target์๋ค๊ฐ ์ง์ ์ ๋ ฅํด์ฃผ๋ฉด "/run/secrets/" ๊ฒฝ๋ก๊ฐ ์๋ ์ฌ์ฉ์๊ฐ ์ง์ ์ ๋ ฅํ ๊ฒฝ๋ก์๋ค๊ฐ secret์ ์์ฑํด์ค๋ค. ์ฐธ๊ณ ๋ก ์ฝค๋ง(,)์ target ํค์๋ ์ฌ์ด์ ๊ณต๋ฐฑ์ด ์๋ค๋ฉด ์๋ฌ๊ฐ ๋๋ฏ๋ก ๋ฐ๋์ ๋ถ์ฌ ์ฐ๋ ๊ฑธ ์์ง๋ง์.
์ง๊ธ๊น์ง secret์ ์์๋ณด์๋ค. ์ด์ config์ ๋ํด ์์๋ณด์. ์์์ secret ์ ์๋น์ค์ ์ ์ฉํ๋ฉด์ ์ ๋ ฅํ ๋ช ๋ น์ด์ -e ์ต์ ์ ๋ฃ์ด ํน์ ๊ฒฝ๋ก๋ฅผ ์ปจํ ์ด๋ ๋ด๋ถ์ ํ๊ฒฝ๋ณ์๋ก ์ง์ ํด์ฃผ์๋ค. ๊ทธ๋ฐ๋ฐ ์ ์์๋ง ํด๋ -e ์ต์ ์ 3๋ฒ์ฉ ์จ๊ฐ๋ฉฐ ์ผ์ผ์ด ์ค์ ํด์ฃผ์๋ค. ์ค์ ํด์ผ ํ ํ๊ฒฝ๋ณ์ ๊ฐ์ด ์ ์ ๋ง์์ง๋ฉด ํท๊ฐ๋ฆฌ๊ฑฐ๋ ์คํ๊ฐ ๋ฐ์ํ ์ฌ์ง๊ฐ ์๋ค. ์ด๋ฅผ ์ํด config๊ฐ ๋ฑ์ฅํ๋ค. config ์ญํ ์ ํ๋ ๋ฏธ๋ฆฌ ์์ฑํด๋ ํ์ผ์ -e ์ต์ ์ ๋ฃ์ด์ค ๊ฐ๋ค์ ๋ฏธ๋ฆฌ ์ ์ํด๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด config๋ฅผ ์์ฑํ๊ณ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ฐฐ์๋ณด์. secret ์ฌ์ฉ ๋์ ๋งค์ฐ ๋น์ทํ๋ค. ๋ช ๋ น์ด ํ์์ ๋ค์๊ณผ ๊ฐ๋ค.
$ docker config create [config ์ด๋ฆ] [๋ฏธ๋ฆฌ ์ ์ํด๋ config ๊ด๋ จ ํ์ผ]
์์์์ ์์ฑํ config ํ์ผ์ ์๋์ ๊ฐ๋ค.
# config.yml
version: 0.1
log:
level: info
storage:
filesystem:
rootdirectory: /registry_data
delete:
enabled: true
http:
addr: 0.0.0.0:5000
์ ํ์ผ๋ก ํด์ config๋ฅผ ์๋ก ์์ฑ ํ, inspect ๋ช ๋ น์ด๋ก config์ ์์ธ ์ ๋ณด๋ฅผ ์ถ๋ ฅํด๋ณด์. secret ๋์๋ ๋ฌ๋ฆฌ Data ๋ผ๋ ํญ๋ชฉ์ ๊ฐ์ด ์๊ธด ๊ฒ์ ๋ณผ ์ ์๋ค.
Data ํญ๋ชฉ์๋ ์ฐ๋ฆฌ๊ฐ ์์์ ์ ์ํ config.yml ํ์ผ์ ๋ด์ฉ์ด๋ฉฐ ์ ์ถ๋ ฅํ๋ฉด์์๋ ํ์ฌ base64 ์ธ์ฝ๋ฉ๋ ์ํ๋ก ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ์๋ ๊ฒ์ด๋ค. ๋ง์ฝ ๊ถ๊ธํ๋ค๋ฉด ํด๋น ๊ฐ์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ํํด์ ํ์ค์ถ๋ ฅ์ ํ์ธํด๋ณด์.
$ echo dmVyc2lvbjogMC4xCmxvZzoKICBsZXZlbDogaW5mbwpzdG9yYWdlOgogIGZpbGVzeXN0ZW06CiAgICByb290ZGlyZWN0b3J5OiAvcmVnaXN0cnlfZGF0YQogIGRlbGV0ZToKICAgIGVuYWJsZWQ6IHRydWUKaHR0cDoKICBhZGRyOiAwLjAuMC4wOjUwMDAK | base64 -d
์์ฑํ config๋ฅผ ์๋น์ค์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ๋ secret ๊ณผ ๋์ผํ๋ค. source ์ target ์ธ์์ ์ ์ ํ ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
$ docker service create \
--name yml_registry \
-p 5000:5000 \
--config source=registry-config,target=/etc/docker/registry/config.yml \
registry:2.6
๋ง์ฝ ์ด๋ฏธ ์ค์ ํ secret, config ๊ฐ์ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋ฐ๊พธ๊ธฐ ์ํด ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๋ ค๋ฉด --secret-add, --secret-rm, --config-rm, --config-add ์ ๊ฐ์ ์ต์ ์ ์ดํด๋ณด๋๋ก ํ์. ์ฐธ๊ณ ๋ก ์ด๋ฏธ ์ค์ ํ secret, config ๊ฐ์ ์์ ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค. ๋จ์ง ์๋ก์ด secret, config ๊ฐ์ ์ถ๊ฐํ ๋ค ๊ธฐ์กด์ ๊ฐ์ ์ญ์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ต์ฒดํด์ผ ํ๋ค.
์ด๋ ๊ฒ secret, config๋ฅผ ์ ํ์ฉํ๋ฉด ํ๊ฒฝ์ด ๋ณ๊ฒฝ๋จ์ ๋ฐ๋ผ ์ ํ๋ฆฌ์ผ์ด์ ๋น๋๋ฅผ ๋ณ๋๋ก ํ ํ์ ์์ด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด์ ์ค์ธ ์ํ์์ ์ค์ ๊ฐ๋ง ๋ฐ๊พธ์ด ์ฃผ๋ฉด ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋กค๋ง ์ ๋ฐ์ดํธ๋ ํ ํ์๊ฐ ์์ด์ง ๊ฒ์ด๊ณ ์ด์ ๋ฐ๋ผ ์๋น์ค๊ฐ ์ค๋จ๋๋ ์๊ฐ ์์ด๋ ์ด์์ด ๊ฐ๋ฅํด์ง๋ค.
5-5. ๋์ปค ์ค์ ๋คํธ์ํฌ
์ด์ ์ ๋์ปค ์ปจํ ์ด๋ ๋ค๋ฃจ๊ธฐ ํฌ์คํ ์์ ์ปจํ ์ด๋๋ค ๊ฐ์ ํต์ ์ ๊ฐ๋ฅ์ผ ํ๋๋ก ํ๊ธฐ ์ํด ๋์ปค ๋คํธ์ํฌ๋ผ๋ ๊ฒ์ ๋ํด ๋ฐฐ์ ๋ ์ ์ด ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ ๋ธ๋ฆฌ์ง, ํธ์คํธ, ๋ ผ, ์ปจํ ์ด๋ ๋คํธ์ํฌ์ ๋ํด ๋ฐฐ์ ๋ค. ์ด์ฒ๋ผ ์ด๋ฒ์๋ ๋์ปค ์ค์์์ ์ฌ์ฉํ๋ ๋คํธ์ํฌ์ ๋ํด์ ์์๋ณด๋๋ก ํ์.
๊ธฐ๋ณธ์ ์ผ๋ก ๋์ปค ์ค์์ ๋คํธ์ํฌ๋ ์ด์ ์ ๋ฐฐ์ ๋ ๋์ปค ๋คํธ์ํฌ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค. ์๋ํ๋ฉด ๋์ปค ์ค์์ ์ฌ๋ฌ ๊ฐ์ ์๋ฒ ์ฆ, ์ฌ๋ฌ ๊ฐ์ ๋์ปค ์์ง์ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ๋ถ์ฐํ์ฌ ํ ๋นํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ๋์ปค ์์ง์ ๋์ปค ๋ฐ๋ชฌ์ ๋คํธ์ํฌ๊ฐ ํ๋๋ก ๋ฌถ์ธ ๋คํธ์ํฌ ํ(Pool)์ด ํ์ํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ปจํ ์ด๋๋ก ๋ฐฐํฌํ ์๋น์ค๋ฅผ ์ธ๋ถ๋ก ๋ ธ์ถํ์ ๋, ์ค์ ํด๋ฌ์คํฐ ๋ด์ ์ด๋ค ๋ ธ๋๋ก ์ ๊ทผํ๋๋ผ๋ ํด๋น ์ปจํ ์ด๋์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๋ผ์ฐํ ๊ธฐ๋ฅ์ด ํ์ํ๋ค. ์ผ๋ก๋ก, ์ ์์์์ ์ฐ๋ฆฌ๋ ํน์ ์ปจํ ์ด๋๊ฐ ์์ปค ๋ ธ๋์๋ง ํ ๋น๋์๋๋ผ๋ ๋งค๋์ ๋ ธ๋์์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ ๊ฒ์ ์ดํด๋ณธ ๊ฒ์ด ๋ฐ๋ก ๊ทธ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด ๋์ปค ์ค์ ๋ชจ๋๋ฅผ ํ์ฑํํ ์ํ์์ ๋์ปค ๋คํธ์ํฌ๊ฐ ๋ฌด์์ด ์๋์ง ์ดํด๋ณด์.
์์์ ์ฃผ๋ชฉํ ๋คํธ์ํฌ๋ docker_gwbridge ์ ingress ๋ผ๋ ์ด๋ฆ์ ๋คํธ์ํฌ์ด๋ค. docker_gwbridge ๋คํธ์ํฌ๋ ์ค์์์ ์ค๋ฒ๋ ์ด(overlay) ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ ๋ ์ฌ์ฉํ๋ ๋คํธ์ํฌ์ด๋ฉฐ, ingress ๋คํธ์ํฌ๋ ๋ก๋ ๋ฐธ๋ฐ์ฑ๊ณผ ๋ผ์ฐํ ๋ฉ์(Routing Mesh)์ ์ฌ์ฉ๋๋ ๋คํธ์ํฌ์ด๋ค. ์ด์ ๋ํด ํ๋์ฉ ์ดํดํด๋ณด์.
5-5-1. ์ด๋ค ๋ ธ๋์์๋ ์ ๊ทผํ ์ ์๋๋ก ํด์ฃผ์, ingress ๋คํธ์ํฌ
ingress ๋คํธ์ํฌ๋ ์ค์ ํด๋ฌ์คํฐ๊ฐ ์์ฑ์ด ๋๋ฉด ์๋์ผ๋ก ๋ฑ๋ก๋๋ ๋คํธ์ํฌ๋ก์, ์ค์ ๋ชจ๋๋ฅผ ์ฌ์ฉํ ๋๋ง ์ ์ฉ๋๋ ๋คํธ์ํฌ์ด๋ค. ๊ทธ๋์ ์์์ ingress ๋ผ๋ ์ด๋ฆ์ ๋คํธ์ํฌ์ SCOPE ํญ๋ชฉ์ ๋ณด๋ฉด swarm ์ด๋ผ๋ ํค์๋๊ฐ ์ ํ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋จผ์ ingress ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ตฌ์กฐ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ๋์ํํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
์ค์ ํด๋ฌ์คํฐ ์๋ฒ๊ฐ ์์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค๊ณ ํด๋ณด์. ingress ๋คํธ์ํฌ๋ ์ด๋ค ๋ ธ๋์์๋ ์ด๋ค ์ปจํ ์ด๋์ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์ค์ ํด์ฃผ๋ ๋ผ์ฐํ ๋ฉ์๋ฅผ ๊ตฌ์ฑํ๋ค. ์๋ฅผ ๋ค์ด, ์ ๊ทธ๋ฆผ์์ ๋งค๋์ ๋ ธ๋์์๋ ingress ๋คํธ์ํฌ ๋๋ถ์ Container 3,4,5 ์ด๋ฆ์ ์ปจํ ์ด๋๋ค์ ๋ํด ์ธ์ ๋ ์ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ๋ํ ingress ๋คํธ์ํฌ๋ ๋ค์ด์ค๋ ํธ๋ํฝ์ ์ ์ ํ๊ฒ ์ปจํ ์ด๋๋ค์ ๋ํด ๋ถ์ฐํ๋ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ๋ด๋นํ๊ธฐ๋ ํ๋ค.(์ด ๋, '์ ์ ํ๊ฒ'๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ผ์ด๋ ๋ก๋น ๋ฐฉ์์ผ๋ก ํธ๋ํฝ์ ์ฌ๋ฌ ์ปจํ ์ด๋๋ค๋ก ๋ถ์ฐํ๋ ๋ฐฉ๋ฒ์ ์ฑํํ๋ค)
๊ทธ๋ฌ๋ฉด ์ด์ ingress ๋คํธ์ํฌ๋ฅผ ์ค์ต์ ํตํด์ ์์๋ณด์. ์ฑ ์ ์๋ถ์ด ์ด๋ฏธ ๋ง๋ค์ด๋์ ๋์ปค ํ๋ธ์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ ํ ๋ฐ, ํด๋น ์ด๋ฏธ์ง๋ ์ปจํ ์ด๋์ ํธ์คํธ ์ด๋ฆ, ์ฆ ์์๋ก ํ ๋น๋ 16์ง์๋ฅผ ํ ๋นํ๋ PHP ํ์ผ์ด ๋ค์ด์๋ ์น์๋ฒ์ด๋ค. ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด์ ํด๋น ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ปจํ ์ด๋ ๋ ํ๋ฆฌ์นด์ ์ 4๊ฐ๋ก ํ๋ ์๋น์ค๋ฅผ ๋ง๋ค์ด๋ณด์. ์ฐธ๊ณ ๋ก ์ค์ ํด๋ฌ์คํฐ ์๋ฒ ๋ด ๋ ธ๋๋ ๋งค๋์ ๋ ธ๋ 1๊ฐ, ์์ปค ๋ ธ๋ 2๊ฐ์ธ ์ํ์ด๋ค.
$ docker service create \
--name zedd_hostname \
--replicas 4 \
-p 80:80 \
docker.io/alicek106/book:hostname
์ ๋ช ๋ น์ด๋ก ์๋น์ค๋ฅผ ์์ฑํ๋ ๋ฐ ์ฑ๊ณตํ๋ค๋ฉด ํด๋น ์๋น์ค์ ์ค์ ํด๋ฌ์คํฐ ๋ด์ ์์ฑ๋ ์ปจํ ์ด๋๋ค์ด ์ด๋ค ๋ ธ๋์ ํ ๋น๋์๋์ง ์ดํด๋ณด์.
์ ํ๋ฉด์ ๋ณด๋ฉด swarm-manager ๋ผ๋ ์ด๋ฆ์ ๋งค๋์ ๋ ธ๋์ 2๊ฐ์ ์ปจํ ์ด๋๊ฐ, ๊ทธ๋ฆฌ๊ณ ์์ปค ๋ ธ๋์ ๊ฐ๊ฐ 1๊ฐ์ฉ ์ปจํ ์ด๋๊ฐ ํ ๋น๋ ๊ฒ์ ์ ์ ์๋ค. ์ด์ ๊ทธ๋ฌ๋ฉด ingress ๋คํธ์ํฌ์ ํจ๊ณผ๋ฅผ ์์๋ณด๊ธฐ ์ํด์ ์ผ๋ถ๋ฌ ๋ค๋ฅธ ๋ ธ๋์ ์๋ ์ปจํ ์ด๋๋ก ์ ๊ทผ์ ํด๋ณด์. ํ์ฌ ์ํฉ์์ swarm-worker1 ์ด๋ผ๋ ๋ ธ๋์์ swarm-manager ๋ ธ๋ ๋ด์ ์ปจํ ์ด๋ 2๊ฐ๋ก curl ํ ์คํธ๋ฅผ ๋ ๋ ค๋ณด์. ์ฐ์ , swarm-manger์ ํ ๋น๋ ์ปจํ ์ด๋๋ค์ ์ ๋ณด๋ ์๋์ ๊ฐ๋ค.
์ด์ swarm-worker1 ์ด๋ฆ์ ๋ ธ๋๋ก ์ด๋ํด์ผ ํ๋ ํด๋น ๋ ธ๋๋ก ์ค์ ๋ VM ํฐ๋ฏธ๋๋ก ๋์๊ฐ ๋ค, curl ๋ช ๋ น์ด๋ฅผ ํ ์คํธํด๋ณด์.
response๋ก HTML ํ์ผ์ด ๋ฐํ์ด ๋์๊ณ , ํ๋์ ๋ค๋ชจ์นธ์ ๋ณด๋ฉด ์ปจํ ์ด๋ ID๊ฐ ๋ฐํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ปจํ ์ด๋ ID๋ ๋ฐ๋ก ์์์ ์ดํด๋ณธ swam-manager์ ํ ๋น๋ ์ปจํ ์ด๋ ID ์ค ํ ๊ฐ์์ ์ ์๊ฐ ์๋ค. ๋ง์ฝ ์ฒ์ curl ํ ์คํธ๋ฅผ ํ์ ๋ swarm-manger ๋ ธ๋๊ฐ ์๋ ๋ค๋ฅธ ๋ ธ๋์ ํ ๋น๋ ์ปจํ ์ด๋ ID๊ฐ ๋์ฌ ์๋ ์๋ค. ์ด๋ ingress ๋คํธ์ํฌ์ ๋ถ๊ฐ์ ์ธ ํน์ฑ์ธ ๋ก๋ ๋ฐธ๋ฐ์ฑ ๊ธฐ๋ฅ์ผ๋ก ๋ค๋ฅธ ๋ ธ๋์ ์ปจํ ์ด๋๋ก ์ ๊ทผํ๋๋ก ๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ๋ช ๋ฒ ๋ฐ๋ณตํด์ curl ํ ์คํธ๋ฅผ ๋ ๋ฆฌ๋ฉด ์ ์ฌ์ง์ฒ๋ผ swam-manager ๋ ธ๋์ ํ ๋น๋ ์ปจํ ์ด๋ ID๊ฐ response๋ก ๋ฐํ๋๋ ํ์์ ๊ด์ฐฐํ ์ ์๋ค.
๊ทธ๋ฌ๋ฉด ๋ ธ๋์ ํ ๋น๋ ๊ฐ ์ปจํ ์ด๋๋ค์ด ํ ๋น๋ฐ๋ IP ์ฃผ์๋ ์ด๋ป๊ฒ ์ค์ ๋์ด ์์๊น? ํน์ดํ ์ ์ ์๋ก ๋ค๋ฅธ ๋ ธ๋์ ์์์๋ ๋ถ๊ตฌํ๊ณ IP ์ฃผ์๊ฐ ์์ฐจ์ ์ผ๋ก ํ ๋น๋์๋ค๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ ๊ณง ์๋ก ๋ค๋ฅธ ๋ ธ๋์ ์๋ ์ปจํ ์ด๋๋ค ๊ฐ์ ๋ณ๋์ ํฌํธํฌ์๋ฉ์ ์ค์ ํ์ง ์์๋ ํต์ ์ด ๊ฐ๋ฅํ๋ค๋ ์ด์ผ๊ธฐ์ด๋ค. ์ค์ ๋ก, ํ์๊ฐ ์ค์ต์ ์ํํ์ ๋๋ ๋ง์ฐฌ๊ฐ์ง์๋ค.
์ด๊ฒ์ด ๊ฐ๋ฅํ ์ด์ ๋ ingress ๋คํธ์ํฌ๊ฐ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ ์ฌ๋ฌ ๊ฐ์ ๋์ปค ์์ง์ ์๋ ๋์ปค ๋ฐ๋ชฌ์ ํ๋์ ๋คํธ์ํฌ ํ๋ก ๋ง๋๋ ๋คํธ์ํฌ ๊ฐ์ํ ๊ธฐ์ ์ค ํ๋์ด๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ์ ๊ธฐ๋ฅ ๋๋ถ์ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ๋๋ผ์ด๋ฒ๋ก์ ์ฌ์ฉํ๋ ingress ๋คํธ์ํฌ๊ฐ ์๋ก ๋ค๋ฅธ ๋ ธ๋์ ์ปจํ ์ด๋๋ค ๊ฐ์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํด์ค ์ ์๋ ๊ฒ์ด๋ค.
์ฐธ๊ณ ๋ก, docker exec ๋ช ๋ น์ด๋ก ํน์ ์ปจํ ์ด๋ ๋ด๋ถ์์ ifconfig ๋ช ๋ น์ด๋ฅผ ์ํํ๋ฉด ํด๋น ์ปจํ ์ด๋์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๊ฐ ์ถ๋ ฅ์ด ๋๋๋ฐ, ์ปจํ ์ด๋ ๋ชจ๋ ๊ฐ๊ฐ eth0, eth1, lo ๋ผ๋ ์ด 3๊ฐ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๊ณ ์์์ ๋ณผ ์ ์๋ค. ์ฌ๊ธฐ์ ingress ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋ ๋คํธ์ํฌ ์นด๋๋ eth0 ์ด๋ค.
5-5-2. ์ค์ ๋ชจ๋์์์ ์๋ก์ด ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ, docker_gwbridge ๋คํธ์ํฌ
์ค์ ๋ชจ๋์์ ์ฌ์ฉํ๋ ๋คํธ์ํฌ ์ค ingress ๋ง๊ณ ๋ ๋ ํ๋์ ๋คํธ์ํฌ๊ฐ ์๋๋ฐ, ๋ฐ๋ก docker_gwbridge ๋คํธ์ํฌ์ด๋ค. ์ด์ ์ ์ค์๋ชจ๋๊ฐ ์๋ ์ผ๋ฐ์ ์ธ ๋ชจ๋์์์ ๋์ปค ๋คํธ์ํฌ ์ค ์ปจํ ์ด๋๋ค ๊ฐ์ ํต์ ์ ๊ฐ๋ฅ์ผ ํด์ฃผ๋ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ(ex. "docker0" ์ด๋ฆ์ ๋คํธ์ํฌ)์ ๋ํด ๋ฐฐ์ด์ ์ด ์์๋ค.
์ด ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ๋ ์ค์๋ชจ๋์์๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค. ๊ทธ๋์ ingress ๋คํธ์ํฌ๋ฅผ ํฌํจํ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ๋ ๋คํธ์ํฌ๋ค์ docker_gwbridge ๋ผ๋ ์๋ก์ด ์ ํ์ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ๋ฅผ ํจ๊ป ์ฌ์ฉํจ์ผ๋ก์จ ์๋ก ๋ค๋ฅธ ๋ ธ๋๋ค ๋ด์ ์ปจํ ์ด๋๋ค ๊ฐ์ ํต์ ์ด ๊ฐ๋ฅํ๋๋ก ํด์ค๋ค. ์ฐธ๊ณ ๋ก docker_gwbridge ์ ์ปจํ ์ด๋ ๊ฐ์ ์ฐ๊ฒฐํด์ฃผ๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ eth1 ๋ก ์ฐ๊ฒฐ์ด ๋๋ค.
5-5-3. ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ํ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ
[๋ชฉ์ฐจ 5-5-1]์์ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๋ฅผ ํ์ฉํ๋ ingress ๋คํธ์ํฌ์ ๋ํด ์์๋ณด์๋ค. ์ด๋ฒ์๋ ingress ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ฌ์ฉ์๊ฐ ์ง์ ์์ฑํด ๋ง๋ ์ผ๋ช '์ฌ์ฉ์ ์ ์ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ'๋ฅผ ์ฌ์ฉํด์ ์๋ก ๋ค๋ฅธ ๋ ธ๋์ ์ปจํ ์ด๋๋ค ๊ฐ์ ํต์ ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ฐฐ์๋ณด์. ์ฐ์ ์ค์ ๋ชจ๋๋ ์์ฒด์ ์ธ key-value ์ ์ฅ์๋ฅผ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ๊ตฌ์ฑ ์์ด ์ฌ์ฉ์ ์ ์ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ์์ฑํ๊ณ ์ฌ์ฉํ ์ ์๋ค๊ณ ํ๋ค. ๊ธฐ์กด์ ๋ฐฐ์ ๋ ๋์ปค ๋คํธ์ํฌ๋ฅผ ์์ฑํ๋ ๋ช ๋ น์ด์ -d ์ต์ ์ ์ฌ์ฉํด์ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ์๋์ฒ๋ผ ์์ฑํ ์ ์๋ค.
$ docker network create \
--subnet 11.22.33.44/24 \
-d overlay \
zedd_overlay
์ฐธ๊ณ ๋ก ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ์์ฑํ ๋๋ ์ค์ ํด๋ฌ์คํฐ ๋ด์ ์ด๋ค ๋ ธ๋์์๋ ์์ฑํ์ฌ๋ ๋ค๋ฅธ ๋ ธ๋์ ๋ชจ๋ ์ ์ฉ์ด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ฑํ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๊ฐ ์ค์ง์ ์ผ๋ก ์ ์ฉ๋ ๋๋ ํด๋น ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๊ฐ ์ ์ฉ๋ ์๋น์ค๋ฅผ ์์ฑํ ๋ ์ฆ, ์ปจํ ์ด๋๊ฐ ์์ฑ๋ ๋์ด๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ ๋ฐฉ๊ธ ์์ฑํ zedd_overlay ๋ผ๋ ์ด๋ฆ์ ์ฌ์ฉ์ ์ ์ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๊ฐ ์ ์ฉ๋ ์๋น์ค๋ฅผ ์์ฑํด๋ณด์. --network ์ต์ ์ ์ฌ์ฉํด์ ์์ฑํ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ์ ์ฉํด์ฃผ๋ฉด ๋๋ค. ์๋น์ค ์์ฑ ์ ์ฌ์ฉํ ์ด๋ฏธ์ง๋ ์ ์ค์ต ๋ ์ฌ์ฉํ ๊ฒ๊ณผ ๋์ผํ๋ค.
$ docker service create \
--network zedd_overlay \
--replicas 2 \
alicek106/book:hostname
์ ๋ช ๋ น์ด๋ก ์์ฑ๋ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋ ์ค ํ๋์๋ค๊ฐ ifconfig ๋ช ๋ น์ด๋ฅผ ์ ์ฉํ์ฌ ๊ทธ ์ปจํ ์ด๋๊ฐ ์ฌ์ฉํ๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ค์ ์ถ๋ ฅํด๋ณด์. ์ถ๋ ฅ๋ ํ๋ฉด ์ค eth0 ๋ผ๋ ์ด๋ฆ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ๋ณด๋ฉด IP ์ฃผ์(inet address ๋ผ๊ณ ๋์ด์๋ ๋ถ๋ถ)๋ฅผ ๋ณด๋ฉด ์์์ ์ฌ์ฉ์ ์ ์ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ์์ฑํ ๋ ๋ช ์ํด์ค subnet IP ์ฃผ์๊ฐ ์ ๋ ฅ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์์์ ์ฌ์ฉ์ ์ ์ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ์ ์ฉํด์ ์๋น์ค๋ฅผ ์์ฑํ ๋๋ ํฌํธ ํฌ์๋ฉ์ ํ๋ -p(--publish) ์ต์ ์ ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๋ ๊ณง ingress ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ์ค์ ๋จ์ ์๋ฏธํ๋ค. ๊ทธ๋์ ๋ง์ฝ ingress ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ฌ์ฉ์ ์ ์ํ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ง์ ์ฌ์ฉํ๋ ค๊ณ ํ๋ค๋ฉด ์์ฒ๋ผ --network ์ต์ ์ ์ฌ์ฉํ๋ -p ์ต์ ์ ๋ช ์ํด์ฃผ์ง ์์ผ๋ฉด ๋๋ค.
5-6. ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ(Discovery)
์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ๋, ๋์ปค ์ค์๊ณผ ๊ฐ์ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ํด์ ์ฌ์ฉํ ๋, ์๋ก ์์ฑ๋ ์ปจํ ์ด๋๋ฅผ ๋ฐ๊ฒฌ(Discovery)ํ๊ฑฐ๋ ์์ด์ง ์ปจํ ์ด๋๋ฅผ ์๋์ผ๋ก ๊ฐ์งํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฌํ ๋์์ ์ฃผํคํผ๋ etcd ๋ฑ์ ๋ถ์ฐ ์ฝ๋๋ค์ดํฐ๋ฅผ ์ธ๋ถ์ ๋๊ณ ์ฌ์ฉํด ํด๊ฒฐํ์ง๋ง ์ค์ ๋ชจ๋๋ ์์ฒด์ ์ผ๋ก ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ง์ํ๋ค. ์๋ฅผ ๋ค์ด, Service A,B๋ผ๋ 2๊ฐ์ ์๋น์ค๊ฐ ์กด์ฌํ๊ณ , A ์๋น์ค ์์์๋ B ์๋น์ค๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ค๊ณ ํด๋ณด์.
Service B ๋ด์ ์๋ก์ด ์ปจํ ์ด๋ 1๊ฐ๊ฐ ์ถ๊ฐ๋ก ์์ฑ๋์๋ค. ๊ทธ๋ ๋ค๋ฉด Service A์์๋ ์๋กญ๊ฒ ์์ฑ๋ ์ปจํ ์ด๋๋ฅผ ์ด๋ป๊ฒ ๊ฐ์งํ๊ณ Request๋ฅผ ์์ฒญํ ์ ์๊ฒ ๋๋ ๊ฑธ๊น? Service A๋ Service B์ ์ด๋ค ์ปจํ ์ด๋์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Service A๋ ์๋กญ๊ฒ ์์ฑ๋ ์ปจํ ์ด๋๊ฐ Service B ๋ด์ ์๋ ์ปจํ ์ด๋๋ค ๋ผ๋ ๊ฒ๋ง ์๋ฉด ๋๋ค. ์ด๊ฒ์ด ๊ฐ๋ฅํ ์ด์ ๋ ์ค์ ๋ชจ๋์ ์๋น์ค ๋ฐ๊ฒฌ์ด ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ ์๋น์ค์ ๋ํด ๋์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฅผ ์ค์ต์ ํตํด์ ์์๋ณด์. ์๋์ฒ๋ผ server ๋ผ๋ ์ด๋ฆ์ ์๋ฒ ์ญํ ์ ํ๋ ์๋น์ค์ client ๋ผ๋ ์ด๋ฆ์ ํด๋ผ์ด์ธํธ ์ญํ ์ ํ๋ ์๋น์ค๋ฅผ ๊ฐ๊ฐ ์์ฑํ์.
$ docker service create \
--name server \
--network zedd_overlay \
--replicas 2 \
alicek106/book:hostname
$ docker service create \
--name client \
--network zedd_overlay \
alicek106/book:curl \
ping docker.com
๊ทธ๋ฐ ๋ค์ client ์๋น์ค ๋ด์ ํ ๋น๋ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋ ๋ด๋ถ๋ก ๋ค์ด๊ฐ ๋ค, ์๋์ curl ๋ช ๋ น์ด๋ก server ๋ผ๋ ์ด๋ฆ์ ๋๋ฉ์ธ ๋ค์์ผ๋ก ํ ์คํธ๋ฅผ ํด๋ณด์. ์ฐธ๊ณ ๋ก ์ฌ๊ธฐ์ server ๋ผ๋ ๋๋ฉ์ธ ๋ค์์ ์์์ ์์ฑํ ์๋น์ค ์ด๋ฆ์ ์๋ฏธํ๋ค.
$ curl server | grep -E "Hello"
์ ๋ช ๋ น์ด๋ฅผ ์น๋ฉด HTML ํ์์ Response๊ฐ ๋ฐํ๋๋๋ฐ, ์ด ๋ ์ปจํ ์ด๋ ID ๊ฐ์ด ๋ณด์ผ ๊ฒ์ด๋ค. ์ด ์ปจํ ์ด๋๋ ๋ฐ๋ก server ๋ผ๋ ์ด๋ฆ์ ์๋น์ค ๋ด์ ํ ๋น๋ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋์ ID์ด๋ค. ์ด์ ๊ทธ๋ฌ๋ฉด server ์ด๋ฆ์ ์๋น์ค ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋๋ฅผ 2๊ฐ์์ 3๊ฐ๋ก ๋๋ ค๋ณด์. ๋ช ๋ น์ด๋ ์๋์ ๊ฐ๋ค.
$ docker service scale server=3
๊ทธ๋ฐ ๋ค์ ๋ค์ ์๊น ๋ด๋ถ๋ก ๋ค์ด๊ฐ๋ client ์๋น์ค ๋ด์ ํ ๋น๋ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋๋ก ๊ฐ์ curl ๋ช ๋ น์ด๋ก ๋ค์ ํ ์คํธ๋ฅผ ๋ช ๋ฒ ํด๋ณด๋ฉด ์๋กญ๊ฒ ์์ฑ๋ ์ปจํ ์ด๋ ID๊ฐ ๋ฐํ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ฆ, ์ค์ ๋ชจ๋๊ฐ ์์์ ์๋น์ค ๋ฐ๊ฒฌ์ ์ํํ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด server ๋ผ๋ ์๋น์ค ์ด๋ฆ์ ์ด๋ป๊ฒ ๊ฐ ์ปจํ ์ด๋์ IP๋ก ๋ณํ๋ ์ ์์์๊น? ์ฌ์ค์ server ๋ผ๋ ์๋น์ค ์ด๋ฆ์ (์ ์์์์) ์ด 3๊ฐ์ IP ์ฃผ์๋ฅผ ๊ฐ๋ ๊ฒ์ด ์๋ ์๋น์ค ์์ฒด์ ํ ๋น๋ 1๊ฐ์ VIP(Virtual IP, ๊ฐ์ IP ์ฃผ์)๋ฅผ ๊ฐ์ง๊ฒ ๋๋ ๊ฒ์ด๋ค. ์ด๋ ์ด์ ํฌ์คํ ์์ ๋์ปค ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ๋ฅผ ๋ฐฐ์ฐ๋ฉด์ --net-alias ์ต์ ์์ ์์๋ณด์๋ ๋์ปค ๋ด์ฅ DNS ์๋ฒ์ ์ ์ฌํ๋ค. ๋จ, --net-alias ์ต์ ์ ์ฌ์ฉํ ๋์ ๊ธฐ๋ฅ๊ณผ ์ ์ฌํ ๋ฟ ๊ตฌ์ฒด์ ์ธ ๋์ ๋ฐฉ์์ ๋ค๋ฅด๋ค๊ณ ํ๋ค.
์ฐธ๊ณ ๋ก ์๋น์ค ์์ฒด์ ํ ๋น๋ VIP ์ฃผ์๊ฐ ๋ฌด์์ธ์ง ์์๋ณด๋ ค๋ฉด ํด๋น ์๋น์ค์ ๊ตฌ์ฒด์ ์ธ ์ ๋ณด ์ค 'VirtualIPs' ๋ผ๋ ํญ๋ชฉ์ ๋ณด๋ฉด ์ ์ ์๋ค.
5-7. ์ค์ ๋ชจ๋์์ ๋ณผ๋ฅจ ์ฌ์ฉํ๊ธฐ
๋์ปค ์ค์์ ๋นํ์ฑํํ ๋ชจ๋ ์ฆ, ์ปจํ ์ด๋๋ฅผ ๋จ์๋ก ์ ์ดํ ๋ ๋ณผ๋ฅจ์ ์ฌ์ฉํ ๋๋ ํธ์คํธ ๋ณผ๋ฅจ ๊ณต์ ๋ ์์ฒด์ ์ผ๋ก ์์ฑํ ๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ -v ์ต์ ์ ์ฌ์ฉํ ๋ ๋ช ๋ น์ด ํ์ ์์ผ๋ก๋ ์ ๊ตฌ๋ถ์ด ์๊ฐ๋ค.(์ ๋ชจ๋ฅธ๋ค๋ฉด ์ด์ ํฌ์คํ ์ฐธ๊ณ )
ํ์ง๋ง ์ค์ ๋ชจ๋์์๋ ํธ์คํธ ๋ณผ๋ฅจ ๊ณต์ ๋ฅผ ํ์ฉํด์ ๋ณผ๋ฅจ์ ์ฌ์ฉํ ์ง, ์์ฒด์ ์ผ๋ก ์์ฑํ ๋์ปค ๋ณผ๋ฅจ์ ์ฌ์ฉํ ์ง ์ข ๋ ๋ช ํํ ๊ตฌ๋ถ์ง์ด ์ ์ํด์ฃผ์ด์ผ ํ๋ค. ๋จผ์ ์์ฒด์ ์ผ๋ก ์์ฑํ ๋์ปค ๋ณผ๋ฅจ์ ์ฌ์ฉํ ๋์ ๋์ปค ์ค์์ ๋ํด ์์๋ณด์.
๋์ปค ์ค์์์ ๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ ค๋ฉด ์๋น์ค๋ฅผ ์์ฑํ ๋ ์ ์ฉํด์ฃผ์ด์ผ ํ๋ค. --mount ์ต์ ์ ์ฌ์ฉํ๋๋ฐ, ์๋์ ๊ฐ์ ํ์์ผ๋ก ์ ์ํด์ค๋ค. ์ฐธ๊ณ ๋ก ์ด์ ํฌ์คํ ์์ ์ปจํ ์ด๋ ๋จ์๋ฅผ ์ ์ดํ ๋์ ๋ณผ๋ฅจ์ ์ฌ์ฉํ ๋๋ --mount ์ต์ ์ ์ฌ์ฉํ ๋ช ๋ น์ด๋ฅผ ๋ฐฐ์ ์๋๋ฐ, ๊ทธ ๋์ ํ์์ด๋ ๋๊ฐ๋ค.
$ docker serivce create \
--name zedd_service \
--mount type=volume,source=[์์ฑํ๋ณผ๋ฅจ],target=[์ปจํ
์ด๋ ๋ด๋ถ ๋๋ ํ ๋ฆฌ] \
ubuntu:14.04 \
ping.docker.com
๋ง์ฝ source ์ธ์์ [์์ฑํ๋ณผ๋ฅจ]์ ๋ช ์ํด์ฃผ์ง ์์ผ๋ฉด ์์์ 16์ง์์ ํด์ฌ๊ฐ์ ์ด๋ฆ์ผ๋ก ํ๋ ๋ณผ๋ฅจ์ ์์ฒด์ ์ผ๋ก ์์ฑํด ํ ๋นํ๋ค. ์์ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๊ฒ ๋๋ฉด [์ปจํ ์ด๋ ๋ด๋ถ ๋๋ ํ ๋ฆฌ]์ ๋ช ์ํ ๊ฒฝ๋ก์ ์๋ ๋ฐ์ดํฐ ํ์ผ๋ค์ด ๋ณผ๋ฅจ์ ๋ณต์ฌ๋๊ณ , ํธ์คํธ์์๋ ํด๋น ๋ฐ์ดํฐ ํ์ผ๋ค์ ์ฐจ์งํ๋ ๋ณ๋์ ๊ณต๊ฐ์ด ์๊ธด๋ค.
์๋ฅผ ๋ค์ด์, ์๋์ ๊ฐ์ด ubuntu:14.04 ์ด๋ฏธ์ง์ /etc/vim/ ์ด๋ผ๋ ๋๋ ํฐ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ๋ณผ๋ฅจํ ๊ฒฝ๋ก๋ก ๊ฒฐ์ ํ๋ค๊ณ ํ์. ์๋ ๋ช ๋ น์ด๋ฅผ ํ์ฉํด์ ๋ณผ๋ฅจ์ ์์ฑํด๋ณด์.
$ docker service create \
--name zedd_ubuntu \
--mount type=volume,source=volume_for_test,target=/etc/vim \
ubuntu:14.04
ping docker.com
์์ฒ๋ผ ์๋น์ค๊ฐ ๋ง๋ค์ด์ง๋ฉด์ ๋ณผ๋ฅจ์ด ์์ฑ๋์์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ ์ด ๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ ์ปจํ ์ด๋๋ฅผ ์์ฑํ์ฌ ๋ณผ๋ฅจ ๋์์ธ /etc/vim ๋๋ ํ ๋ฆฌ์ ์๋ ํ์ผ๋ค์ด ์ ๊ณต์ ๋๋์ง ์ดํด๋ณด์. ์๋ ๋ช ๋ น์ด๋ก ๊ฐ๋จํ ์ปจํ ์ด๋ 1๊ฐ๋ฅผ ์์ฑํ๊ณ ๋ด๋ถ๋ก ๋ค์ด๋ณด์.
$ docker run -it --name volume_for_test_cont \
-v volume_for_test:/root \
ubuntu:14.04
๋ด๋ถ๋ก ๋ค์ด๊ฐ๋ณด๋ฉด root ๋๋ ํ ๋ฆฌ๊ฐ ์๋กญ๊ฒ ์๊ธฐ๊ณ ๊ทธ ์์ /etc/vim ์์ ์๋ vimrc, vimrc.tiny ๋ผ๋ ํ์ผ๋ค์ด ๊ณต์ ๋๊ณ ์์ ๊ฒ์ด๋ค.
๋ค์์ ์ค์ ๋ชจ๋์์ ํธ์คํธ ๋ณผ๋ฅจ์ ๊ณต์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ฅผ bind ํ์ ์ ๋ณผ๋ฅจ ์์ฑ์ด๋ผ๊ณ ๋ ํ๋๋ฐ, ์ฌ๊ธฐ์ bind๊ฐ ๋ฐฉ๊ธ ๋ฐฐ์ด --mount ์ต์ ์ type ์ธ์์ ๋ค์ด๊ฐ ํค์๋์ด๋ค. ์์ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
$ docker service create \
--name zedd_ubuntu \
--mount type=bind,source=[ํธ์คํธ ๋๋ ํ ๋ฆฌ],target=[์ปจํ
์ด๋ ๋ด๋ถ ๋๋ ํ ๋ฆฌ] \
ubuntu:14.04
ping docker.com
์ค์ ๋ชจ๋์์์ ๋ณผ๋ฅจ ์์ฑ์ ์ด์ ๊ฐ๋ค. ํ์ง๋ง ์ค์ ๋ชจ๋์์์ ๋ณผ๋ฅจ์ ์์ฝ๊ฒ๋ ๊น๋ค๋กญ๊ณ ๋ถํธํ ์ ์ด ๋ง๋ค. ์๋ํ๋ฉด ์ค์ ๋ชจ๋๊ฐ ๋ฐ๋ก ์ฌ๋ฌ ์ปจํ ์ด๋๋ค์ ๊ด๋ฆฌํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฅผ ๋ค์ด, ์ค์ ๋ชจ๋์์ ์ด 10๊ฐ์ ์ปจํ ์ด๋๋ค์ ๊ด๋ฆฌํด์ฃผ๊ณ ์๋ค๊ณ ํ์. ๊ทธ๋ฐ๋ฐ ์ด 10๊ฐ์ ์ปจํ ์ด๋ ๊ฐ๊ฐ ๋ด๋ถ์ ์๋ ๋ฐ์ดํฐ๋ค์ด ์ญ์ ๋ ๊น ๋๋ ค์ ํธ์คํธ ๋ณผ๋ฅจ ๊ณต์ ๋ฅผ ํตํด ํธ์คํธ์ ๋ฐ์ดํฐ๋ฅผ ์ด์ค์ผ๋ก ์์ ํ๊ฒ ์ ๋ณด๊ดํ๊ณ ์ถ๋ค๊ณ ํ์. ์ด๋ฐ ์ํฉ์์ ๋์ปค ์ค์์ ๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ ค๋ฉด ์ผ๋จ ์ค์ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ๋ ๋ชจ๋ ๋ ธ๋๊ฐ ๋ณผ๋ฅจ์ผ๋ก ๊ณต์ ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค. ์ฆ, ์ผ์ผ์ด ๊ฐ ๋ ธ๋ ๋ด์ ๊ณต์ ํ ๋ฐ์ดํฐ์ ๋ณผ๋ฅจ์ ๋ช ์ํด์ฃผ์ด์ผ ํ๋๋ฐ, ์ด๋ ์ฌ๊ฐ ๊น๋ค๋ก์ด ์์ ์ด ์๋๋ค.
๊ทธ๋์ ๋ณดํต์ ์ค์ ๋ชจ๋์์ ๋ณผ๋ฅจ์ ๊ณต์ ํด์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด ์ค์ ํด๋ฌ์คํฐ ๋ด์ ๋ชจ๋ ๋ ธ๋์์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ ํผ์์คํด๋(Persistent) ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ํผ์์คํดํธ ์คํ ๋ฆฌ์ง๋, ์ค์ ํด๋ฌ์คํฐ์๋ ๋ณ๊ฐ๋ก ์ธ๋ถ์ ์กด์ฌํ์ฌ ๋คํธ์ํฌ๋ฅผ ํ์ฉํด์ ์ค์ ํด๋ฌ์คํฐ ๋ด์ ์ปจํ ์ด๋๋ค๊ณผ ๋ง์ดํธํ ์ ์๋ ์คํ ๋ฆฌ์ง๋ฅผ ์๋ฏธํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ฌํ ํผ์์คํดํธ ์คํ ๋ฆฌ์ง๋ ๋์ปค์์ ์์ฒด์ ์ผ๋ก ์ ๊ณตํด์ฃผ์ง ์๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์จ๋ํํฐ์ ํ๋ฌ๊ทธ์ธ์ ์ด์ฉํ๊ฑฐ๋ NFS(Network File System) ๋๋ DFS(Distributed File System)์ ๋ณ๋๋ก ๊ตฌ์ฑํด์ผ ํ๋ค.
5-8. ์ค์ ๋ชจ๋ ๋ ธ๋ ๋ค๋ฃจ๊ธฐ
ํฌ์คํ ์ ๋ถ๋ถ์์ ์ค์ ๋ชจ๋์์์ ๋ ธ๋๋ฅผ ์์ฑํ๊ฑฐ๋ ์ญ์ ๋๋ ์์ปค ๋ ธ๋์์ ๋งค๋์ ๋ ธ๋๋ก ์ ๊ทธ๋ ์ด๋(promote) ํ๊ฑฐ๋ ๋งค๋์ ๋ ธ๋์์ ์์ปค๋ ธ๋๋ก ๋ค์ด๊ทธ๋ ์ด๋(demote)ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์๋ ๋ฐฐ์ ์๋ค. ๊ทธ ์ด์ธ์ ์ค์ ๋ชจ๋๋ ์์ฒด์ ์ผ๋ก ๋ ธ๋๋ฅผ ๋ค๋ฃจ๋ ์ ๋ต์ ์ธ์ฐ๊ธฐ ์ํ ๋ช ๊ฐ์ง ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
5-8-1. ์ปจํ ์ด๋๋ฅผ ํ ๋น ๋ฐ์ ์ ์๋ ๋ ธ๋์ธ์ง ๊ฒฐ์ ํ๋ AVAILABILITY ๋ณ๊ฒฝ
๋จผ์ ๋ ธ๋์ AVAIABILITY ํญ๋ชฉ์ ํด๋น ๋ ธ๋๊ฐ ์ปจํ ์ด๋๋ฅผ ํ ๋น ๋ฐ์ ์ ์๋ ๋ ธ๋์ธ์ง ๋ํ๋ด๋ ๊ฐ์ด๋ค. ์ด๊ฒ ์ ํ์ํ ๊ฑธ๊น? ์ฌ๋ฌ ๊ฐ์ ๋ ธ๋๋ฅผ ์ด์ํ๋ค ๋ณด๋ฉด ๋งค๋์ ๋ ธ๋, ์์ปค ๋ ธ๋์ ๋ฐ๋ผ ๋ ธ๋์ ์ญํ ์ด ๋ค์ํด์ง ์ ์๋ค. ์ผ๋ก๋ก, ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋๋ฅผ ์ค์ง์ ์ผ๋ก ์ด์ํ๋ ๋ ธ๋๋ ๋งค๋์ ๋ ธ๋ ๋ณด๋ค๋ ์์ปค ๋ ธ๋์ผ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋งค๋์ ๋ ธ๋์๋ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋๊ฐ ํ ๋น ๋์ง ์๋๋ก ํ ์๋ ์๋ค. ๋ค์ ๋งํด, AVAIABILITY ํญ๋ชฉ์ ์ด์ฉํด์ ํน์ ๋ ธ๋๊ฐ ์ปจํ ์ด๋๋ฅผ ํ ๋น ๋ฐ์ ์ ์๋๋ก ํ ์ง ๋ง์ง๋ฅผ ๊ฒฐ์ ํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์์ฑํ ์ค์ ํด๋ฌ์คํฐ ๋ด์ ์กด์ฌํ๋ ๋ ธ๋๋ค์ ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด ์๋์ ๊ฐ์ด ๋์ค๋ฉฐ, ๊ทธ ์ค์ AVAIABILITY ๋ผ๋ ํญ๋ชฉ์ด ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ ํ๋ฉด์ ๋ณด๋ฉด ํ์ฌ ๋๋จธ์ง ์์ปค ๋ ธ๋๊ฐ ์๋ VM๋ค์ ๊บผ๋ ์ํ๋ผ STATUS๊ฐ DOWN์ผ๋ก ๋์ค๊ธด ํ์ง๋ง, AVAIABILITY ํญ๋ชฉ์ ๋ณด๋ฉด ๋ชจ๋ ๋ ธ๋๊ฐ Active์ธ ๊ฒ์ ์ ์ ์๋ค. Active๋ ๋ง ๊ทธ๋๋ก ์ปจํ ์ด๋๋ฅผ ํ ๋น ๋ฐ์ ์ ์๋ ์ํ์ด๋ค. ๋ณดํต ๋ ธ๋๊ฐ ์์ฑ๋๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฉ๋๋ ๊ฐ์ด๋ค. ์๋์ ๋ช ๋ น์ด ํ์์ ์ด์ฉํด Active๊ฐ ์๋ ๋ ธ๋๋ฅผ Active ์ํ๋ก ๋ณํํ ์ ์๋ค.
$ docker node update \
--availability active \
[NODE NAME]
๋ค๋ฅธ ์ข ๋ฅ์ STATUS๋ก๋ Drain์ด ์๋ค. Drain ์ํ์ ๋ ธ๋๋ ์ปจํ ์ด๋๋ฅผ ํ ๋นํ๋ ์ฃผ์ฒด์ธ ์ค์ ๋งค๋์ ์ ์ค์ผ์ฅด๋ฌ๊ฐ ์ปจํ ์ด๋๋ฅผ ํด๋น ๋ ธ๋๋ก ํ ๋นํ์ง ์๊ฒ ๋๋ค. ๊ทธ๋์ ๋ณดํต ๋งค๋์ ๋ ธ๋์ Drain ์ํ๋ก ์ค์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๋ํ ํน์ ๋ ธ๋์ ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๊ฒฝ์ฐ์ ๋ฌธ์ ๊ฐ ์๊ธด ๋ ธ๋์ ์ปจํ ์ด๋๋ฅผ ํ ๋นํ์ง ๋ชปํ๋๋ก ํ๊ธฐ ์ํด์๋ ์ด์ฉํ ๋๊ฐ ์๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ๋ ธ๋๊ฐ ์ด๋ฏธ ์คํ์ํค๊ณ ์๋ ์ปจํ ์ด๋๋ค์ ์ฆ์ ์ค์ง๋๋ค. ์๋ฅผ ๋ค์ด, ์ด๋ค ๋ ธ๋๊ฐ Drain ์ํ๋ก ๋ณํ๊ธฐ ์ด์ ์ Active ์ํ์ผ ๋ ํ ๋น๋ฐ๊ณ ์๋ ์ปจํ ์ด๋๊ฐ ๋ช ๊ฐ ์๋ค๊ณ ํ์. ์ด๋ด ๊ฒฝ์ฐ์ ํด๋น ๋ ธ๋๋ฅผ Drain ์ํ๋ก ๋ฐ๊พธ๊ฒ ๋๋ฉด ํด๋น ๋ ธ๋์ ํ ๋น๋ฐ์ ์ปจํ ์ด๋๋ ์ ๋ถ ์ค์ง๋ ํ, ์ค์ ํด๋ฌ์คํฐ ๋ด์ Active ์ํ์ ๋ ธ๋๋ก ํ ๋น๋๋ค. ์ฐธ๊ณ ๋ก Drain ์์ผ๋์ ๋ ธ๋๋ฅผ ๋ค์ Active๋ก ๋ณ๊ฒฝํ๋ค๊ณ ํ๋ค Drain ์ํ์ผ ๋ ๋ค๋ฅธ ๋ ธ๋๋ก ํ ๋น๋์๋ ์ปจํ ์ด๋๊ฐ ๋ค์ ์๊ธฐ๋ ์ฆ, ์ปจํ ์ด๋๋ฅผ Re-balancing ์์ ์ ํด์ฃผ์ง ์๋๋ค. ๋ง์ฝ ํ๋ ค๊ณ ํ๋ค๋ฉด ์ฌ์ฉ์๊ฐ ์ง์ docker service scale ~ ๋ช ๋ น์ด๋ก ์ ์ฉํด์ฃผ์ด์ผ ํ๋ค.
Drain ์ํ๋ก ๋ณ๊ฒฝํ๋ ๋ช ๋ น์ด ํ์์ ์๋์ ๊ฐ๋ค. --availability ํญ๋ชฉ๋ง ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋๋ค.
$ docker node update \
--availability drain \
[NODE NAME]
๋ค์์ STATUS ์ข ๋ฅ๋ก๋ Pause๊ฐ ์๋ค. Pause ์ํ๋ ํด๋น ๋ ธ๋๊ฐ ๋ ์ด์ ์ปจํ ์ด๋๋ฅผ ํ ๋น๋ฐ์ง ์๋๋ค๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ๋ง ๋ณด๋ฉด Drain ์ํ์ ๋๊ฐ์ ๋ณด์ด์ง๋ง ๋ถ๋ช ํ ์ฐจ์ด์ ์ด ์๋ค. Drain ์ํ๋ ํ ๋น๋ฐ์๋ ์คํ์ค์ธ ์ปจํ ์ด๋๊ฐ ์ค์ง๋์ง๋ง Pause๋ ์ค์ง๋์ง ์๊ณ ์ฌ์ ํ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ค. ๊ทธ๋์ Pause๋ "์ง๊ธ๊น์ง ํ ๋น๋ฐ์ ์ปจํ ์ด๋๋ค๋ง ์คํํ ๊ฑฐ์ผ. ๋ ์ถ๊ฐํ ์ปจํ ์ด๋๋ค์ ๋ค๋ฅธ ๋ ธ๋์๋ค๊ฐ ์ค" ์ธ ์ ์ด๋ค.
5-8-2. ๋ ธ๋์๊ฒ ์ด๋ฆํ๋ฅผ ๋ถ์ฌ ๋ถ๋ฅํ์, --lablel-add ์ต์
์ด์ ์ ๋์ปค ์ด๋ฏธ์ง ๋ค๋ฃจ๊ธฐ ํฌ์คํ ์์ ์ด๋ฏธ์ง์ ๋ผ๋ฒจ์ ๋ถ์ผ ์ ์์๋ค. ๋๊ฐ์ด ๋ ธ๋์์๋ ๋ผ๋ฒจ์ ๋ถ์ฌ ๊ทธ ๋ ธ๋๊ฐ ์ด๋ค ์๋ฏธ๋ฅผ ๊ฐ๋ ๋ ธ๋์ธ์ง ์ฌ์ฉ์๊ฐ ์ง์ ๋ ธ๋๋ฅผ ๋ถ๋ฅํด ์ ๋ฆฌํ ์ ์๋ค. ์ด๋ฏธ์ง ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ผ๋ฒจ์ <key>=<value> ํํ๋ฅผ ์ง๋๋ค. ๋ง์ฝ ๋ ธ๋์ ๋ผ๋ฒจ์ ๋ถ์ธ๋ค๋ฉด ์๋น์ค๋ฅผ ์์ฑํ๋ฉด์ ํ ๋นํ ๋ ํ๋ฆฌ์นด ์ปจํ ์ด๋๋ค์ ์ํ๋ ๋ผ๋ฒจ์ ๊ฐ๋ ๋ ธ๋์๋ง ํ ๋นํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋ค.
๋ ธ๋์ ๋ผ๋ฒจ์ ์ถ๊ฐํ๋ ๊ฒ์ --label-add ์ต์ ์ ์ฌ์ฉํ ์ ์๋ค. ์๋ฅผ ๋ค์ด์, ์๋์ ๊ฐ์ด ์์ปค ๋ ธ๋์ ๋ผ๋ฒจ์ ๋ถ์ฌํด๋ณด์.
$ docker node update \
--label-add username=zedd \
swarm-worker1
๊ทธ๋ฆฌ๊ณ inspect ๋ช ๋ น์ด๋ก ํด๋น ๋ ธ๋์ ์์ธ ์ ๋ณด๋ฅผ ์ดํด๋ณด๋ฉด ์๋์ฒ๋ผ Labels ํญ๋ชฉ์ ๋ฐฉ๊ธ ์ ์ํ ๋ผ๋ฒจ์ด ์์ฑ๋์์์ ํ์ธํ ์ ์๋ค.
5-8-3. ์๋น์ค ์ ์ฝ์ ์ค์ ํด ํน์ ๋ ธ๋์๋ง ์ปจํ ์ด๋๋ฅผ ํ ๋นํ๋๋ก ํ์, --constraint ์ต์
๋ค์์ ์ค์ ํด๋ฌ์คํฐ์ ์๋น์ค๋ฅผ ์์ฑํ ๋ ์ ์ฝ(Constraint)์ ์ค์ ํ์ฌ ์๋น์ค์ ์ปจํ ์ด๋๊ฐ ํ ๋น๋ ๋ ธ๋๋ง์ ์ ํํ ์๋ ์๋ค. ํน์ ๋ ธ๋ ID๋ ๋ ธ๋์ ํธ์คํธ ์ด๋ฆ, ๋์ปค ๋ฐ๋ชฌ์ ๋ผ๋ฒจ, (์ง์ ์ ๋ฐฐ์ด) ๋ ธ๋์ ๋ผ๋ฒจ ๋ฑ์ผ๋ก ๋ค์ํ ์ ์ฝ ์กฐ๊ฑด์ ์ค์ ํ ์๋ ์๋ค.
์ฐ์ ์ง์ ์ ๋ฐฐ์ด ๋ ธ๋์ ๋ถํ์ง ๋ผ๋ฒจ์ ๊ธฐ์ค์ผ๋ก ์ ์ฝ์ ์ค์ ํด๋ณด์. ์๋์ ๊ฐ์ ๋ช ๋ น์ด ํ์์ผ๋ก ์ ์ฉํ ์ ์๋ค. ๋ถ์ธ ๋ผ๋ฒจ์ ์์์ ์ ์ํ username=zedd ๋ผ๊ณ ๊ฐ์ ํด๋ณด์.
$ docker service create \
--name node_label_constraint \
--replicas 5 \
--constraint 'node.labels.username == zedd' \
ubuntu:14.04 \
ping docker.com
ํน์ดํ ๊ฒ์ ์ ์ฝ์ ์ค์ ํ ๋ ๋์ผํ์ง ์๋์ง๋ฅผ ์๋ฏธํ๋ ๋ ผ๋ฆฌ ์ฐ์ฐ์๊ฐ Python์ฒ๋ผ == ์ != ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ ์์ ๊ฐ์ด ์ค์ ํ ์ ์ฝ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ ธ๋๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ ์๋น์ค์ ์ปจํ ์ด๋๋ ์์ฑ๋์ง ์๋๋ค.
๋ค์์ ๋ ธ๋์ ID๋ก ์ ์ฝ์กฐ๊ฑด์ ๊ฑฐ๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ํ๋ ์ฃผ์ํ ์ ์ด ์๋ค.๊ธฐ์กด์ ๋์ปค ์์ง์ ์ด๋ฏธ์ง ID๋ ์ปจํ ์ด๋ ID ๋ฑ๊ณผ ๊ฐ์ด ID ๊ฐ๋ค์ด ๊ธด ํด์ฌ๊ฐ์ผ๋ก ๋์ด ์์ผ๋ฉด ์์ ๋ช์๋ฆฌ๋ง ์ ๋ ฅํด๋ ๋์ปค ์์ง์ด ์์์ ์ ์ฐพ์์ฃผ์๋ค. ํ์ง๋ง ์ ์ฝ์กฐ๊ฑด์ ๊ฑธ์ด์ค ๋ ๋งํผ์ ๋ ธ๋ ID๋ฅผ ์ ๋ ฅํด์ค ๋ ๋ฐ๋์ ๊ธด ํด์ฌ๊ฐ ์ ๋ถ๋ฅผ ์ ๋ ฅํด์ฃผ์ด์ผ ํ๋ค. ๋ช ๋ น์ด ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
$ docker service create \
--constraint 'node.id == MIIBajCCARCgAwIBAgIUW3RulxTWTziz' \
--replicas 5
ubuntu:14.04 \
ping docker.com
๋ค์์ ๋ ธ๋์ ํธ์คํธ ์ด๋ฆ๊ณผ ๋ ธ๋์ ์ญํ ์ ๊ธฐ์ค์ผ๋ก ์ธ์ฐ๋ ์ ์ฝ ์กฐ๊ฑด์ด๋ค. ์ฐ์ ํธ์คํธ ์ด๋ฆ์ ๊ทธ์ผ๋ง๋ก ๋ ธ๋ VM์ ํธ์คํธ ์ด๋ฆ์ด๋ค. ์ง๊ธ๊น์ง ํด์จ ์ค์ต์ ๊ธฐ์ค์ผ๋ก ํ๋ค๋ฉด swarm-manager, swarm-worker1, swarm-worker2 ๋ผ ํธ์คํธ ์ด๋ฆ์ด ๋๊ฒ ๋ค. ๋ค์์ ๋ ธ๋์ ์ญํ ์ธ๋ฐ, ์ญํ ์ด๋ผ ํจ์ ๋งค๋์ ๋ ธ๋์ธ์ง ์์ปค ๋ ธ๋์ธ์ง์ด๋ค. ๋งค๋์ ๋ ธ๋์ด๋ฉด manager๋ฅผ ์์ปค ๋ ธ๋์ด๋ฉด worker๋ฅผ ํค์๋๋ก ์ฐ๋ฉด ๋๋ค. ๋ช ๋ น์ด ์์๋ ์๋์ ๊ฐ๋ค.
$ docker service create \
--constraint 'node.hostname == swarm-worker1' \
--replicas 3 \
ubuntu:14.04 \
ping docker.com
$ docker service create \
--constraint 'node.role != manager' \
--replicas 3 \
ubuntu:14.04 \
ping docker.com
๋ง์ง๋ง์ผ๋ก ๋์ปค ๋ฐ๋ชฌ ์์ฒด์ ์ค์ ๋ ๋ผ๋ฒจ์ ๊ธฐ์ค์ผ๋ก ํ๋ ์ ํ ์กฐ๊ฑด์ด๋ค. ๋์ปค ๋ฐ๋ชฌ์ ๋ผ๋ฒจ์ ๋ถ์ฌ์ฃผ๋ ค๋ฉด ๋์ปค ๋ฐ๋ชฌ์ ์คํ ์ต์ ์ ๋ณ๊ฒฝํด์ผ ํ๋ค. ์ฐธ๊ณ ๋ก ์ด๋ฏธ ๋์ปค ๋ฐ๋ชฌ์ ์ค์ ๋ ๋ผ๋ฒจ์ ํ์ธํ๊ณ ์ถ๋ค๋ฉด docker info ๋ช ๋ น์ด์ Labels ํญ๋ชฉ์ผ๋ก ํ์ธ์ด ๊ฐ๋ฅํ๋ค. ์์๋ ์๋์ ๊ฐ๋ค.
$ docker service create \
--constraint 'engine.labels.[key] == [value] \
--replicas 2 \
ubuntu:14.04 \
ping docker.com
๊ทธ๋ฆฌ๊ณ ์ง๊ธ๊น์ง ์๊ฐํ ์ฌ๋ฌ ์ ์ฝ ์กฐ๊ฑด๋ค์ ์๋ก ์์ด ๋์์(AND ์กฐ๊ฑด ์ฒ๋ผ) ์ฌ์ฉํ ์๋ ์๋ค. ์ด๋ ๊ฒ ์ฌ๋ฌ๊ฐ์ง ์ ์ฝ ์กฐ๊ฑด์ ํ์ฉํ๋ฉด ์ด๋ค ๋ ธ๋๋ค์ ์ด๋ค ๋ชฉ์ ์ ์ํด ์ฌ์ฉํ ์ง ๋ฑ ๋ ธ๋๋ฅผ ๋ค๋ฃจ๋ ์ ๋ต์ ์ธ์ธ ์๊ฐ ์๋ค.
์ง๊ธ๊น์ง ๊ธด.. ์ฌ์ ์ธ ๋์ปค ์ค์์ ๋ํด ์์๋ณด์๋ค. ๋ค์ ํฌ์คํ ์์๋ ๋๋์ด ๋์ปค์ ๋ง์ง๋ง ๋ถ๋ถ์ธ ๋์ปค ์ปดํฌ์ฆ(Compose)์ ๋ํด ๋ค๋ฃฌ๋ค. ๋์ปค์ ๋ง์ง๋ง ๋ชฉ์ฐจ๋ก ๋ฌ๋ ค๋๊ฐ๋ณด์.
'Container > Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker] ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ํ๋๋ก ๋ฌถ์ด ๊ด๋ฆฌํ์, Docker Compose (0) | 2023.05.28 |
---|---|
[Docker] ์๋ฒ๋ก์์ ์ญํ , Docker Daemon (0) | 2023.04.19 |
[Docker] ๋์ปค ์ด๋ฏธ์ง ๋ค๋ฃจ์ด๋ณด๊ธฐ, ๊ทธ๋ฆฌ๊ณ Dockerfile (4) | 2023.04.05 |
[Docker] ๋์ปค ์ปจํ ์ด๋ ๋ค๋ฃจ์ด๋ณด๊ธฐ (1) | 2023.03.07 |
[Docker] ๋์ปค๋, ๊ทธ๋ฆฌ๊ณ ๋์ปค ์์ง์ ์ด๋ฏธ์ง์ ์ปจํ ์ด๋ (4) | 2023.02.15 |