- Docker ๋?
- Docker์ ๊ตฌ์กฐ(image, deamon, container)
- Docker๋ฅผ ์ด์ฉํด django project ๋ฅผ CI/CD ํ๋ ๊ทธ๋ฆผ
Docker๋ container ๊ฐ์ํ ๊ธฐ์ ์ด์ ํ์ฌ๋ช ์ด๋ค.
Docker๋ container ๊ฐ์ํ ์คํ ํ๊ฒฝ์์ application ๋ฐฐํฌ ์์ง์ ๋ํด ๊ฐ๋ฐ์์ code๋ฅผ ์ธ์ ์ด๋์๋ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๊ฒ ์คํ์ํฌ ์ ์๋ ๊ธฐ์ ์ ์ ๊ณตํ๋ค.๊ฐ์ํ ๊ธฐ์ ์ด๋?
์ฐ๋ฆฌ๊ฐ ์ด์ํด์ผ ํ๋ Service๊ฐ ๋ค์ํ๋ฐ ์ด๋ฅผ ํ๋์ ๊ณ ์ฑ๋ฅ Device์์ ๋ชจ๋ ์ด์ํ ์ ์๋ค๋ฉด ๋น์ฉ์ ์ฝ์ ํจ๊ณผ๊ฐ ์์ ๊ฒ์ด๋ค. ์ด๋ฅผ ์ํด ๊ฐ Service๊ฐ ์๋ก ์ถฉ๋์์ด ์ด์๋ ์ ์๋๋ก ๊ณต๊ฐ์ ํ ๋น ํด์ฃผ์ด์ผ ํ๋ฉฐ ์ฌ๊ธฐ์ ์ด์์ ํ์ํ ํ๊ฒฝ์ ์ค์นํ ์ ์์ด์ผ ํ๋ค. ๋ํ์ ์ธ ๊ฐ์ํ ๊ธฐ์ ์ Hypervisor, Docker ๋ ๊ฐ์ง๊ฐ ์๋ค.
Hypervisor ๊ฐ์ํ ๊ธฐ์ ์ ๊ฐ์ OSํ๊ฒฝ์ ์์ฑ, ๊ฐ Service๊ฐ ๋ ์์ ์ธ OS ํ๊ฒฝ์ ํ ๋น๋ฐ๋ ๋ฐฉ๋ฒ์ด๋ค.
Docker ๊ฐ์ํ ๊ธฐ์ ์ OS keneral ์์ User space๋ฅผ ํ ๋น๋ฐ๋ ๋ฐฉ๋ฒ์ด๋ค.๋ ๋ฐฉ์์ ๋น๊ตํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค
- Hypervisor
- (์ฅ์ ) ํ๋์ Device์์ ๋ค์ํ OS platform ์ ์ฌ์ฉํ ์ ์๋ค.
- (์ฅ์ ) ๊ฐ์์ ์ผ๋ก ์๋ฒฝํ ๋ถ๋ฆฌ๋ OS์์ ์ด์๋๋ฏ๋ก ๋ฌผ๋ฆฌ์ ์๋ฒ์ resource ๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅ.
- (๋จ์ ) ๊ธฐ์ ์ ์ผ๋ก ๋ฌด๊ฒ๋ค. booting ์๊ฐ์ด ๊ธธ์ด์ง๋ฉฐ resource๋ฅผ ๋ง์ด ์ฐจ์งํ๋ค.
- Docker
- (์ฅ์ ) Hypervisor ๊ฐ์ํ์๋ ๋ฌ๋ฆฌ OS ์ปค๋ ์์ ์ ์ ๊ณต๊ฐ์์ ์คํ๋์ด ๋ณด๋ค ๊ฐ๋ณ๊ณ ๋น ๋ฅด๋ฉฐ ์ฝ๊ฒ ๋ ๋ฆฝ์ ์ธ ๊ฐ์ํ๊ฒฝ์ ์คํํ ์ ์๋ค.
- (๋จ์ ) ํ๋์ OS์์ ์ ์ ๊ณต๊ฐ์ ํ ๋นํ๋ ๋ฐฉ์์ด๋ฏ๋ก ์ด์์ฒด์ ๊ฐ ์ ํ ํ๋ฆฌ๋ host์์๋ ์คํ์ํฌ ์ ์๋ค.
- (๋จ์ ) ๋ถ๋ฆฌ๋ OS๊ฐ ์๋๋ฏ๋ก ๋ณด์์ ์ทจ์ฝํ๋ค.
Docker client : Server๋ก ๋ช ๋ น์ ์ ๋ฌํ๋ ์ฃผ์ฒด
Docker image : ์คํ๋ Service์ code์ ํ๊ฒฝ์ด ๋ค์ด์๋ ํ์
Docker deamon : Docker image ์คํ๊ธฐ(Docker engine ๋๋ Server)
Docker container : deamon์ ์ํด ์คํ๋ image์ ๊ฒฐ๊ณผ๋ฌผ(process)์นด์ธํธ์ ๋น๊ตํ์๋ฉด Docker image๋ ์นด์ธํธ Tape, Docker deamon์ ์นด์ธํธ Player, Docker container๋ ์นด์ธํธ๊ฐ ์คํ๋์ด ๋์ค๋ ์์ ์ด๋ค.
Docker client๋ ์นด์ธํธ ํ ์ดํ ์ค๋น ๋ฐ Play๋ฅผ ๋ช ๋ นํ๋ ์ฌ์ฉ์์ด๋ค.
Docker container๋ ํ๋์ process๋ก process๊ฐ ์ข ๋ฃ๋๋ฉด container๋ ์ค์ง๋๋ค.
AWS์ Service ๋ฐฐํฌ ๋ฅผ ํตํด ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๊ฐ ๋ง๋ Service๋ฅผ AWS ์์ ์์ ์ด์ํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ๋ค.
์ด ๊ณผ์ ์ ์ ์ฐจ๋ ์๋์ ๊ฐ๋ค.
- EC2์ ๊ฐ์ํ๊ฒฝ ์ด์์ ์ํด miniconda ์ค์น
- ๊ฐ์ํ๊ฒฝ ์์ฑ
- git clone ์ผ๋ก Service source ๋ฐ๊ธฐ
- requirements.txt ์ด์ฉํ์ฌ pip package ์ค์น
- runserver ๋ช ๋ น์ผ๋ก Service ๊ธฐ๋
์ ๋ฐฉ์์ผ๋ก ์ด์์ ๋ฌธ์ ๊ฐ ์์๋ค. ํ์ง๋ง ๊ฐ๋ฐ์ ์ ์ฅ์์ EC2์์ Service ์ด์์ ํ์ํ ์ฌ์ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ณผ์ ์ด ๋ถํธํ๋ค. ์ข ๋ ์๋ํ ํ ์ ์์๊น?
Docker๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ค์ ์ ์ฐจ๋ก ์งํํ ์ ์๋ค.
- Docker๋ฅผ ์ค์นํ๋ค.
- Docker image๋ฅผ DockerHub์์ ๋ค์ด๋ฐ๋๋ค.
- Docker image๋ฅผ run ํ๋ค.
Docker ์์ฒด๊ฐ ๊ฐ์ํ ๊ธฐ์ ์ด๋ฏ๋ก ์ฐ๋ฆฌ๋ miniconda ๊ฐ์ ๊ฐ์ํ๊ฒฝ ์ค์น ์ ์ฐจ๊ฐ ํ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ image๋ฅผ ๋ฐ์ ์คํํ๋ ๊ฒ์ด๋ฏ๋ก source code๋ฅผ AWS ์์ ๊ฐ์ ธ๋ค ๋์ ํ์๊ฐ ์๋ค.
(์ด์์ค์ธ Service์ ์ง์ ์ ์ธ ์์ ๋ฐ git ์ ์ฉ ๋ถ๊ฐ)
๋ํ runserver๋ฅผ ํตํ ์คํ์ด ํ์์๋ค.
(runserver๋ Service test๋ฅผ ์ํด ํ์ํ ๋ฟ ์ ์ ๋ฐฐํฌ์์๋ gunicorn ์ ์ด์ฉํ Service ์คํ์ ํด์ผ ํ๋ค)์ด๋ฌํ ์ ์ฐจ๋ฅผ ํตํด feature ์ถ๊ฐ ๋๋ Hotfix๋ฑ์ ๋ฌธ์ ๋ local์์ ์ผ๊ด์ฒ๋ฆฌ(์ ์ฉ, test)ํ๊ณ ์๋ฃ๋ ์ต์ข ๋ณธ์ Docker image๋ก ์์ฑํ์ฌ Version์ tagging ํ์ฌ ๋ฐฐํฌํ๋ฉด ๋๋จธ์ง๋ host server์์ ์ต์ ๋ณธ์ ๋ฐ์ ์คํ๋ง ํ๋ฉด ๋๋ค.
๋ค์ Post์์๋ Docker๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๋ค.