ํด๋ฌ์คํฐ์์๋ docker-compose up์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
๋์์ด ๊ฐ๋ฅํ๋๋ก ์
ํ
์คํฌ๋ผ ํ ๊ฐ์ ์ฝ๋ฉ
์์ธ ํ์ต ๋ด์ฉ
ํด๋ฌ์คํฐ์์ docker-compose up ํค์๋๋ฅผ ์
๋ ฅํ๋ฉด ๋ฐ๋ก ์ ํ๋ฆฌ์ผ์ด์
์๋์ด ๊ฐ๋ฅํด์ผํ๋ค.
๊ทธ๋ฐ๋ฐ ์ผ์ ์ ํด๋ฌ์คํฐ์์ docker-compose up ์ ์
๋ ฅํ์ ๋ ์ ์์๋ํ์ง ์์๋ค๋ ๋ด์ฉ์ ๊ณต์ ๋ฐ๊ณ , ๊ณผ์ ์ ์ถ ์ ์ ํด๊ฒฐํด์ผํ๋ค๊ณ ํ๋จํ๋ค.
์ ๋
18์๊ฐ ๋์๊ณ ํด๋ฌ์คํฐ๊น์ง 1์๊ฐ ๊ฐ๋ ๊ฑธ๋ฆฌ์ง๋ง, ํ์ ์ํด ์ง์ ํด๋ฌ์คํฐ๋ก ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค!
๋ฌธ์ ) ํด๋ฌ์คํฐ goinfre ๋๋ ํ ๋ฆฌ์์ git clone ๋ฐ์ ์ ํ๋ฆฌ์ผ์ด์
์ Mounts denied ๋ฌธ์ ๋ก ์ ๋๋ก ์๋ํ์ง ์๋๋ค.
ํด๊ฒฐ) Resources>File sharing์ ์ ์๋ ๊ฒฝ๋ก์์ git clone ๋ฐ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ์๋์ํจ๋ค.
ํ์ฌ ์ฐ๋ฆฌ ํ๋ก์ ํธ๋ git clone ์ ๋ฐ์ ๋ค clone ๋ฐ์ ๋๋ ํ ๋ฆฌ์ ์์นํ tmp/db ๋ฅผ postsqlDB์ mount ์ํจ๋ค. ์ด ๋ File sharing์ ๋ฑ๋ก๋ ๊ฒฝ๋ก์ ํ์ ๊ฒฝ๋ก์ ์์นํ docker contianer ๋ง์ด bind mounted ๋ ์ ์๋ค.
๋ฌธ์ ๋ goinfre ๋๋ ํ ๋ฆฌ ์์ฒด๊ฐ ํด๋ฌ์คํฐ ๋ง์คํฐ ๊ณ์ ์ด ์๋๋ฉด ๊ถํ์ ๋ง์๋๋ก ๋ฐ๊ฟ ์ ์๋ ๋๋ ํ ๋ฆฌ์ด๊ณ , File sharing์ ๋ฑ๋กํด๋ ์ ์ฉ๋์ง ์๋ ๊ฒ์ด๋ค.
goinfre ์ธ ๋๋ ํ ๋ฆฌ์์๋ ์ฉ๋์ด ๊ทธ๋ฆฌ ๋ง์ง ์์ง๋ง, ๊ทธ๋ฅ /User ๊ฒฝ๋ก์์ git cloneํ์!
๋ฌธ์ ) ์ต์ด ๊ตฌ๋์์๋ DB ์กด์ฌ ์ ๋ฌด์ ๋ฐ๋ผ rake db:seed๋ฅผ ์คํ์์ผ์ผํ๋ค.
ํด๊ฒฐ) custom rake command๋ฅผ ์์ฑํ์ฌ DB์์ connection์ ๊ฒ์ฌํ๊ณ rake db:seed๋ฅผ ์คํ์ํค๋๋ก ์์ ํ์๋ค.
์๋๋ ๊ด๋ จ PR ๋ด์ฉ
entrypoint.sh์ custom rake๋ฅผ ์์ฑํ์ฌ ์ถ๊ฐํ์ต๋๋ค.
rake db:connection_exists : web container๊ฐ DB์ connection์ด ์๋์ง๋ฅผ ํ์ธํฉ๋๋ค.
rake db:is_first_time: web_container์ rake db:seed๊ฐ ์คํ๋ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค. rake db:seed๊ฐ ์คํ๋์๋ค๋ฉด ์ ์ด๋ web_owner ์ ์ ๊ฐ 1๋ช
์ ์์ด์ผํ๋ฏ๋ก User.find(1)๋ก ํ์ธํฉ๋๋ค.
์ custom rake ๋ค๋ก ํ๋จ๋๋ ์ํ์ ๋ฐ๋ผ rake db:migrate๋ rake db:seed๋ฅผ ์คํํฉ๋๋ค.
ํํธ ๊ธฐ์กด์๋ ์ฐ๋ฆฌ .gitignore์ DB์ ๋ณผ๋ฅจ์ผ๋ก ์ฐ์ด๋ /tmp/db ๋๋ ํ ๋ฆฌ๊ฐ ํฌํจ๋์ด์์ด์, ๋จ์ํ github์ clone ๋ฐ์ผ๋ฉด /tmp/db ๋๋ ํ ๋ฆฌ๊ฐ ์์ฑ๋์ง ์์์ต๋๋ค. ๋๋ฌธ์ ์ด ์ํ์์ docker-compose up์ ์
๋ ฅํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ์์ต๋๋ค. --> entrypoint์์ /tmp/db ๋๋ ํ ๋ฆฌ ์กด์ฌ์ฌ๋ถ์ ๋ฐ๋ผ /tmp/db ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑ๋๋ก ์์ ํ์ฌ ํด๊ฒฐํ์ต๋๋ค.
๋ฌธ์ ) tournament schedular๊ฐ rake ๋ช
๋ น์ด๋ฅผ ์คํํ ๋๋ง๋ค ์คํ๋๋ฉฐ, job queue์ ์ถ๊ฐ๋๋ค.
ํด๊ฒฐ) ์๋์ฒ๋ผ ๋ช
๋ น์ด๋ฅผ ๊ฒ์ฌํ์ฌ rake ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ฉด ์คํ๋์ง ์๋๋ก ์ฒ๋ฆฌํ๋ค.
์์ธ์ initializer ๋๋ ํ ๋ฆฌ์ tournament reschedule ๋ฉ์๋๋ฅผ ์คํ์ํค๋ ํ์ผ์ด ํฌํจ๋์ด์๊ณ , rake ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ ๋๋ ์ด ํ์ผ๋ค์ด ๋ชจ๋ ์คํ๋๋ ๊ฒ์ด ์์ธ์ด์๋ค. ์๋์ฒ๋ผ ๋ช
๋ น์ด๋ฅผ ๊ฒ์ฌํ๋ ์กฐ๊ฑด์ ์ฝ์
ํ์ฌ rails s ๋ก ์๋ฒ๋ฅผ ์๋์ํฌ ๋๋ง ๋ฉ์๋๊ฐ ์๋ํ๋๋ก ์์ ํ์๋ค.
์๋๋ docker-compose ๊ฐ๋
์ ํ์ธํ๋ฉฐ ๊ฐ๋ณ๊ฒ ๋ฉ๋ชจํ ๋ด์ฉ.
Compose is a tool for defining and running multi-container Docker applications.
๊ณผ์ ์ ์๋์ ๊ฐ๋ค.
Dockerfile์ ์ฑ ํ๊ฒฝ์ ์ ์ํ๋ค.
docker-compose.yml์ ์ฑ ๋น๋ํ๋ ๋์์ ์ ์ํ๋ค.
docker-compose up ์ปค๋งจ๋๋ก ์ฑ์ ๋น๋ํ๋ค.
docker-compose.yml
buildํ ์ง, ์๋๋ฉด ๋์ปคํ๋ธ์ ์๋ image๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ ํํ ์ ์๋ค.
๋ง์ฝ networks ์ต์
์ ์ฃผ์ง ์์ผ๋ฉด ํ๋์ ๋ด๋ถ compose ๋ด์์ ๋คํธ์ํฌ๋ก ๊ตฌ์ฑ์ด ๋์ด์์ด์ ํต์ ์ ํ ์ ์๋ค.
๋ง์ฝ compose๋ก ๋ค๋ฅธ compose์ ์ดํ๋ฆฌ์ผ์ด์
DB๋ฅผ ์ฐ๊ฒฐํ๊ณ ์ถ๋ค๋ฉด, network ๋ฅผ ์ ์ํด์ผ ํ๋ค.
์ฌ๊ธฐ ์ฐ์ด๋ ๊ฒฝ๋ก๋ docker-compose.yml ํ์ผ์ด ์์นํ๋ ๊ณณ ๊ธฐ์ค์ด๋ค.
Dockerfile์์ ์ ๊ทผ์ ์์ ๊ฒฝ๋ก์๋ ์ ๊ทผ์ด ์๋๋ค. ํ์ ๊ฒฝ๋ก์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
production.yml
docker-compose down --volumes ์ปค๋งจ๋๋ก ๋ณผ๋ฅจ์ ํฌํจํด์ ๋ฐ์ดํฐ ๋ณผ๋ฅจ์ ์ญ์ ํ ์ ์๋ค.
์ปดํฌ์ฆ์ ๊ธฐ๋ฅ์ ์๋ ์ํฉ์์ ํจ๊ณผ์ ์ด๋ค.
์ฑ๊ธํธ์คํธ ํ๊ฒฝ์ ์ฌ๋ฌ๊ฐ ๊ตฌ์ฑํ ๋
์ปจํ
์ด๋ ๋ง๋ค ๋ ๋ณผ๋ฅจ๋ฐ์ดํฐ๋ฅผ ์ค๋นํ๋ ๊ฒฝ์ฐ
old container์ ๋ณผ๋ฅจ์ ๊ฐ์งํ๋ฉด, new container์ ๋ณผ๋ฅจ์ ๋ณต์ฌํ๋ค.
์ปจํ
์ด๋๊ฐ ๋ณ๊ฒฝ๋์์ ๋๋ง ์ปจํ
์ด๋๋ฅผ ์ฌ๊ตฌ์ฑํ ๊ฒฝ์ฐ
Docker-compose getting start
Docker-compose use case
https://docs.docker.com/storage/bind-mounts/
Custom task with rake
rake๋ ๊ทธ๋ฅ ruby scripts๋ฅผ ์ธ ์ ์๊ฒ ๋์์ฃผ๋ ํด์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
ํ์ต ๋ด์ฉ์ ๋ํ ๊ฐ์ธ์ ์ธ ์ดํ
๋ฆ์ ์๊ฐ์ ํด๋ฌ์คํฐ์ ๊ฐ๊ธฐ ๋ง์ด ๊ท์ฐฎ์์ง๋ง, ์์ผ๋ก๋ฅผ ์ํด ๋นจ๋ฆฌ ์ฒ๋ฆฌํด๋ ํ์๊ฐ ์๋ task์๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ท์ฐฎ์์ ๋ฌด๋ฆ
์ด ๋๋ถ์ ๋ฐ๋์ ๋ง์ ํด๊ฒฐํ์ฌ ํ์ ๊ธฐ์ฌํ์์ผ๋ ๋ฟ๋ฏํ๋ค.
๊ทธ๋ฆฌ๊ณ docker ์ ๋ํด ์ข ๋ ํ์ตํ ์ ์์ด์ ์ญ์ ๋ฟ๋ฏํ๋ค.
๋ค์ ํ์ต ๊ณํ