๐ ํด๋น ํฌ์คํ ์ ์์ํ์ธ์! ๋์ปค/์ฟ ๋ฒ๋คํฐ์ค ์์ ์ ์ฝ๊ณ ๊ฐ์ธ์ ์ธ ๋ชฉ์ ํ์ ์์ฑ๋๋ ๊ธ์ ๋๋ค. ํฌ์คํ ์ ์ฌ์ฉ๋๋ ๋ชจ๋ ์๋ฃ๋ ์ ๊ฐ ์ง์ ์ฌ๊ตฌ์ฑํ์์์ ์๋ฆฝ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ (์ด์ ์ ์๊ฒ๋๋ง ๋ฐฐ์ ๋) ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ํ๋์ ์๋น์ค๋ก ์ ์ํ์ฌ ์ปจํ ์ด๋ ๋ฌถ์์ผ๋ก ๊ด๋ฆฌํ ์ ์๋๋ก ์์ ํ๊ฒฝ์ ์ ๊ณตํ๋ ๋์ปค ์ปดํฌ์ฆ์ ๋ํด ๋ฐฐ์๋ณด์.
1. ๋์ปค ์ปดํฌ์ฆ๊ฐ ์ ํ์ํ ๊น?
๋์ปค ์ปดํฌ์ฆ๋ฅผ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ฐฐ์ฐ๊ธฐ์ ์์ ๊ทผ๋ณธ์ ์ธ ์ง๋ฌธ๋ถํฐ ํด๋ณด์. ๋์ปค ์ปดํฌ์ฆ๋ฅผ ๋ฐฐ์ฐ๊ณ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น? ์ด์ ๋ ๋ฐ๋ก ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์๋น์ค๋ ๋ณดํต ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋ ์๋น์ค๋ค์ด ๋์์ ๋์ํ๋ ๊ฒ์ผ๋ก ๊ตฌ์ฑ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ง๊ธ๊น์ง ์ฐ๋ฆฌ๋ ์ผ๋ฐ์ ์ธ ๋์ปค ์์ง์์ ์ปจํ ์ด๋ ๋จ์๋ก ์ ์ดํ ๋๋, ๋์ปค ์ค์์ ๋ฐฐ์ธ ๋๋ ํ๋์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ํ ๋์๋ง ๋ค๋ฃฐ ์ ์์๋ค. ์๋ฅผ ๋ค์ด MySQL DB ์๋ฒ ์ญํ ์ ํ๋ ์ปจํ ์ด๋๋ฅผ ์์ฑํ์ ๋, ์ฐ๋ฆฌ๋ MySQL ์ปจํ ์ด๋ 1๊ฐ ๋ง์ ์ ์ดํ๊ฑฐ๋, ๋์ปค ์ค์์์ MySQL ์ปจํ ์ด๋๋ค๋ก ๊ตฌ์ฑ๋ ์๋น์ค๋ค๋ง ์ ์ดํ์๋ค.
ํ์ง๋ง ์ผ๋ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋์ ์ปจํ ์ด๋๊ฐ ์๋ ์ฌ๋ฌ ๊ฐ์ ์๋ก ๋ค๋ฅธ ์ญํ ์ ํ๋ ์ปจํ ์ด๋๋ค๋ก ๋์ํ๋ค. ์ผ๋ก๋ก, ์๋ ํ๋ ์ค ๋ธ๋ก๊ทธ ์น ํ์ด์ง ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๋ค๊ณ ์ณ๋, ์น ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ์น์๋ฒ ์ญํ ์ปจํ ์ด๋์ ์น ํ์ด์ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ MySQL ์๋ฒ ์ด 2๊ฐ ์ข ๋ฅ์ ์ปจํ ์ด๋๊ฐ ๋์์ ๋์ํด์ผ ํ๋ค.
์์ ๊ฐ์ ์ํฉ์์ ๊ทธ๋์์ ์ฐ๋ฆฌ๋ ๊ฐ๊ฐ์ ์ปจํ ์ด๋๋ง๋ค ์์ ์คํ์์ผ์ฃผ๊ณ ์ ๋์ํ๋์ง ํ ์คํธ๋ฅผ ํด๋ณด์์ผ๋ง ํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ ๊ตฌํํ๋ ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด 5๊ฐ, 10๊ฐ, ๋ ๋์๊ฐ 10๊ฐ ์ด์ ์ข ๋ฅ์ ์ปจํ ์ด๋๋ค ๊ฐ์ ๋์์ผ๋ก ์ด๋ฃจ์ด์ง๋ค๊ณ ํ๋ค๋ฉด ๊ทธ ๋๋ง๋ค ์ผ์ผ์ด ์ปจํ ์ด๋๋ฅผ ํ๋์ฉ ์คํ์์ผ์ฃผ๊ณ ํ ์คํธํ๋ ๊ฒ์ ์ฌ๊ฐ ๊ท์ฐฎ์ ์์ ์ด ์๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋์ปค ์ปดํฌ์ฆ๊ฐ ๋ฑ์ฅํ๋ค. ๋ค์ ๋งํด, ๋์ปค ์ปดํฌ์ฆ๋ ์ปจํ ์ด๋๋ฅผ ์ด์ฉํ ์๋น์ค์ ๊ฐ๋ฐ๊ณผ CI(Continuous Integration, ์ง์์ ํตํฉ)๋ฅผ ์ํ ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ํ๋์ ํ๋ก์ ํธ๋ก์ ๋ค๋ฃฐ ์ ์๋ ์์ ํ๊ฒฝ์ ์ ๊ณตํ๋ค. ๊ตฌ์ฒด์ ์ผ๋ก, ๋์ปค ์ปดํฌ์ฆ๋ ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋ ์ต์ ๊ณผ ํ๊ฒฝ์ ๋ฏธ๋ฆฌ ์ ์ํด ๋์ ํ์ผ(์ด์ ์ ๋ฐฐ์ ๋ Dockerfile ์ฒ๋ผ)์ ์ฝ์ด์ ์ปจํ ์ด๋๋ฅผ ์์ฐจ์ ์ผ๋ก ์์ฑํ์ฌ ์คํ์ํจ๋ค. ์ฌ์ง์ด ์ปจํ ์ด๋ ์คํ ์์ ๋ฟ๋ง ์๋๋ผ ๊ฐ ์ปจํ ์ด๋์ ์์กด์ฑ, ๋คํธ์ํฌ, ๋ณผ๋ฅจ ๋ฑ ์ฐ๋ฆฌ๊ฐ ์ปจํ ์ด๋ ๋ค๋ฃจ๊ธฐ ํฌ์คํ ์์ ๋ฐฐ์ ๋ ์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฅ๋ค๋ ๋ฏธ๋ฆฌ ์ ์ํ ์ ์๋ค. ๋ํ ๋์ปค ์ปดํฌ์ฆ๋ ๋ฏธ๋ฆฌ ์ ์ํด ๋์ ํ์ผ ์์ ํน์ ์๋น์ค์ ์ญํ ์ ํ ์ปจํ ์ด๋ ์์ฑ ๊ฐ์๋ฅผ ์ง์ ํ ์๋ ์๊ธฐ ๋๋ฌธ์ ๋์ปค ์ค์์ฒ๋ผ ์ฌ๋ฌ ํธ์คํธ ํ๊ฒฝ์์์ ์ปจํ ์ด๋์ ์๋ฅผ ์ ๋์ ์ผ๋ก ์กฐ์ ํ ์๊ฐ ์์ผ๋ฉฐ, ์ ๊ธฐํ๊ฒ๋ ์์ฑ๋๊ฑฐ๋ ์ญ์ ํ๋ ์ปจํ ์ด๋๋ฅผ ์๋์ผ๋ก ๊ฐ์งํ๋ ์์ ๋ฐ๊ฒฌ(Service Discovery)๋ ์ํํ๋ค.
์ด ์ ๋๋ฉด ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ฌ์ฉํ ๋งํ ์ด์ ๋ฅผ ์ถฉ๋ถํ ์ฐพ์ ๊ฒ ๊ฐ๋ค. ์ด์ ๋์ปค ์ปดํฌ์ฆ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ฐฐ์๋ณด๋๋ก ํ์.
2. ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ฌ์ฉํด๋ณด์
๋ง์ฝ ์ฌ์ฉํ๊ณ ์๋ OS๊ฐ ๋ฆฌ๋ ์ค๋ผ๊ณ ํ๋ค๋ฉด ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ง์ ์ค์นํด์ฃผ์ด์ผ ํ๋ค. ์๋์ฐ๋ ๋งฅ์ ๋์ปค ์์ง์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด ๋์ปค ์์ง ์ค์น ์ ๋์ปค ์ปดํฌ์ฆ๊ฐ ์๋์ผ๋ก ์ค์น๋๋ฏ๋ก ๋งฅ์ด๋ ์๋์ฐ์ ๊ฒฝ์ฐ ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํด์ค ํ์๋ ์๋ค. ์ฐธ๊ณ ๋ก ์ฑ ์์๋ ๋์ปค ์ปดํฌ์ฆ 1.11.0 ๋ฒ์ ์ ๊ธฐ์ค์ผ๋ก ํ๋ค. ํ์ฌ ๊ณต์ ๊นํ์ ๊ฐ๋ณด๋ฉด 2.17.3 ๋ฒ์ ๊น์ง ๋์จ ๋ฏ ํ๋ค.
$ curl -L https://github.com/docker/compose/releases/download/1.11.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
์ ์ค์นํ๋ค๋ฉด ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํด์ ๋์ปค ์ปดํฌ์ฆ์ ๋ฒ์ ์ ํ์ธํด๋ณด์.
$ docker-compose -v
๋์ปค ์ปดํฌ์ฆ๋ ์ปจํ ์ด๋๋ค์ ์ค์ ์ด ์ ์๋ YAML ํ์ผ์ ์ฝ์ด์ ๋์ปค ์์ง์ ํตํด ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ฒ ๋๋ค. ์ด ๋ YAML ํ์ผ์ (์ด๋ ํ ์ค์ ๋ ํ์ง ์๋๋ค๋ฉด)๋ฐ๋์ docker-compose.yml ์ด๋ผ๋ ์ด๋ฆ์ ํ์ผ๋ก ์ ์๋์ด ์์ด์ผ ํ๋ค. ์ฐธ๊ณ ๋ก YAML ํ์ผ ์์ฑ ์ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ํ ๋๋ ํญ(Tab)์ ์ฌ์ฉํด์๋ ์๋๋ค. ์๋ํ๋ฉด ๋์ปค ์ปดํฌ์ฆ๊ฐ ํญ์ ์ธ์ํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ํญ ๋์ 2๊ฐ์ ๊ณต๋ฐฑ์ ์ฌ์ฉํด์ ํ์ ํญ๋ชฉ์ ๊ตฌ๋ถํด ํ์ผ ๋ด์ฉ์ ์์ฑํ๋๋ก ํ์.
YAML ํ์ผ์ ๋ณด๊ธฐ ์ ์, ์ด๋ค ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌํํ๋ ค๊ณ ํ๋ ๊ฒ์ธ์ง YAML ํ์ผ ๋์ docker run ๋ช ๋ น์ด๋ก ๋จผ์ ์ดํด๋ณด์.
$ docker run -d \
--name mysql \
alicek106/composetest:mysql \
mysqld
$ docker run -d \
-p 80:80 \
--link mysql:db --name web \
alicek106/composetest:web \
apachectl -DFOREGROUND
์ ๋ด์ฉ์ docker-compose.yml ํ์ผ ํ์์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ์๋์ ๊ฐ๋ค.
version: '3.0'
services:
web:
image: alicek106/composetest:web
ports:
- "80:80"
links:
- mysql:db
command: apachectl -DFOREGROUND
mysql:
image: alicek106/composetest:mysql
command: mysqld
์์ ๊ฐ์ ๋ด์ฉ์ YAML ํ์ผ์ ์์ฑํ๊ณ ํด๋น ํ์ผ์ด ์๋ ๊ฒฝ๋ก์์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์คํ์์ผ๋ณด์.
$ docker-compose up -d
๊ทธ๋ฆฌ๊ณ docker ps ๋ช ๋ น์ด๋ฅผ ์ณ์ ์คํ์ค์ธ ์ปจํ ์ด๋๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด YAML ํ์ผ์์ ์ ํ ์ปจํ ์ด๋ 2๊ฐ๊ฐ ์คํ์ค์ธ ๊ฒ์ ์ ์ ์๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ ์์์ ์ ์ํ YAML ํ์ผ ๋ด์ฉ์ ํค์๋ ์๋ฏธ์ ๋ํด ๊ฐ๋จํ ์์๋ณด๋๋ก ํ์.
ํค์๋ | ์๋ฏธ | ํน์ง |
version | YAML ํ์ผ์ ํฌ๋งท ๋ฒ์ ์ ์๋ฏธ | ๋ฒ์ ์๋ 1.0, 2.0, 3.0 ๋ฑ์ด ์์ผ๋ฉฐ ๋์ปค ์ปดํฌ์ฆ 1.8์ ๋ฒ์ 2.0์, ๋์ปค ์ปดํฌ์ฆ 1.9๋ ๋ฒ์ 2.1์ ์ฌ์ฉ. ํ์ฌ ๋ฒ์ 1.0์ ์ฌ์ฉ๋์ง ์์ |
services | ์์ฑ๋ ์ปจํ ์ด๋๋ฅผ ๋ฌถ์ด๋์ ๋จ์ | ์๋น์ค ํ์ ํญ๋ชฉ๋ค์๋ ์์ฑ๋ ์ปจํ ์ด๋์ ์ ์ฉ์ํฌ ์ฌ๋ฌ๊ฐ์ง ์ต์ , ์ค์ ์ ๋ช ์ |
(์ ์์์์์) web, mysql | ์์ฑ๋ ์๋น์ค์ ์ด๋ฆ | ์ด ํค์๋์ ๋ฐ๋ก ํ์ ํญ๋ชฉ์ ํด๋น ์๋น์ค ์ญํ ์ ํ๋ ์ปจํ ์ด๋๋ค์ ๋ํ ์ค์ ๊ฐ์ ๋ช ์ํ ์ ์์ |
๋ค์์ ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ฌ์ฉํ๋ฉด์ ์์๋์ด์ผ ํ ๊ฐ๋ ๋ค ๋ฐฐ์๋ณด๋๋ก ํ์. ์ฐ์ ์์์ ์ค์ต์ ํ๋ฉด์ ์์ฑ๋ ๋ ์ปจํ ์ด๋์ ์ด๋ฆ์ ํ ๋ฒ ์ดํด๋ณด์. ๋์ปค ์ปดํฌ์ฆ๋ฅผ ํ์ฉํด์ ์์ฑ๋ ์ปจํ ์ด๋๋ค์ด๋ผ๋ฉด ์๋์ ๊ฐ์ ์ด๋ฆ์ผ๋ก ์ปจํ ์ด๋๊ฐ ์์ฑ๋์์ ๊ฒ์ด๋ค.
์ด๋ฆ์ ์ ๋ณด๋ฉด dockercompose_web_1 , dockercompose_mysql_1 ์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์์ฑ๋์๋ค. ์ด๋ฆ์ ์๋์ ๊ฐ์ ํ์์ ๋ฐ๋ฅธ๋ค.
[ํ๋ก์ ํธ ์ด๋ฆ]_[์๋น์ค ์ด๋ฆ]_[์๋น์ค ๋ด ์ปจํ
์ด๋ ๋ฒํธ]
์ฆ, ์ด๋ฆ์ web, mysql ์ด๋ผ๋ ๋จ์ด๋ฅผ ๋ณด๋ฉด, ๋์ปค ์ปดํฌ์ฆ๋ ์์ฑ๋ ์ปจํ ์ด๋๋ค์ ์ด๋ฆ์ ์๋น์ค ๋จ์๋ก ๊ตฌ๋ถํ์ฌ ์๋์์ฑํ๋ค. ๋ํ ์์ dockercompose๋ผ๋ ๋จ์ด๋ ํ์ฌ YAML ํ์ผ์ด ์๋ ๋๋ ํ ๋ฆฌ ์ด๋ฆ์ด๋ค. ์ด๋ฅผ ํ๋ก์ ํธ๋ผ๊ณ ๋ ํ๋ค. ์๋น์ค? ํ๋ก์ ํธ? ์๋ ๋์ปค ์ค์์ผ ๋๋ ์๋น์ค๋ผ๋ ๊ฐ๋ ์ด ์์๋๋ฐ..? ์ ์ ํท๊ฐ๋ฆฌ๊ธฐ ์์ํ๋ค.. ์ด ์ฏค์์ ๋์ปค ์ปดํฌ์ฆ์์์ ์ปจํ ์ด๋ ๊ตฌ๋ถ ๋จ์์ธ ํ๋ก์ ํธ, ์๋น์ค์ ๋ํ ๊ฐ๋ ์ ๋ฐฐ์๋ณด์.
์ฐ์ ์ ์์์์๋ ํ์ฌ web์ด๋ผ๋ ์ปจํ ์ด๋์ mysql ์ด๋ผ๋ ์ปจํ ์ด๋๊ฐ 1๊ฐ์ฉ ์์ฑ๋ ์ํฉ์์ ๊ฐ์ ํ๊ณ ์๋ ๊ทธ๋ฆผ์ ๋ณด์.
์ฐ์ ํ๋ก์ ํธ, ์๋น์ค, ์ปจํ ์ด๋ ์ค ๊ฐ์ฅ ์์(?)๊ฐ๋ ์ด๋ผ๊ณ ํ ์ ์๋ ๊ฒ์ ํ๋ก์ ํธ์ด๋ค. ํ๋ก์ ํธ๋ ์ฌ๋ฌ ๊ฐ์ ์๋น์ค๋ค์ ๋ด๊ณ ์๋ค. ์์์ ํ๋ก์ ํธ์ ์ด๋ฆ์ด DockerCompose ๋ผ๊ณ ๋ช ์๋์ด ์๋ค. ์ ์์์์ ํฐ๋ฏธ๋ ํ๋ฉด์ ๋ณด๋ฉด docker-compose.yaml ํ์ผ์ด ์กด์ฌํ๋ ๋๋ ํ ๋ฆฌ ์ด๋ฆ์ด ๋ฐ๋ก DockerCompose์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์คํํ๊ธฐ ์ํด ์์์ ์ฐ๋ฆฌ๋ docker-compose up -d ๋ผ๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋๋ฐ, ์ด ๋ ์๋ฌด๋ฐ ์ธ์๋ก๋ ํ๋ก์ ํธ ์ด๋ฆ์ ๋ช ์ํด์ฃผ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก docker-compose.yaml ํ์ผ์ด ์๋ ํ์ฌ ๋๋ ํ ๋ฆฌ ๋๋ ๊ทธ ์์์ ๋๋ ํ ๋ฆฌ ์ด๋ฆ์ ํ๋ก์ ํธ ์ด๋ฆ์ผ๋ก ์ค์ ํ๋ค. ์ฌ๊ธฐ์ ์์์ ๋๋ ํ ๋ฆฌ์ฌ๋ ๋์ปค ์ปดํฌ์ฆ๊ฐ ์์์ ์ฐพ๋ ์ ์ด Dockerfile ๋์๋ ์ฐจ์ด์ ์ด ์๋ ๋ฏ ํ๋ค. ๋์ปค ์ปดํฌ์ฆ๋ docker-compose ๋ช ๋ น์ด๋ฅผ ์คํํ ๋, docker-compose.yaml ํ์ผ์ด ๋ฐ๋์ ํ์ ๋๋ ํ ๋ฆฌ์๋ง ์์ผ๋ฉด ์์์ ์ฐพ๋๋ค.
์ด์ ์๋น์ค๋ฅผ ์์๋ณด์. ํ๋์ ์๋น์ค๋ ์ฌ๋ฌ๊ฐ์ ์ปจํ ์ด๋๋ค์ ๋ด๊ณ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์๋น์ค ์์ ๋ด๊ฒจ์๋ ์ปจํ ์ด๋๋ค์ ๋ชจ๋ ๋์ผํ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ ์ปจํ ์ด๋๋ค์ด๋ค. ์ฆ, ์ ์์์์๋ web ์ด๋ผ๋ ์๋น์ค ์ด๋ฆ ๋ด์ ์๋ ์ปจํ ์ด๋๋ค์ ๋ชจ๋ ์น์๋ฒ ์ญํ ๋ง์ ํ๊ณ , mysql ์ด๋ผ๋ ์๋น์ค ์ด๋ฆ ๋ด์ ์๋ ์ปจํ ์ด๋๋ค์ ๋ชจ๋ DB์ญํ ๋ง์ ํ๋ค.
๋ง์ง๋ง์ผ๋ก ์ปจํ ์ด๋์ ๋ํด ์์๋ณด์. ์ปจํ ์ด๋๋ ์ง๊ธ๊น์ง ์ฐ๋ฆฌ๊ฐ ๋ฐฐ์ด ๊ทธ ์ปจํ ์ด๋์ ๊ฐ๋ ์ด ๋ง๋ค. ์ฌ๊ธฐ์๋ ์ปจํ ์ด๋์ ์ด๋ฆ์ ์ฃผ๋ชฉํด๋ณด์. ์ ๊ทธ๋ฆผ์์๋ ์ปจํ ์ด๋ ์ด๋ฆ์ด dockercompose_web_1 ์ด๋ผ๊ณ ๋์ด ์๋ค. ์ด์ ์ถ์ธกํ ์ ์๋ค์ํผ ์์ dockercompose ๋ผ๋ ๋จ์ด๋ ํ๋ก์ ํธ์ ์ด๋ฆ(ํ๋ก์ ํธ ์ด๋ฆ์ ๋๋ฌธ์๊ฐ ๋ค์ด๊ฐ๊ธด ํ์ง๋ง ๋ชจ๋ ์๋ฌธ์ํ๋์ด์ ์ปจํ ์ด๋ ์ด๋ฆ์ ๋ถ์)์ด๋ฉฐ ๊ทธ๋ฆฌ๊ณ web ์ ์๋น์ค์ ์ด๋ฆ์ด๋ค. ๋ง์ง๋ง์ 1 ์ด๋ผ๋ ๋ฒํธ๋ ํด๋น ์๋น์ค ๋ด์ ์์ฑ๋ ์ปจํ ์ด๋์ ๋ฒํธ์ด๋ค. ์์์ ๋นจ๊ฐ์ ์ ์ ๋ค๋ชจ์นธ์ผ๋ก ๋๋ฌ์ผ ์ปจํ ์ด๋ 2๊ฐ๊ฐ ์๋๋ฐ, ์ด๋ ์๋น์ค ๋ด์์ ์ปจํ ์ด๋๊ฐ ์ฌ๋ฌ๊ฐ ์์ฑ๋ ์ ์์์ ์๋ฏธํ๋ค. ๊ทธ๋์ ๋ง์ฝ ์ปจํ ์ด๋๊ฐ 2๊ฐ ์ถ๊ฐ์ ์ผ๋ก ์์ฑ๋๋ฉด ๊ฐ ์ปจํ ์ด๋์ ์ด๋ฆ์ dockercompose_web_2, dockercompose_web_3 ๊ฐ ๋๊ฒ ๋ค. ์ฐธ๊ณ ๋ก ๋์ปค ์ค์ ๋์ฒ๋ผ docker-compose ๋ช ๋ น์ด๋ก๋ ์ปจํ ์ด๋์ ์ซ์๋ฅผ ๋๋ฆฌ๊ฑฐ๋ ์ค์ผ ์๋ ์๋ค.
$ docker-compose scale [์๋น์ค]=[์ปจํ
์ด๋์ซ์]
$ docker-compose sacle web=3
docker-compose ๊ด๋ จ ๋ช ๋ น์ด์ ๋ํด์ ์ถ๊ฐ์ ์ผ๋ก ์์๋ณผ ๊ฒ 2๊ฐ์ง ์๋ค. ์ฐ์ ์ ์์์ yaml ํ์ผ๋ก ๋ช ์ํ ๊ฒ์ ์ด 2๊ฐ ์ข ๋ฅ์ ์๋น์ค๋ฅผ ์์ฑํ๋ผ๊ณ ๋์ด ์์ง๋ง, docker-compose ๋ช ๋ น์ด๋ก ํน์ ์๋น์ค๋ง ์์ฑํ ์ ์๋๋ก ํ ์ ๋ ์๋ค.
$ docker-compose up -d [์๋น์ค]
$ docker-compose up -d mysql
๋ ๋ฒ์งธ๋ก๋ docker-compose ๋ช ๋ น์ด๋ ๋จ์ํ docker ๋ช ๋ น์ด์ฒ๋ผ run ์ ๋ถ์ฌ ํน์ ์๋น์ค์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ ์ ๋ ์๋ค. ํน์ง์ ์ธํฐ๋ ํฐ๋ธ ์ ธ๋ก ๋ค์ด๊ฐ๊ธฐ ์ํด ๋จ์ docker ๋ช ๋ น์ด์๋ ๋ฌ๋ฆฌ -it ์ต์ ์ ๋ถ์ด์ฃผ์ง ์์๋ ๋๋ค.
$ docker-compose run [SERVICE] [COMMAND]
$ docker-compose run web /bin/bash
์ด์ ๋์ปค ์ปดํฌ์ฆ๋ก ์์ฑ๋ ํ๋ก์ ํธ๋ฅผ ์ญ์ ํด๋ณด์. ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค. ๋จ, ํ๋ก์ ํธ๋ฅผ ์ญ์ ํ๋ค๋ฉด ํด๋น ํ๋ก์ ํธ์ ์๋น์ค ๋ด์ ๋ชจ๋ ์ปจํ ์ด๋๋ค์ด ๋ชจ๋ ์ ์ง๋ ํ ์ญ์ ๋จ์ ์์๋์.
$ docker-compose down
$ docker-compose down -p [PROJECT]
๊ธฐ๋ณธ์ ์ผ๋ก docker-compose down ๋ช ๋ น์ด๋ ๋ช ๋ น์ด๋ฅผ ์คํํ ๋์ ํ์ฌ ๋๋ ํ ๋ฆฌ๋ฅผ ํ๋ก์ ํธ๋ก ๊ฐ์ฃผํ๊ณ ํ๋ก์ ํธ๋ฅผ ์ญ์ ํ๋ค. ํ์ง๋ง -p(--project-name) ์ต์ ์ ๋ฃ์ด์ฃผ์ด ์์ฑํ๊ฑฐ๋ ์ญ์ ํ ํน์ ํ๋ก์ ํธ๋ฅผ ๋ช ์ํด์ค ์ ์๋ค. ์ด๋ ๊ฒ -p ์ต์ ์ ์ ํ์ฉํ๋ฉด ์๋ก ๋ค๋ฅธ docker-compose.yaml ํ์ผ์ ๊ฐ๋ ์๋ก ๋ค๋ฅธ ํ๋ก์ ํธ๋ค ์ค ๋ด๊ฐ ์์ฑํ๊ณ ์ญ์ ํ๊ณ ์ถ์ ํน์ ํ๋ก์ ํธ๋ฅผ ์ ์ดํ ์ ์๋ค. ๋ํ Dockerfile ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก -f(--file) ์ต์ ์ ์ฌ์ฉํ์ฌ docker-compose.yaml ํ์ผ์ด ์กด์ฌํ๋ ๊ฒฝ๋ก๋ฅผ ๋ช ์ํด์ค ์๋ ์๋ค.
3. ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ ๋๋ก ํ์ฉํด๋ณด๊ธฐ
์ด์ ๋์ปค ์ปดํฌ์ฆ์ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ์ ์ตํ๋ณด์๋ค. ์ด๋ฒ ๋ชฉ์ฐจ์์ ๋ถํฐ๋ ์ค์ ํ๊ฒฝ ๋๋ ์ค๋ฌด์์ ์์ฃผ ์ฌ์ฉ๋ ๋ฒํ ๋์ปค ์ปดํฌ์ฆ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ฐฐ์๋ณด๋๋ก ํ์. ํฌ๊ฒ 2๊ฐ์ง ์ธก๋ฉด์์ ๋ฐฐ์๋ณผ ์์ ์ธ๋ฐ, ์ฐ์ ์ฒซ ๋ฒ์งธ๋ YAML ํ์ผ์ ์ข ๋ ๋ค์ํ ์ต์ ๊ฐ์ ์ค์ ํ๋ ๋ฒ, ๋ ๋ฒ์งธ๋ ๋์ปค ์ปดํฌ์ฆ ์์ฒด๋ฅผ ์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ด๋ค.
3-1. YAML ํ์ผ์ ์ข ๋ ์์ฐจ๊ฒ ์์ฑํ๊ธฐ
YAML ํ์ผ์์ ๋ช ์ํ๋ ์ฌ๋ฌ๊ฐ์ง ์ต์ ๋ค์ ๋จ์ง docker run ๋ช ๋ น์ด๋ก ์ปจํ ์ด๋์ ์ค์ ํ๋ ๋ช ๋ น์ด๋ค์ YAML ํ์ผ์ ์ฎ๊ฒจ ์ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. YAML ํ์ผ์ ํฌ๊ฒ YAML ํ์ผ์ ํฌ๋งท ๋ฒ์ ์ ์, ์๋น์ค ์ ์, ๋ณผ๋ฅจ ์ ์, ๋คํธ์ํฌ ์ ์ ์ด 4๊ฐ์ง ํญ๋ชฉ์ผ๋ก ๊ตฌ์ฑ๋๋ค. ๊ทธ ์ค ๊ฐ์ฅ ์์ฃผ ์์ฑํ๋ ๋ถ๋ถ์ ์๋น์ค ์ ์ ๋ถ๋ถ์ด๋ค.
3-1-1. ๋ฒ์ ์ ์
์ฌ๊ธฐ์์ ๋ฒ์ ์ด๋ผ ํจ์ YAML ํ์ผ์ ํฌ๋งท ๋ฒ์ ์ด๋ค. YAML ํ์ผ์ ํฌ๋งท์ ๋์ปค ์ปดํฌ์ฆ ๋ฒ์ ๊ณผ ํธํ์ด ๋๋ ๊ฒ์ด ์๊ณ ์๋ ๊ฒ์ด ์๋ค. ๋ฐ๋ผ์ ์ฌ์ฉํ๋ ๋์ปค ์ปดํฌ์ฆ ๋ฒ์ ๊ณผ ํธํ์ด ๋๋ YAML ํ์ผ์ ํฌ๋งท ๋ฒ์ ์ ์ ์ ํ ์ค์ ํด์ฃผ์ด์ผ ํ ํ์๊ฐ ์๋ค.
# docker-compose.yaml
version: '3.0'
3-1-2. ์๋น์ค ์ ์
๋์ปค ์ปดํฌ์ฆ๊ฐ ์์ฑํ ์๋น์ค ๋ด์ ์ปจํ ์ด๋๋ค์ ๋ํ ์ต์ ์ ์ ์ํด์ผ ํ๋ค. ์ต์ ์ ์๋น์ค ๋จ์๋ก ๊ตฌ๋ถํ์ฌ ์ค์ ํด์ฃผ์ด์ผ ํ๋ค. ์๋ํ๋ฉด ํ๋์ ์๋น์ค ๋ด์ ์๋ ๋ชจ๋ ์ปจํ ์ด๋๋ค์ ๋์ผํ ์ด๋ฏธ์ง ์ฆ, ๋์ผํ ์ญํ ๊ณผ ์ค์ ๊ฐ์ ๊ฐ๊ณ ์์ด์ผ๋ง ํ๊ธฐ ๋๋ฌธ์ด๋ค. ํญ๋ชฉ ํ๋์ฉ ์ดํด๋ณด์.
๋จผ์ image์ด๋ค. image ํญ๋ชฉ์ ์๋น์ค ๋ด์ ์ปจํ ์ด๋๋ค์ ์์ฑํ ๋ ๊ธฐ๋ฐ์ด ๋๋ ์ด๋ฏธ์ง์ด๋ค. ์ด๋ฏธ์ง ์ด๋ฆ ํฌ๋งท์ docker๊ฐ ์ ๋์ด๋ก ๋ถ๋ ๋ช ๋ น์ด๋ฅผ ํ์ฉํ ๋์ ๋์ผํ๊ฒ ๋ช ์ํ๋ฉด ๋๋ค. ์์๋ ์๋์ ๊ฐ๋ค.
# docker-compose.yaml
version: '3.0'
services:
web:
image: httpd:latest
mysql:
image: mysql:latest
๋ค์์ links ํญ๋ชฉ์ด๋ค. ์ด์ ์ ์ปจํ ์ด๋ ๋ค๋ฃจ๊ธฐ ํฌ์คํ ์์ ๋ฐฐ์ด --link ์ต์ ๊ณผ ๊ฐ๋ค. ๊ทธ ๋ ๋น์ --link ์ต์ ์ ์ฌ์ฉํด์ ์ด๋ฏธ ์คํ ์ค์ธ ๋ค๋ฅธ ์ปจํ ์ด๋๋ฅผ ํน์ ํ ๋ณ์นญ(alias)๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค๊ณ ๋ฐฐ์ ๋ค. ํ์์ [SERVICE]:[alias] ๋ก ์ ์ํ๋ค.
# docker-compose.yaml
version: '3.0'
services:
web:
image: httpd:latest
links:
mysql:db # mysql ์๋น์ค๋ฅผ `db`๋ผ๋ ๋ณ์นญ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅ
mysql:
image: mysql:latest
์ฐธ๊ณ ๋ก links ์ต์ ์ ์์ ๊ฐ์ด ์ด๋ฏธ ์คํ ์ค์ธ ์ปจํ ์ด๋์ ๋ํ ๋ณ์นญ์ ๋ช ์ํ๊ธฐ ๋๋ฌธ์ ์๋ฌต์ ์ผ๋ก ์ปจํ ์ด๋๋ค ๊ฐ์ ์คํ ์์ ์ฆ, ์์กด์ฑ ๊ด๊ณ๋ฅผ ์ ์ํด์ฃผ๊ธฐ๋ ํ๋ค.
๋ค์์ environment ํญ๋ชฉ์ด๋ค. docker ์ ๋์ด ๋ช ๋ น์ด์์ -e ์ต์ ์ ์ค ๊ฒ๊ณผ ๊ฐ๋ค. YAML ํ์ผ์์๋ ๋ฐฐ์ด ํํ ๋๋ ๋์ ๋๋ฆฌ ํํ๋ก ๋ช ์๊ฐ ๊ฐ๋ฅํ๋ค.(๋ง์ฝ YAML ํ์ผ์์์ ๋ฐฐ์ด์ด ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๋ฉด ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ์. ์ค๋ช ์ด ์ ๋์ด ์๋ค)
# docker-compose.yaml
version: '3.0'
services:
web:
image: httpd:lates
links:
mysql:db
mysql:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=1234
- MYSQL_DATABASE_NAME=zedd_db
(๋๋)
environment:
MYSQL_ROOT_PASSWORD : 1234
MYSQL_DATABASE_NAME : zedd_db
๋ค์์ command ํญ๋ชฉ์ด๋ค. ์ด๋ ์ปจํ ์ด๋๊ฐ ์คํ๋ ๋ ์ํํ๋ ๋ช ๋ น์ด ์ค์ ๊ฐ์ด๋ค. docker run ๋ช ๋ น์ด์ ๋ง์ง๋ง ์ธ์์ ๋ช ์ํ๋ ๊ฒ์ฒ๋ผ, ๋๋ Dockerfile ์์์ RUN ๋ช ๋ น์ด์ฒ๋ผ ๋ฐฐ์ด ํํ๋ก ๋ช ์ํด์ฃผ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
# docker-compose.yaml
version: '3.0'
services:
web:
image: httpd:lates
links:
mysql:db
command: /bin/bash
(๋๋)
command: [/bin/bash]
mysql:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWROD=1234
- MYSQL_DATABASE_NAME=zedd_db
๋ค์์ depends_on ํญ๋ชฉ์ด๋ค. ์ด๋ ํน์ ์ปจํ ์ด๋์ ์์กด ๊ด๊ณ๋ฅผ ๋ํ๋ธ๋ค. ๋ฐฉ๊ธ ์์์ ์ดํด๋ณด์๋ links ํญ๋ชฉ์ด ํ๋ ์ญํ ์ค ํ๋์ ๋น์ทํ๋ค. ์ฆ, ์ปจํ ์ด๋๋ค ๊ฐ์ ์คํ ์์๋ฅผ ์๋ฏธํ๊ธฐ๋ ํ๋ค. depends_on: ๋ค์ ์๋น์ค ์ด๋ฆ์ ๋ช ์ํ๋ฉด ๋๋๋ฐ, ์ด๋ depends_on ๋ค์ ๋์ค๋ ์๋น์ค ๋ด์ ์ปจํ ์ด๋๋ค์ด ๋จผ์ ์คํ๋์ด์ผ ํจ์ ์๋ฏธํ๋ค. ํ์ง๋ง links ํญ๋ชฉ๋ ๋ง์ฐฌ๊ฐ์ง์ง๋ง depends_on๋ ์ปจํ ์ด๋๋ค ๊ฐ์ ์คํ ์์๋ ๋ช ์ํ์ง๋ง ๋จผ์ ์คํ๋์ด์ผ ํ ์ปจํ ์ด๋๊ฐ ์ ์์ ์ผ๋ก ๋์ํ๊ณ ์๋ ์ํ์ธ์ง๋ฅผ ๋ณด์ฅํ์ง๋ ๋ชปํ๋ค.
์ด๋ฅผ ์๋ฐฉํ๋ ๋ฐฉ๋ฒ์ด ํ ๊ฐ์ง ์๋ค. ์๋ฅผ ๋ค์ด, A์ B๋ผ๋ ์๋น์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์. ๊ทธ๋ฆฌ๊ณ B ์๋น์ค ํญ๋ชฉ์ ์๋์ฒ๋ผ A์ ์์กดํ๋ค๊ณ ํด๋ณด์.
version: '3.0'
services:
A:
image: mysql:latest
B:
image: httpd:latest
depends_on:
A
YAML ํ์ผ ์ ๋ณด๊ฐ ์์ ๊ฐ๋ค๊ณ ํ ๋, ๋ฐฉ๊ธ ๋งํ ๋ฌธ์ ๋ฅผ ์๋ฐฉํ๊ธฐ ์ํด์ B ์๋น์ค ํญ๋ชฉ์ ํน์ ์ ธ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํด์ฃผ๋ ๋ช ๋ น์ด๋ฅผ entrypoint ํญ๋ชฉ์ ๋ฃ์ด์ฃผ์. ์ฌ๊ธฐ์ entrypoint ํญ๋ชฉ์ Dockerfile์์ ๋ฐฐ์ด ENTRYPOINT์ ๋์ผํ ์ญํ ์ ํ๋ค. ํด๋น ํญ๋ชฉ์ด ์ถ๊ฐ๋ YAML ํ์ผ ์์๋ ์๋์ ๊ฐ๋ค.
version: '3.0'
services:
A:
image: mysql:latest
B:
image: httpd:latest
depends_on:
A
entrypoint: ./sync.sh
์์์ ๋ช ์ํ sync.sh ์ ธ ์คํฌ๋ฆฝํธ์ ๋ด์ฉ์ ๋์ถฉ ๋ค์๊ณผ ๊ฐ๋ค. ์๋น์ค A ์ปจํ ์ด๋์ ํน์ ๋ช ๋ น์ด(ex. curl ๊ณผ ๊ฐ์)๋ฅผ ๋ ๋ ค์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ ์ ๋์ ๊ฒฐ๊ณผ ๊ฐ์ด ๋ฐํ๋๋ฉด ๊ทธ ๋ ๋ถํฐ A ์๋น์ค์ ์ฐ๊ฒฐํ๋ ์์ ์ ์ํํ๋ ๊ฒ์ด๋ค. sync.sh ์ ธ ์คํฌ๋ฆฝํธ ๋ด์ฉ์ ์ง์ ์์ฑํด์ฃผ์ด์ฌ ํ๋ฉฐ ์ ธ ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ์ด์ฉํด ์์ฑํ๋ฉด ๋๋ค. ์ด์ ๋น์ทํ ๋ฐฉ๋ฒ์ผ๋ก dockerize, wait-for-it.sh ์ ธ ์คํฌ๋ฆฝํธ ๋๊ตฌ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ๋ ์๋ค๊ณ ํ๋ค.
์ฐธ๊ณ ๋ก ์์ ๊ฐ์ด depends_on ํญ๋ชฉ์ด ์์ฑ๋์ด ์๋ ์๋น์ค ๋ด์์ ์์กด์ฑ์ด ์๋ ์ปจํ ์ด๋๋ก ์์ฑํ๋ ค๋ฉด --no-deps ์ต์ ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
$ docker-compose up --no-deps [SERVICE]
$ docker-compose up --no-deps B
๋ค์์ ports ํญ๋ชฉ์ด๋ค. docker ์ ๋์ด ๋ช ๋ น์ด์์์ -p ์ต์ ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ ์ฆ, ๊ฐ๋ฐฉํ ์ปจํ ์ด๋ ํฌํธ๋ฅผ ๋ช ์ํด์ค๋ค. ํฌํธ๋ฅผ ๋ช ์ํด์ฃผ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ์๋์ ๊ฐ์ด ํฌ๊ฒ 3๊ฐ์ง ์ข ๋ฅ๊ฐ ์๋ค.
# docker-compose.yaml
version: '3.0'
services:
web:
image: httpd:latest
ports:
- "8080" # ์ปจํ
์ด๋์ 8080๋ฒ ํฌํธ๋ฅผ ๊ฐ๋ฐฉ
- "8081-8085" # ์ปจํ
์ด๋์ 8081~8085๋ฒ ํฌํธ๋ฅผ ๊ฐ๋ฐฉ
- "80:80" # ํธ์คํธ์ 80๋ฒ ํฌํธ์ ์ปจํ
์ด๋์ 80๋ฒ ํฌํธ๋ฅผ ์๋ก ๊ฐ๋ฐฉํด ํฌํธ ํฌ์๋ฉ
์ YAML ํ์ผ ํ์์์ "80:80" ์ฒ๋ผ ํธ์คํธ์ ํน์ ํฌํธ์ ์ปจํ ์ด๋์ ํน์ ํฌํธ๋ฅผ ์ฐ๊ฒฐํ๋ ํ์์ด ์๋ค. ๋ง์ฝ ์ YAML ํ์ผ ํ์์ ์ฝ์ด๋ค์ฌ์ ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ํํ ํ๊ฒฝ์ด ๋จ์ผ ํธ์คํธ(1๊ฐ์ ๋จธ์ ) ํ๊ฒฝ์ด๋ผ๋ฉด ์ดํ์ ์ปจํ ์ด๋ ์๋ฅผ ๋๋ฆฌ๋(scale) ๊ธฐ๋ฅ์ ์ํํ์ง๋ ๋ชปํ๋ค. ์ด์ ๋ ๊ฐ๋จํ๋ค. ํ๋์ ํธ์คํธ์์ ํ๋์ ํฌํธ๋ฒํธ(ex. 80๋ฒ ํฌํธ)๋ ํ๋์ ์ปจํ ์ด๋๋ง ์ ์ ๋ง ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ค์์ build ํญ๋ชฉ์ด๋ค. build ํญ๋ชฉ์ ์ฌ์ ์ ์ ์ํ Dockerfile์ ๋ช ์ํ์ฌ Dockerfile์ ์ ํ์๋ ๋ด์ฉ์ ๊ธฐ์ค์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์์ฑํ ์ ์๋๋ก ํ ์ ์๋ค. ์ถ๊ฐ์ ์ผ๋ก Dockerfile์์ ์ฝ์ด๋ค์ผ ๋น๋ ์ปจํ ์คํธ ๊ฒฝ๋ก, Dockerfile ํ์ผ ์ด๋ฆ, Dockerfile์ ์ธ์ ๊ฐ์ ์ถ๊ฐํ๋ค๋ฉด ๋๊ฒจ์ค ์ธ์ ๊ฐ์ ์ค์ ํ ์ ์๋ค. ์์๋ ์๋์ ๊ฐ๋ค.
# docker-compose.yaml
version: '3.0'
services:
web:
build: ./dockerfile_path # Dockerfile ํ์ผ์ด ์กด์ฌํ๋ ๊ฒฝ๋ก
context: ./dockerfile_path # ๋น๋ ์ปจํ
์คํธ ๊ฒฝ๋ก
dockerfile: zeddDockerfile # Dockerfile ํ์ผ ์ด๋ฆ
args:
HOST_NAME: web_zedd
HOST_CONFIG: web_config
build ํญ๋ชฉ์์ ์ถ๊ฐ๋ก ์์๋์ด์ผ ํ ์ ์ด ์๋ค. ์์ฒ๋ผ build ํญ๋ชฉ์ ์์ฑํ์ฌ ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ํํด ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋ค์, ์ดํ์ ์ฌ์ฉํ Dockerfile ๋ด์ฉ์ ์ดํ์ ์์ ํ ๋ค ๋ค์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค๊ณ ํด๋ ์ด๋ฏธ์ง๋ฅผ ์๋กญ๊ฒ ๋น๋ํ์ง ์๊ฒ ๋๋ค. ๋ง์ฝ Dockerfile์ ์์ ์ ๊ฐํ๊ณ ๋ ๋ค์ ์ด๋ฏธ์ง๋ฅผ ์๋กญ๊ฒ ๋น๋ํ๋๋ก ํ๋ ค ํ๋ค๋ฉด ์๋์ ๊ฐ์ 2๊ฐ์ง ์ข ๋ฅ์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
$ docker-compose up -d --build # --build ์ต์
์ฌ์ฉ
$ docker-compose build [YAML ํ์ผ์์ ๋น๋ํ ์๋น์ค ์ด๋ฆ]
๋ค์์ extends ํญ๋ชฉ์ด๋ค. extends ํญ๋ชฉ์ ๊ฐ์ YAML ํ์ผ ๋๋ ์๋ก ๋ค๋ฅธ YAML ํ์ผ์์ ์๋น์ค์ ์์ฑ์ ์์๋ฐ๊ฒ ํ ์ ์๋ ์ค์ ์ด๋ค. ์๋ ๊ทธ๋ฆผ ์์๋ฅผ ๋ณด์.
์ ๊ทธ๋ฆผ์ ์๋ก ๋ค๋ฅธ YAML ํ์ผ์์ ์๋น์ค์ ์์ฑ์ ์์๋ฐ๋ ์์๋ค. docker-compose.yaml ์ ์ ์๋ extends ํญ๋ชฉ์ ๋ณด๋ฉด ์์ ๋ฐ์ ์๋น์ค ์ค์ ์ด ๋ค์ด์๋ YAML ํ์ผ ์ด๋ฆ๊ณผ ์์ ๋ฐ์ ์๋น์ค์ ์ด๋ฆ์ ์ ์ด์ฃผ๋ฉด ๋๋ค. ๋ง์ฝ ํ๋์ YAML ํ์ผ ์์์ extends ํญ๋ชฉ์ ์ฌ์ฉํด ์์์ ๋ฐ์ผ๋ ค๋ฉด ์๋ ์์์ฒ๋ผ ๋๋ค.
# docker-compose.yaml
version: '3.0'
services:
web:
extends:
service: extend-web
extend-web:
image: ubuntu:14.04
ports:
- "80:80"
extends ํญ๋ชฉ์ ์ฌ์ฉํ๋ฉด ์ฌ์ ์ ๋ณต์กํ ์ค์ ๊ฐ๋ค๋ก ๋ง๋ค์ด์ง ์๋น์ค์ ์์ฑ์ ํ๋ฒ์ ์์๋ฐ์ YAML ํ์ผ์ ๋ด์ฉ์ ๊ฐ๊ฒฐํ์ํฌ ์๋ ์๋ค. ํ์ง๋ง extends ํญ๋ชฉ์ด ๋ชจ๋ ์ค์ ๊ฐ์ ์์๋ฐ์ ์ ์๋ ๊ฒ์ ์๋๊ณ , ๋ํ์ ์ผ๋ก ์ปจํ ์ด๋ ์ฌ์ด์ ์์กด์ฑ์ ๋ดํฌํ๊ณ ์๋ depends_on, links, volumes_from ๊ณผ ๊ฐ์ ์ค์ ์ด ๋ค์ด์๋ ์๋น์ค๋ ์์๋ฐ์ง ๋ชปํ๋ค๋ ๊ฒ์ ์์๋์.
3-1-3. ๋คํธ์ํฌ ์ ์
์ด๋ฒ ๋ชฉ์ฐจ์์๋ YAML ํ์ผ์์ ์ ์ํ ์ ์๋ ๋์ปค ๋คํธ์ํฌ ํญ๋ชฉ์ ๋ํด ์์๋ณด์. ๋์ปค ๋คํธ์ํฌ์ ๋ํ ๊ฐ๋ ์ ์ด์ ํฌ์คํ ์์ ์์ธํ ๋ค๋ฃจ์์ผ๋ฏ๋ก, ๋คํธ์ํฌ์ ๋ํ ๊ฐ๋ ์ ์๋ตํ๊ฒ ๋ค.
๋จผ์ driver ํญ๋ชฉ์ด๋ค. ๋์ปค ์ปดํฌ์ฆ๋ ํ๋ก์ ํธ ์์ฑ ์, ์์ฑ๋ ์ปจํ ์ด๋์ ์ ์ฉ๋ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๋ก์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ธ๋ฆฌ์ง ํ์ ์ ๋คํธ์ํฌ๋ฅผ ์๋กญ๊ฒ ์์ฑํ๋ค. ํ์ง๋ง ์ฌ์ฉ์๋ YAML ํ์ผ์ driver ํญ๋ชฉ์ ๋ช ์ํจ์ผ๋ก์จ ๋ค๋ฅธ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ ์ ์๋ค. ๋ค๋ฅธ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ ๋ ์ค์ ํ ํ์ ํญ๋ชฉ์ผ๋ก๋ driver_ops ํญ๋ชฉ์ผ๋ก ๋ช ์ํด์ฃผ๋ฉด ๋๋ค.
# docker-compose.yaml
version: '3.0'
services:
myService:
image: nginx
networks:
- mynetwork # ์ฌ์ฉํ ๋ค๋ฅธ ๋คํธ์ํฌ ์ด๋ฆ
networks:
mynetwork:
driver: overlay
driver_opts:
subnet: "255.255.255.0"
IPAdress: "10.0.0.2"
์ ์์์์๋ ๋์ปค ์ค์์์ ์๋ํ ์ ์๋ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ์์ฑํด ์ ์ฉํ ์์๋ค.
๋ค์์ ipam ํญ๋ชฉ์ด๋ค. ipam ์ด๋ IP Address Manager์ ์ค์๋ง๋ก ์ฝ๊ฒ ๋งํ๋ฉด IP ์ฃผ์๋ฅผ ์๋์ผ๋ก ๋ถ์ฌํ๊ณ ์ฝ๊ฒ ์ฐพ์ ์ ์๋๋ก ํด์ฃผ๋ ๊ฒ์ด๋ค. ์ด ipam์ ์ง์ํ๋ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๊ฐ ์๋ ๊ฒฝ์ฐ, ipam ํญ๋ชฉ์ ์ฌ์ฉํด์ ๋ช ์ํ ์๋ ์๋ค.
# docker-compose.yaml
version: '3.0'
services:
web:
image: nginx
networks:
- mynetwork
networks:
mynetwork:
driver: overlay
driver_opts:
subnet: "255.255.255.0"
IPAdress: "10.0.0.2"
ipam:
driver: mydriver # iapm์ ์ง์ํ๋ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ์์ ์ ์
config:
subnet: 172.20.0.0/16
ip_range: 172.20.5.0/24
gateway: 172.20.5.1
๋ค์์ external ํญ๋ชฉ์ด๋ค. ๋ฐฉ๊ธ๊น์ง๋ ๋ชจ๋ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋๋ง๋ค ์๋ก์ด ๋คํธ์ํฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ด์๋ค. ํ์ง๋ง ๊ธฐ์กด์ ์ด๋ฏธ ์์ฑ๋ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์์ ๊ฒ์ด๋ค. ์ด ๋ external ํญ๋ชฉ์ ์ฌ์ฉํ๋ค. networks ํญ๋ชฉ์ ์ฌ์ฉํ ๊ธฐ์กด ๋คํธ์ํฌ์ ์ด๋ฆ์ ๋ช ์ํ๊ณ ๊ทธ ํ์ ํญ๋ชฉ์ external ์ true ๊ฐ์ ์ฃผ๋ฉด ๋๋ค.
# docker-compose.yaml
version: '3.0'
services:
web:
image: nginx
networks:
- existing_network
networks:
existing_network
external: true
3-1-4. ๋ณผ๋ฅจ ์ ์
๋ค์์ ์ปจํ ์ด๋์ ๋ณผ๋ฅจ๊ณผ ๊ด๋ จํ์ฌ ์ค์ ํ๋ ํญ๋ชฉ๋ค์ ๋ํด ์์๋ณด์. ๋จผ์ driver ํญ๋ชฉ์ด๋ค. ๋คํธ์ํฌ๋ ๊ทธ๋ฌ์ง๋ง ๋ณผ๋ฅจ์์๋ ๋๋ผ์ด๋ฒ๊ฐ ์กด์ฌํ๋ค. ์ด๋ ํ ์ค์ ๋ ํ์ง ์์ผ๋ฉด local ์ด๋ผ๋ ๋๋ผ์ด๋ฒ๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ์ง๋ง ์ด๋ฅผ ์ ๋ง์ ๋ง๊ฒ ๋ฐ๊ฟ ์๋ ์๋ค. ๋ณผ๋ฅจ๋ ๋ง์ฐฌ๊ฐ์ง๋ก driver_opts ํญ๋ชฉ์ผ๋ก ๋ณ๋๋ก ์ฌ์ฉํ ๋๋ผ์ด๋ฒ์ ํ์ ์ต์ ์ ์ค์ ํด์ค ์ ์๋ค.
# docker-compose.yaml
version: '3.0'
services:
...(์๋ต)...
volumes:
driver: flocker
driver_opts:
opt: "1"
opt2: 2
๋ค์์ external ํญ๋ชฉ์ด๋ค. ๋ณผ๋ฅจ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋์ปค ์ปดํฌ์ฆ๋ YAML ํ์ผ์ ๋ช ์๋ volume, volumes-from ํญ๋ชฉ์ ๋ณด๊ณ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋๋ง๋ค ์๋ก์ด ๋ณผ๋ฅจ์ ์์ฑํ๋ค. ํ์ง๋ง ๋ณผ๋ฅจ๋ ๋คํธ์ํฌ ์ฒ๋ผ ๊ธฐ์กด์ ์์ฑ๋ ๋ณผ๋ฅจ์ ๊ฐ๋ค ์ฌ์ฉํ ์๋ ์๋ค. ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก external ํญ๋ชฉ์ด๋ค. ์์๋ ์๋์ ๊ฐ๋ค.
version: '3.0'
servcies:
web:
image: nginx
volumes:
- myVolume: /container/path # `myVolume`์ด๋ผ๋ ๊ธฐ์กด์ ๋ณผ๋ฅจ์ ์ปจํ
์ด๋ ๋ด๋ถ์ `/container/path` ๊ฒฝ๋ก์ ๋ง์ดํธ
volumes:
myVolume:
external: true
๋ณผ๋ฅจ๊ณผ ๊ด๋ จ๋ ํญ๋ชฉ์ ์๋์ง๋ง ๋ง์ง๋ง์ผ๋ก ์์๋ณผ ํญ๋ชฉ์ด ์๋ค. ๋ฐ๋ก ์์ฑํ YAML ํ์ผ์ ์คํ๋ ํ์ผ ํฌ๋งท์ด ์ ๋๋ก ๋์ด ์๋์ง ๊ฒ์ฌํ๋ ๊ธฐ๋ฅ์ด๋ค. ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ docker-compose config ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค. ํด๋น ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋น ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ ํ์ฌ ๋๋ ํ ๋ฆฌ ๋๋ ์์ ๋๋ ํ ๋ฆฌ์ docker-compose.yaml ํ์ผ์ ์์์ ์ฐพ์ ๊ฒ์ฌ๋ฅผ ํ๋ค. ๋ฌผ๋ก ์ด๋ ๋ง์ฐฌ๊ฐ์ง๋ก -f ์ต์ ์ ์ฃผ์ด docker-compose.yaml ํ์ผ์ด ์๋ ๊ฒฝ๋ก๋ฅผ ์ง์ ๋ช ์ํด์ค ์๋ ์๋ค.
$ docker-compose config
$ docker-compose -f [YAML PATH] config
3-2. ๋์ปค ์ปดํฌ์ฆ ๋ ์ ์ฌ์ฉํด๋ณด๊ธฐ
์ด๋ฒ์ ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ข ๋ ์ ์ฌ์ฉํด๋ณผ ์ ์๋ ๋ด์ฉ๋ค์ ๋ํด ๋ฐฐ์๋ณด์. ๋ง์ ๊ฑฐ์ฐฝํ ์ ์์ง๋ง.. ๋ฐฐ์ธ ๋ด์ฉ์ 2๊ฐ์ง๋ค. ๋์ปค ์ปดํฌ์ฆ ๋คํธ์ํธ์ ๋ํ ๋ด์ฉ๊ณผ ๋์ปค ์ปดํฌ์ฆ์ ๋์ปค ์ค์ ํจ๊ป ์ฌ์ฉํ๊ธฐ์ด๋ค.
3-2-1. ๋์ปค ์ปดํฌ์ฆ ๋คํธ์ํฌ
[3-1-3. ๋คํธ์ํฌ ์ ์] ํญ๋ชฉ์์ ์ ๊น ๋์ปค ์ปดํฌ์ฆ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ค ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋์ง ์์๋ณด์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ปค ์ปดํฌ์ฆ๋ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋๋ง๋ค ๋ธ๋ฆฌ์ง ํ์ ์ ์๋ก์ด ๋คํธ์ํฌ๋ฅผ ์์ฑํด ์ ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ ์์ฑ๋ ๋คํธ์ํฌ์ ์ด๋ฆ์ [ํ๋ก์ ํธ ์ด๋ฆ]_default ๋ก ์ค์ ์ด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ๋ฅผ ์ญ์ ์ฆ, docker-compose down ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก์ ํธ ๋ด์ ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ ์์ฑํ ๋คํธ์ํฌ๋ ์ญ์ ์ํจ๋ค. docker-compose down ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅ์ํค๊ณ ๋์ค๋ ํ์ค ์ถ๋ ฅ์ "Removing network ... " ๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ๋ณด์ผ ๊ฒ์ด๋ค.
ํ๋ก์ ํธ ์์ฑ ์ ์๋กญ๊ฒ ์์ฑ๋ ๋ธ๋ฆฌ์ง ํ์ ์ ๋คํธ์ํฌ๋ docker-compose scale ๋ช ๋ น์ด๋ก ๋๋ ค์ค ์ปจํ ์ด๋๋ค์ ์ํด์๋ ์ฌ์ฉ์ด ๋๋ค. ์ด๊ฒ์ด ๊ฐ๋ฅํ ์ด์ ๋ ์๋กญ๊ฒ ์ปจํ ์ด๋๊ฐ ์์ฑ๋ ๋ ๋ด๋ถ์ ์ผ๋ก --net-alias ์ต์ ์ ์ฌ์ฉํ์ฌ ์๋น์ค ์ด๋ฆ์ ์ผ์ข ์ ๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ์ค์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. --net-alias ์ต์ ์ ๋ํด์๋ ์ปจํ ์ด๋ ๋ค๋ฃจ๊ธฐ ํฌ์คํ ์์ ๋ฐฐ์ ์ผ๋ฏ๋ก ์์ธํ ์ค๋ช ์ ์๋ตํ๊ฒ ๋ค. ๊ธฐ์ต์ด ๋์ง ์๋๋ค๋ฉด ๋ค์ ๋ณด๊ณ ์ค์.
๊ทธ๋์ ๋์ปค ์ปดํฌ์ฆ์์๋ ํน์ ์๋น์ค์ ์ด๋ฆ์ผ๋ก ํด๋น ์๋น์ค ๋ด์ ๋ชจ๋ ์ปจํ ์ด๋๋ค์ ๋ํด ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ์ด์ ๋ํ ๊ด๊ณ๋ฅผ ๋์ํํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
์์ฒ๋ผ mysql ์ด๋ผ๋ ๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ์ ๊ทผ์ ์์ฒญํ๋ฉด mysql ์๋น์ค ๋ด์ ์ปจํ ์ด๋ ์ค ํ๋์ ์ ๊ทผํ๋๋ก ํ๋ค. ์ด ๋ ์ด๋ค ์ปจํ ์ด๋๋ฅผ ์ ํํ ์ง์ ๋ฐฉ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ผ์ด๋ ๋ก๋น ๋ฐฉ์์ ํํ๋ค. ์ด์ฒ๋ผ ๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ํน์ ์๋น์ค ๋ด์ ๋ชจ๋ ์ปจํ ์ด๋์ ์ ๊ทผํ๋ ๊ฒ์ ์ค์ ๋ชจ๋์์๋ ๊ฐ๋ฅํ๋ค. ๋ฌผ๋ก ๊ตฌ์ฒด์ ์ธ ๋ฐฉ์์ ๋ค๋ฅด๋ค. ์ค์ ๋ชจ๋์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๊ฐ ์์ ๊ฐ์ ์๋ฆฌ๋ฅผ ๊ฐ๋ฅ์ผ ํ๋ค.
3-2-2. ๋์ปค ์ปดํฌ์ฆ + ๋์ปค ์ค์ ์ฌ์ฉํ๊ธฐ
์ด๋ฒ์ ๋์ปค ์ปดํฌ์ฆ๋ฅผ ๋์ปค ์ค์ ๋ชจ๋์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์. ์ฐ์ ์ค์๋ชจ๋๋ฅผ ํ์ฑํ์์ผ์ผ ํ๋๋ฐ, ์ด์ ๋ํ ์์ธํ ๋ฐฉ๋ฒ์ ๋์ปค ์ค์ ํฌ์คํ ์ ์ฐธ์กฐํ๋๋ก ํ์.
๋์ปค ์ปดํฌ์ฆ 1.10 ๋ฒ์ ๋ถํฐ๋ ์ค์ ๋ชจ๋์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ YAML ๋ฒ์ 3์ด ๋ฐฐํฌ๋จ์ ๋ฐ๋ผ ์ค์ ๋ชจ๋์ ๋์ปค ์ปดํฌ์ฆ๋ฅผ ํจ๊ป ์ฌ์ฉํ ๋ ํ์ฉํ๋ ๊ฐ๋ ์ธ ์คํ(stack)์ด ๋์ปค ์์ง 1.13 ๋ฒ์ ๋ถํฐ ์ถ๊ฐ๊ฐ ๋์๋ค. ์ฌ๊ธฐ์ ์คํ์ด๋, YAML ํ์ผ์์ ์์ฑ๋ ์ปจํ ์ด๋๋ค์ ๋ฌถ์์ ์๋ฏธํ๋ฉฐ YAML ํ์ผ์ ํ์ฉํด ์คํ์ ์์ฑํ๊ฒ ๋๋ฉด YAML ํ์ผ์ ์ ์๋ ์๋น์ค๊ฐ ์ค์ ๋ชจ๋์ ํด๋ฌ์คํฐ ์๋ฒ ๋ด์ ์ผ๊ด์ ์ผ๋ก ์์ฑ์ด ๋๋ค. ๋ค์ ๋งํด, YAML ํ์ผ์ ์ ์๋ ์๋น์ค๋ค์ด ์ค์ ๋ชจ๋์์์ ์๋น์ค ๊ฐ๋ ์ผ๋ก ๋ณํ ๋๋ ์ ์ด๋ค.
ํ์ง๋ง ์คํ์ docker-compose๊ฐ ์๋ docker stack ์ด๋ผ๋ ๋ช ๋ น์ด๋ก ์ ์ด๋ฅผ ํด์ผ ํ๋ค. ์๋ฐํ ๋งํ๋ฉด ์คํ์ ๋์ปค ์ปดํฌ์ฆ๊ฐ ์๋ ์ค์ ๋ชจ๋ ํด๋ฌ์คํฐ ๋ด์ ๋งค๋์ ๋ ธ๋์ ์ํด ์์ฑ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ์คํ์ ์์ฑํ๊ณ ์ญ์ ํ๋ ๊ฒ๋ ๋งค๋์ ๋ ธ๋์์๋ง ๊ฐ๋ฅํ๋ค.
์ค์ต์ ํด๋ณด๊ธฐ ์ํด์, ๋์ปค ์ค์ ํฌ์คํ ์์์ฒ๋ผ ๋งค๋์ ๋ ธ๋ 1๊ฐ๋ฅผ ์ํ VM 1๊ฐ, ์์ปค ๋ ธ๋ 2๊ฐ๋ฅผ ์ํ VM 2๊ฐ๋ฅผ ์ค๋นํด๋ณด๋๋ก ํ์. ํ์๋ ์๋์ ๊ฐ์ด ์ค๋นํ์๋ค.
์ด์ ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ค์๊ณผ ํจ๊ป ์ฌ์ฉํ๋๋ก ํ๊ธฐ ์ํ YAML ํ์ผ์ ์๋์ ๊ฐ์ด ์์ฑํด๋ณด์.
version: '3.0'
services:
web:
command: apachectl -DFOREGROUND
image: alicek106/composetest:web
links:
- mysql:db
ports:
- 80:80
mysql:
command: mysqld
image: alicek106/composetest:mysql
networks: {}
volumes: {}
๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ ๋ช ๋ น์ด ํ์์ ์ฌ์ฉํ์ฌ YAMLํ์ผ์ ์คํ์ผ๋ก ๋ณํ์ํค์.
$ docker stack deploy --config-file [YAML PATH] [์์ฑํ STACK ์ด๋ฆ]
$ docker stack deploy --config-file ./docker-compose.yaml zedd_stack
์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ํ์ค ์ถ๋ ฅ์ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ์ค์ "Ignoring unsupported options: links" ๋ผ๊ณ ๋ฐ์ํ๋๋ฐ, ์ด๋ ์ปจํ ์ด๋ ๊ฐ์ ์์กด์ฑ ๊ด๊ณ๋ฅผ ์ ์ํ๋ links, depneds_on๊ณผ ๊ฐ์ ํญ๋ชฉ์ ์ค์์์๋ ์ฌ์ฉํ ์ ์์์ ์๋ฏธํ๋ค. ์๋ํ๋ฉด ํด๋น ํญ๋ชฉ๋ค์ ์ฌ์ฉํ๋ ค๋ฉด ์๋ก ๋ค๋ฅธ ์ญํ ์ ํ๋ ์ปจํ ์ด๋๋ค(์ ์์์์๋ web, mysql ๊ฐ ์๋น์ค ๋ด์ ์ปจํ ์ด๋)์ด ๊ฐ์ ํธ์คํธ์ ์กด์ฌํ๋ ํ๊ฒฝ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ถ๊ฐ์ ์ผ๋ก, ์คํ์ ์ ์ดํ๋ ๊ด๋ จ ๋ช ๋ น์ด ์ข ๋ฅ๋ก๋ ์๋์ ๊ฐ๋ค.
๋ช ๋ น์ด | ์๋ฏธ |
docker stack ls | ์์ฑํ ์คํ ์ ๋ณด ์ถ๋ ฅ |
docker stack ps [STACK] | ํน์ ์คํ์ผ๋ก ์์ฑํ ์๋น์ค ๋ด์ ์กด์ฌํ๋ ์ปจํ ์ด๋ ์ ๋ณด ์ถ๋ ฅ |
docker stack services [STACK] | ์คํ์ผ๋ก ์์ฑ๋ ์๋น์ค ์ ๋ณด ์ถ๋ ฅ |
docker stack rm [STACK] | ํน์ ์คํ์ผ๋ก ์์ฑ๋ ์๋น์ค๋ฅผ ์ญ์ |
์ด๋ ๊ฒ ์ค์ ๋ชจ๋์์ ์ฌ์ฉํ ์ ์๋ ๋์ปค ์ปดํฌ์ฆ๋ฅผ ํ์ฉํด ์๋น์ค๋ฅผ ์์ฑํด๋ณด์๋ค. ๋ง์ฝ ํน์ ์๋น์ค ๋ด์ ์ปจํ ์ด๋๋ฅผ ๋๋ฆฌ๊ฑฐ๋ ์ค์ผ ๊ฒฝ์ฐ, ๋์ปค ์ปดํฌ์ฆ ๊ด๋ จ ๋ช ๋ น์ด๊ฐ ์๋ ์ค์ ๊ด๋ จ ๋ช ๋ น์ด์ธ docker service scale ๊ด๋ จ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ์๋ํ๋ฉด ์คํ์ ๋์ปค ์ปดํฌ์ฆ๊ฐ ์๋๋ผ ์ค์ ํท์ด๋ผ๋ ๊ฒ์ ์ํด ์์ฑ๋์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ค์์ ์คํ ๋คํธ์ํฌ์ ๋ํด ์ ์ ์์๋ณด์. ์์์ ์คํ์ ํ์ฉํด ์๋น์ค๋ฅผ ์์ฑํ ๋ ํ์ค ์ถ๋ ฅ์ ๋ณด๋ฉด ์คํ์ ์ํ ๋คํธ์ํฌ๋ฅผ ์์ฑํ ๊ฒ์ ์ ์๊ฐ ์๋ค.
์ด์ฒ๋ผ ์คํ์ ์ํ ๋คํธ์ํฌ๊ฐ ์กด์ฌํ๋๋ฐ, ์คํ์ ๋คํธ์ํฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ ์์ฑ์ ๊ฐ์ง๊ฒ ๋๋ค. ๊ฐ์ธ์ ์ธ ์๊ฐ์ผ๋ก๋ ์คํ์ด ๋์ปค ์ค์์์ ๋์ํ๊ธฐ ๋๋ฌธ์ ์ค์์ด ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด์ง ์์๊น๋ ์ถ์ธกํ๋ค. ๊ทธ๋ฆฌ๊ณ ์คํ ๋คํธ์ํฌ๋ ์ค์ ๋ก ์ค์ ํด๋ฌ์คํฐ์๋ง ์ฌ์ฉํ ์ ์๋ ๋คํธ์ํฌ ์ฆ, SCOPE ํญ๋ชฉ์ด swarm ์ด๋ผ๋ ํค์๋๋ก ๋์ด ์๋ค.
ํ์ง๋ง ์คํ ๋คํธ์ํฌ๊ฐ ์ค์ ๋ชจ๋ ๋ด์์ ์ฌ์ฉํ๋, ๊ตฌ์ฒด์ ์ผ๋ก๋ ์ฌ์ฉ์๊ฐ ์ ์ํด ์ฌ์ฉํ๋ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋์ ์ฝ๊ฐ ์ฐจ์ด๊ฐ ์๋ค. ์ด์ ํฌ์คํ ์์ ๋ฐฐ์ ๋ฏ์ด, ์ฌ์ฉ์๊ฐ ์ ์ํด ์ฌ์ฉํ๋ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ ์์ฑ ์ --attachable ์ต์ ์ ์ฌ์ฉํ๋ค๋ฉด ์ค์ ๋ช ๋ น์ด๊ฐ ์๋ ์ผ๋ฐ์ ์ธ docker run ๊ด๋ จ ๋ช ๋ น์ด๋ก ์ปจํ ์ด๋๋ฅผ ์์ฑํ ๋ ํด๋น ์ปจํ ์ด๋๊ฐ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ฒ ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฌ๋ ์คํ ๋คํธ์ํฌ๋ ์ ์ด์ --attachable ์ต์ ์ด ์ค์ ๋์ด์ ์์ฑ๋์ง ์๊ธฐ ๋๋ฌธ์ docker run ๊ด๋ จ ๋ช ๋ น์ด๋ก ์์ฑ๋๋ ์ปจํ ์ด๋์๊ฒ ์คํ ๋คํธ์ํฌ๋ฅผ ์ ์ฉ์ํฌ ์๊ฐ ์๋ค.
์ด๋ ๊ฒ ํด์ ์ฑ ์ ๋์ปค์ ๊ด๋ จ๋ ๋ชฉ์ฐจ ๋ด์ฉ์ ๋ชจ๋ ๋์ด ๋ฌ๋ค. ์ด์ ์ ๋์ปค๋ฅผ ์๊ฒ๋๋ง ๋ฐฐ์ ์ง๋ง ์ด๋ฒ ๊ธฐํ๋ฅผ ํตํด ๋๋ฆ๋๋ก์ ๋์ปค์ ํํํ ๊ธฐ์ด๋ฅผ ์์ ์ ์์๋ค. ์ด์ ๋ค์ ์ฑํฐ๋ถํฐ๋ ๋๋ง์ ์ฟ ๋ฒ๋คํฐ์ค์ด๋ค. ์ฟ ๋ฒ๋คํฐ์ค๋ ์ฐ๋ฆฌ๊ฐ ์ด์ ์ ๋ฐฐ์ด ๋์ปค ์ค์์ ์ญํ ๊ณผ ๋น์ทํ๋ค๊ณ ๋ณผ ์ ์๋ค. ํ์ฌ ์ค์ ํ๊ฒฝ์์ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋ ํด๋ก์์ ์ฟ ๋ฒ๋คํฐ์ค์ ๋ํด์๋ ๊ธฐ์ด๋ถํฐ ํํํ ๋ฐฐ์๋ณด๋๋ก ํ์!
'Container > Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker] ์ฌ๋ฌ ํธ์คํธ์ ๋์ปค๋ฅผ ๊ด๋ฆฌํ์, Docker Swarm (2) | 2023.05.11 |
---|---|
[Docker] ์๋ฒ๋ก์์ ์ญํ , Docker Daemon (0) | 2023.04.19 |
[Docker] ๋์ปค ์ด๋ฏธ์ง ๋ค๋ฃจ์ด๋ณด๊ธฐ, ๊ทธ๋ฆฌ๊ณ Dockerfile (4) | 2023.04.05 |
[Docker] ๋์ปค ์ปจํ ์ด๋ ๋ค๋ฃจ์ด๋ณด๊ธฐ (1) | 2023.03.07 |
[Docker] ๋์ปค๋, ๊ทธ๋ฆฌ๊ณ ๋์ปค ์์ง์ ์ด๋ฏธ์ง์ ์ปจํ ์ด๋ (4) | 2023.02.15 |