-
Notifications
You must be signed in to change notification settings - Fork 0
๐ฆDocker์ ๊ฐ๋ ๊ณผ ์ฌ์ฉ ๋ฐฉ๋ฒ
- ๊ฐ์
- Docker๋?
- Docker Compose๋?
- Step 1 - Docker ์ค์นํ๊ธฐ
- Step 2 - Docker ๊ทธ๋ฃน์ ์ฌ์ฉ์ ์ถ๊ฐํ๊ธฐ
- Step 3 - Docker Compose ์ค์นํ๊ธฐ
-
Step 4 - Docker ๋ช
๋ น์ด ์ฌ์ฉํ๊ธฐ
- ์ด๋ฏธ์ง ๊ฒ์ - docker search
- ์ด๋ฏธ์ง ๋ค์ด๋ก๋ - docker pull
- ์ด๋ฏธ์ง ๋ชฉ๋ก ํ์ธ - docker images
- ์ด๋ฏธ์ง ์ญ์ - docker rmi
- ์ด๋ฏธ์ง ๋น๋ - docker build
- ์ปจํ ์ด๋ ์คํ - docker run
- ์ปจํ ์ด๋ ๋ชฉ๋ก ํ์ธ - docker ps
- ์ปจํ ์ด๋ ์ ์ง - docker stop
- ์ปจํ ์ด๋ ์ฌ์์ - docker restart
- ์ปจํ ์ด๋ ์ญ์ - docker rm
- ์ปจํ ์ด๋ ๋ก๊ทธ ํ์ธ - docker logs
- Step 4 - Docker Compose ๋ช ๋ น์ด ์ฌ์ฉํ๊ธฐ
- Step 5 - Docker ์ด๋ฏธ์ง ๋น๋ํ๊ธฐ
- Step 6 - ์ปจํ ์ด๋ ์คํํ๊ธฐ
- ์ฐธ๊ณ ์๋ฃ
์ด๋ฒ ๊ธ์์๋ Docker์ ๋ํด ์ค๋ช ํ๊ฒ ์ต๋๋ค.
Docker
๋ ์ปจํ
์ด๋ ๊ธฐ๋ฐ์ ๊ฐ์ํ ๊ธฐ์ ๋ก, ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๊ทธ ํ๊ฒฝ์ ์ด๋ฏธ์ง(Image)
๋ผ๋ ๋จ์๋ก ํจํค์ง๋ฅผ ๋ง๋ค์ด ์ผ๊ด์ ์ผ๋ก ์คํํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ํ์ํ ๋ชจ๋ ์ข
์์ฑ์ ํฌํจํ๋ ํจํค์ง๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ํจํค์ง๋ ๊ฐ๋ฐ ํ๊ฒฝ, ํ
์คํธ ํ๊ฒฝ, ๋ฐฐํฌ ํ๊ฒฝ ์ด๋์๋ ์ผ๊ด์ ์ผ๋ก ์คํ๋๋ฏ๋ก ๋ฐฐํฌ ํ๊ฒฝ๊ณผ ๊ฐ๋ฐ ํ๊ฒฝ ๊ฐ์ ์ฐจ์ด๋ก ์ธํ ๋ฌธ์ ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
Docker์ ์ฃผ์ ๊ฐ๋ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
์ด๋ฏธ์ง(Image)
์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ทธ ํ๊ฒฝ์ ์คํํ๊ธฐ ์ํ ๋ชจ๋ ์ค์ , ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ฝ๋ ๋ฑ์ ํฌํจํ๋ ์ผ์ข ์ ํ ํ๋ฆฟ์ ๋๋ค. ์ด๋ฏธ์ง๋ ๋ถ๋ณ(Immutable)ํ์ฌ ์์ ๋์ง ์์ผ๋ฉฐ,
Dockerfile
์ด๋ผ๋ ์ค์ ํ์ผ์ ํตํด ์ ์๋ฉ๋๋ค. ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์คํํ ์ ์์ต๋๋ค. -
์ปจํ ์ด๋(Container)
์ด๋ฏธ์ง๋ฅผ ์คํํ ์ํ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ํ๋ ๋ ๋ฆฝ์ ์ธ ํ๊ฒฝ์ ๋๋ค. ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ํ๋์ ํธ์คํธ์์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํํ ์ ์์ผ๋ฉฐ, ์๋ก ๊ฐ์ญ ์์ด ์๋ํฉ๋๋ค. ์ปจํ ์ด๋๋ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๊ฒ ์์ฑ ๋ฐ ์ญ์ ํ ์ ์์ผ๋ฉฐ, ์์คํ ์์์ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
-
Dockerfile
์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ค์ ํ์ผ๋ก, ํน์ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ๋ฐ ํ์ํ ๋ช ๋ น์ด๋ฅผ ์ ์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์ผ๊ด๋ ํ๊ฒฝ์ ์๋์ผ๋ก ๊ตฌ์ถํ ์ ์์ต๋๋ค.
-
Docker Hub
Docker ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๊ณ ๊ณต์ ํ ์ ์๋ Registry๋ก, ๊ณต์ ์ด๋ฏธ์ง๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ด ๋ง๋ค์ด ๊ณต์ ํ ์ด๋ฏธ์ง๋ค์ ๋ค์ด๋ก๋ํ๊ฑฐ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด
docker pull node
๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉดNode.js
๊ณต์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
Docker์ ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
์ผ๊ด์ฑ
๊ฐ๋ฐ, ํ ์คํธ, ๋ฐฐํฌ ํ๊ฒฝ์์ ๋์ผํ ํ๊ฒฝ์ ์ ์งํ์ฌ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
-
๋น ๋ฅธ ๋ฐฐํฌ์ ํ์ฅ์ฑ
์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ํ์ฅํ๊ณ ๋น ๋ฅด๊ฒ ๋ฐฐํฌํ ์ ์์ผ๋ฏ๋ก DevOps์ CI/CD ํ์ดํ๋ผ์ธ์์ ์ ์ฉํฉ๋๋ค.
-
๊ฒฝ๋์ฑ
์ด์ ์ฒด์ ์ ์ฒด๋ฅผ ๊ฐ์ํํ๋
VM(Virtual Machine, ๊ฐ์ ๋จธ์ )
๊ณผ ๋ค๋ฅด๊ฒ, Docker๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํ์ํ ์ข ์์ฑ๋ง์ ํฌํจํ๋ ๊ฐ๋ฒผ์ด ํ๊ฒฝ์ ์ ๊ณตํจ์ผ๋ก์จ VM๋ณด๋ค ๊ฐ๋ณ๊ณ , ์์์ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ด ์ฑ๋ฅ์ด ์ฐ์ํฉ๋๋ค. -
์ ์ฐ์ฑ
Docker ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ๊ตฌ๋ํ ์ ์์ผ๋ฉฐ, ๊ฐ ์ปจํ ์ด๋๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๋ฏ๋ก ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ก๊ฒ ๋ถ๋ฆฌํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
Docker Compose
๋ ์ฌ๋ฌ Docker ์ปจํ
์ด๋๋ฅผ ์ฝ๊ฒ ์ ์ํ๊ณ ํจ๊ป ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ๋๊ตฌ์
๋๋ค. Docker Compose๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ์ปจํ
์ด๋๊ฐ ํ์ํ ์ ํ๋ฆฌ์ผ์ด์
์ค์ ์ YAML ํ์ผ๋ก ์ ์ํ๊ณ , ํ ๋ฒ์ ๋ช
๋ น์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์ฒด๋ฅผ ์คํํ ์ ์์ต๋๋ค.
Docker Compose๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒฝ์ฐ๋ ๋ณต์์ ์ปจํ
์ด๋๋ฅผ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ์
๋๋ค. ์๋ฅผ ๋ค์ด, ์น ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํจ๊ป ํ์ํ ์ ํ๋ฆฌ์ผ์ด์
์์ ์น ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ๊ฐ์ ๋ณ๋์ ์ปจํ
์ด๋๋ก ๊ตฌ์ฑํ๊ณ ์คํํ๋ ๊ฒฝ์ฐ, Docker Compose๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ ์ปจํ
์ด๋ ๊ฐ ํต์ ์ ์ํ ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ถํ๊ณ ๊ฐ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ docker run
๋ช
๋ น์ด๋ก ์คํํด์ผ ํฉ๋๋ค. ๋ฐ๋ฉด์ Docker Compose๋ฅผ ์ฌ์ฉํ๋ฉด docker-compose.yml
ํ์ผ์ ์๋น์ค(์ปจํ
์ด๋), ๋คํธ์ํฌ, ๋ณผ๋ฅจ ๋ฑ์ ์ค์ ์ ์ ์ํ๊ณ , docker compose up
๋ช
๋ น์ด ํ๋๋ก ํ์ํ ๋ชจ๋ ์ปจํ
์ด๋๋ฅผ ํ ๋ฒ์ ์คํํ ์ ์์ต๋๋ค.
Docker Compose์ ์ฃผ์ ๊ฐ๋ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
์๋น์ค(Services)
๊ฐ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ๊ตฌ์ฑํ๋ ๋ถ๋ถ์ ์๋ฏธํฉ๋๋ค.
-
๋คํธ์ํฌ(Networks)
์๋น์ค๋ค๊ฐ์ ํต์ ์ ์ ์ํ๋ ๊ฐ์ ๋คํธ์ํฌ๋ฅผ ์๋ฏธํฉ๋๋ค. ๊ฐ ์ปจํ ์ด๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ์ ์๊ธฐ ๋๋ฌธ์, ๋ช ์์ ์ผ๋ก ๋คํธ์ํฌ๋ฅผ ์ค์ ํ๋ฉด ์๋ก ์ฝ๊ฒ ํต์ ํ ์ ์์ต๋๋ค.
-
๋ณผ๋ฅจ(Volumns)
๋ฐ์ดํฐ ์์์ฑ์ ์ํด ํธ์คํธ ์์คํ ๊ณผ ์ปจํ ์ด๋ ๊ฐ์ ํ์ผ ์์คํ ์ ๊ณต์ ํ๋ ๊ณต๊ฐ์ ์๋ฏธํฉ๋๋ค. ๋ณผ๋ฅจ์ ์ค์ ํ๋ฉด ์ปจํ ์ด๋๊ฐ ์ค์ง๋๊ฑฐ๋ ์ญ์ ๋๋๋ผ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ง๋ฉ๋๋ค.
๋จผ์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ Docker๋ฅผ ์ค์นํฉ๋๋ค.
curl -fsSL https://get.docker.com | sh
Docker๊ฐ ์ ์ค์น๋์๋์ง ๋ค์ ๋ช ๋ ์ด๋ฅผ ์ ๋ ฅํด์ Docker ๋ฒ์ ์ ํ์ธํฉ๋๋ค.
docker -v
sudo systemctl status docker
Docker ๋ช
๋ น์ด๋ ํญ์ root ๊ถํ์ผ๋ก ์คํํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ผ๋ฐ ๊ณ์ ์์ Docker ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ ๋ ํญ์ sudo
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
sudo
๋ฅผ ์
๋ ฅํ์ง ์๊ณ Docker ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ฌ์ฉ์ ๊ณ์ ์ Docker ๊ทธ๋ฃน์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ๋ค์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ Docker ๊ทธ๋ฃน์ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
sudo usermod -aG docker $USER
์ดํ Docker ๊ทธ๋ฃน ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๊ธฐ ์ํด ์์คํ ์ ์ฌ๋ถํ ํฉ๋๋ค.
sudo reboot now
์ฌ๋ถํ ์ดํ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ Docker ๊ทธ๋ฃน์ ์ถ๊ฐ๋์๋์ง ํ์ธํฉ๋๋ค.
groups $USER
๋จผ์ /usr/local/bin/docker-compose
๊ฐ ์์คํ
๊ฒฝ๋ก์ ์๋์ง ํ์ธํฉ๋๋ค. ์๋ ๊ฒฝ์ฐ /usr/local/bin
๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ ํ ์๋ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์์ฑํฉ๋๋ค.
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ Docker Compose๋ฅผ ์ค์นํฉ๋๋ค.
sudo curl -SL "https://github.com/docker/compose/releases/download/latest/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
์ดํ Docker Compose ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ์คํ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.
sudo chmod +x /usr/local/bin/docker-compose
Docker Compose๊ฐ ์ ์ค์น๋์๋์ง ๋ค์ ๋ช ๋ ์ด๋ฅผ ์ ๋ ฅํด์ Docker Compose ๋ฒ์ ์ ํ์ธํฉ๋๋ค.
docker compose --version
์๋์ ๋ช ๋ น์ด๋ ๋ชจ๋ Step 2 - Docker ๊ทธ๋ฃน์ ์ฌ์ฉ์ ์ถ๊ฐํ๊ธฐ ๊ณผ์ ์ ๊ฑฐ์ณค๋ค๊ณ ๊ฐ์ ํ ์ํ๋ก ์์ฑ๋์์ต๋๋ค.
docker search
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ Docker Hub
์์ ์ด๋ฏธ์ง๋ฅผ ๊ฒ์ํ ์ ์์ต๋๋ค. ์๋ ์์๋ node ๊ด๋ จ ์ด๋ฏธ์ง๋ฅผ ๊ฒ์ํ ์์์
๋๋ค.
docker search node
docker pull [์ด๋ฏธ์ง ์ด๋ฆ]
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ Docker Hub์์ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. ์๋ ์์๋ node.js
๊ณต์ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋๋ฐ๋ ์์์
๋๋ค.
docker pull node
docker images
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ ๋ก์ปฌ์ ์ ์ฅ๋ ๋ชจ๋ ์ด๋ฏธ์ง ๋ชฉ๋ก์ ํ์ธํ ์ ์์ต๋๋ค.
docker images
docker rmi [์ด๋ฏธ์ง ์ด๋ฆ]
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ ํน์ ์ด๋ฏธ์ง๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค.
docker rmi node
docker build -t [์ด๋ฏธ์ง ์ด๋ฆ] .
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ Dockerfile์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ์ ์์ต๋๋ค. ์๋ ์์๋ ํ์ฌ ๋๋ ํ ๋ฆฌ์ ์๋ Dockerfile๋ก my-app
์ด๋ผ๋ ์ด๋ฆ์ ์ต์ ํ๊ทธ๋ฅผ ๊ฐ์ง ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ์์์
๋๋ค.
docker build -t my-app:latest .
docker run [์ต์
] [์ด๋ฏธ์ง ์ด๋ฆ]
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ ํน์ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ
์ด๋๋ฅผ ์์ฑํ๊ณ ์คํํ ์ ์์ต๋๋ค. ์๋ ์์๋ openvidu/openviud-dev:2.30.0
์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ
์ด๋๋ฅผ ์์ฑํ๊ณ ์คํํ๋ ์์์
๋๋ค.
docker run -p 4443:4443 --rm -e OPENVIDU_SECRET=MY_SECRET openvidu/openvidu-dev:2.30.0
์ปจํ ์ด๋ ์คํ ์ ์ฌ์ฉํ ์ ์๋ ์ฃผ์ ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ต์ | ์ค๋ช |
---|---|
-d |
๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํํ๋ ์ต์ ์ ๋๋ค. (Detached ๋ชจ๋) |
-p [ํธ์คํธ ํฌํธ]:[์ปจํ
์ด๋ ํฌํธ] |
ํธ์คํธ์ ์ปจํ ์ด๋์ ํฌํธ๋ฅผ ๋งคํํฉ๋๋ค. |
--rm |
์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋๋ฉด ์๋์ผ๋ก ์ญ์ ๋๋๋ก ์ค์ ํ๋ ์ต์ ์ ๋๋ค. ๊ฐ๋ฐ ๋ฐ ํ ์คํธ ํ๊ฒฝ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ ์ต์ ์ ๋๋ค. |
--restart always |
์ปจํ ์ด๋๊ฐ ์ค๋จ๋์์ ๋ ์๋์ผ๋ก ์ฌ์์ํฉ๋๋ค. ์๋น์ค๊ฐ ์์ ์ ์ผ๋ก ์ ์ง๋์ด์ผ ํ๋ ๋ฐฐํฌ ํ๊ฒฝ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ ์ต์ ์ ๋๋ค. |
--restart unless-stopped |
์๋์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์ค์งํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ํด์ ์๋์ผ๋ก ์ฌ์์ํฉ๋๋ค. |
--name |
์ปจํ ์ด๋์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. |
-e [ํ๊ฒฝ ๋ณ์ ์ด๋ฆ]:[ํ๊ฒฝ ๋ณ์ ๊ฐ] |
์ปจํ ์ด๋์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ๋ ์ต์ ์ ๋๋ค. |
-v [ํธ์คํธ ๋๋ ํ ๋ฆฌ]:[์ปจํ
์ด๋ ๋๋ ํ ๋ฆฌ] |
ํธ์คํธ์ ์ปจํ ์ด๋์ ๋๋ ํ ๋ฆฌ๋ฅผ ๋งคํํฉ๋๋ค. (๋ณผ๋ฅจ) |
docker ps
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ ํ์ฌ ์คํ ์ค์ธ ์ปจํ
์ด๋ ๋ชฉ๋ก์ ํ์ธํ ์ ์์ต๋๋ค. -a
์ต์
์ ์ฌ์ฉํ๋ฉด ์ ์ง๋ ์ปจํ
์ด๋๋ ํ์ธํ ์ ์์ต๋๋ค.
docker ps
docker stop [์ปจํ
์ด๋ ์ด๋ฆ]
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ ์คํ ์ค์ธ ํน์ ์ปจํ
์ด๋๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
docker stop my-app:latest
๋ชจ๋ ์ปจํ ์ด๋๋ฅผ ์ ์งํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํฉ๋๋ค.
docker stop $(docker ps -a -q)
docker restart [์ปจํ
์ด๋ ์ด๋ฆ]
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ ์ ์ง๋ ์ปจํ
์ด๋๋ฅผ ์ฌ์์ํ ์ ์์ต๋๋ค.
docker restart my-app
docker rm [์ปจํ
์ด๋ ์ด๋ฆ]
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ ์ ์ง๋ ์ปจํ
์ด๋๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค.
docker rm my-app
๋ชจ๋ ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํฉ๋๋ค.
docker rm $(docker ps -a -q)
docker logs [์ปจํ
์ด๋ ์ด๋ฆ]
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ ํน์ ์ปจํ
์ด๋์ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
docker logs my-app
docker compose up [์ต์
]
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ ํ์ฌ ๋๋ ํ ๋ฆฌ์ ์๋ docker-compose.yml
ํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ ์๋น์ค๋ฅผ ์คํํ ์ ์์ต๋๋ค.
docker compose up
๋ง์ฝ ํน์ ์๋น์ค๋ง ์คํํ๊ณ ์ถ๋ค๋ฉด docker compose [์๋น์ค ์ด๋ฆ]
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ฉด ๋ฉ๋๋ค.
docker compose up my-service
docker compose ps
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ ํ์ฌ ์คํ ์ค์ธ ์๋น์ค๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
docker compose ps
docker compose down
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ ์คํ ์ค์ธ ๋ชจ๋ Compose ์๋น์ค๋ฅผ ์ค์งํ๊ณ , ๋คํธ์ํฌ๋ ๋ณผ๋ฅจ ๋ฑ์ ์ ๋ฆฌํ ์ ์์ต๋๋ค.
docker compose down
docker compose logs
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ Compose๋ก ์คํ๋ ์๋น์ค๋ค์ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
docker compose logs
Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ธฐ ์ํด์ ๋จผ์ Dockerfile
์ ์์ฑํด์ผ ํฉ๋๋ค. ์ ๋ ์ ๊ฐ ํ์ฌ ์งํํ๊ณ ์๋ Next.js ์ ํ๋ฆฌ์ผ์ด์
์ ๊ธฐ์ค์ผ๋ก Docker ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ฒ ์ต๋๋ค.
.dockerignore
ํ์ผ์ Docker๊ฐ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ๋ ๋ณต์ฌํ์ง ๋ง์์ผ ํ ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํ๋ ํ์ผ์
๋๋ค. ์ด ํ์ผ์ Docker Context ๋ด์ ๋ถํ์ํ ํ์ผ๋ค์ด ๋น๋ ์ด๋ฏธ์ง์ ํฌํจ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ, ๋น๋ ์๋๋ฅผ ๋์ด๊ณ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
Dockerfile
์ ์์ฑํ๊ธฐ ์ ์ ํ๋ก์ ํธ ์ต์๋จ ๋๋ ํ ๋ฆฌ์์ .dockerignore
ํ์ผ์ ์์ฑํ๊ณ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค.
# Node.js ํ๊ฒฝ
node_modules
# Git ๊ด๋ จ ํ์ผ
.git
.gitignore
# ํ๊ฒฝ ์ค์ ํ์ผ
.env
# Next.js ๋น๋ ๊ฒฐ๊ณผ๋ฌผ
.next
์์ ๋ด์ฉ์ ์ค๋ช ํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
node_modules
Node.js์ ์์กด์ฑ ํ์ผ์ด ์ ์ฅ๋ ๋๋ ํ ๋ฆฌ๋ก, ๋ณดํต ์ปจํ ์ด๋ ์์์ ์์ฑํ๋ฏ๋ก ๋ณต์ฌํ ํ์๊ฐ ์์ต๋๋ค.
-
.git
๊ณผ.gitignore
Git ๊ด๋ จ ํ์ผ์ ์ปจํ ์ด๋ ์์ ํฌํจํ ํ์๊ฐ ์์ต๋๋ค.
-
.env
ํ๊ฒฝ ๋ณ์ ์ ๋ณด๋ ๋ณดํต ๋ณด์ ์์ ์ด์ ๋ก ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ํฌํจํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
-
๋น๋ ๊ฒฐ๊ณผ๋ฌผ
๋น๋ ํ ์์ฑ๋๋ ํ์ผ์ด ์ ์ฅ๋ ๋๋ ํ ๋ฆฌ๋ก, ๋ณดํต ์ปจํ ์ด๋ ์์์ ๋น๋ ๊ณผ์ ์ด ํ์ํ ๊ฒฝ์ฐ ์ปจํ ์ด๋ ์์์ ์์ฑํ๋ฏ๋ก ๋ณต์ฌํ ํ์๊ฐ ์์ต๋๋ค.
.dockerignore
ํ์ผ์ ์ฌ์ฉํ์ ๋์ ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
์๋ ํฅ์
๋ถํ์ํ ํ์ผ์ ์ ์ธํจ์ผ๋ก์จ Docker ๋น๋ Context ํฌ๊ธฐ๊ฐ ์์์ ธ ๋น๋ ์๋๊ฐ ๋นจ๋ผ์ง๋๋ค.
-
์ด๋ฏธ์ง ์ต์ ํ
๋ถํ์ํ ํ์ผ์ ์ ์ธํจ์ผ๋ก์จ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
-
๋ณด์ ๊ฐํ
๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ํฌํจํ๋ ํ์ผ์ ์ด๋ฏธ์ง์์ ์ ์ธํจ์ผ๋ก์จ ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค.
Docker ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ธฐ ์ํด์ ๋จผ์ Dockerfile
์ ์์ฑํด์ผ ํฉ๋๋ค. VSCode์์ Dockerfile์ ์ฝ๊ฒ ์์ฑํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ด VSCode์์ Docker
extensions๋ฅผ ์ค์นํฉ๋๋ค.
์ดํ ํ๋ก์ ํธ ์ต์๋จ ๋๋ ํ ๋ฆฌ์์ Dockerfile
ํ์ผ์ ์์ฑํฉ๋๋ค. ๋ค์์ Next.js ์ ํ๋ฆฌ์ผ์ด์
์ ๋น๋ํ๊ณ ์คํํ๋ Dockerfile ์์์
๋๋ค.
# 1. ๋น๋ ๋จ๊ณ
# ์์ฑํ Docker ์ด๋ฏธ์ง์ ๋ฒ ์ด์ค๊ฐ ๋๋ ์ด๋ฏธ์ง๋ฅผ ์ง์ ํฉ๋๋ค.
FROM node:20-alpine AS build
# 1-1. ์์
๋๋ ํ ๋ฆฌ ์ค์
# ์ ํ๋ฆฌ์ผ์ด์
ํ์ผ์ ์ ์ฅํ๊ณ ์คํํ ๊ธฐ๋ณธ ์์
๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํฉ๋๋ค.
# /app ๋๋ ํ ๋ฆฌ๊ฐ ์๋์ผ๋ก ์์ฑ๋๋ฉฐ, ์ดํ์ ๋ชจ๋ ๋ช
๋ น์ด๊ฐ ์ด ๋๋ ํ ๋ฆฌ์์ ์คํ๋ฉ๋๋ค.
WORKDIR /app
# 1-2. ์์กด์ฑ ํ์ผ ๋ณต์ฌ
COPY package.json package-lock.json ./
# 1-3. ์์กด์ฑ ์ค์น
# ์ปจํ
์ด๋ ์์์ ๋ช
๋ น์ด๋ฅผ ์คํํ๊ณ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํฉ๋๋ค.
RUN npm install --force
# 1-4. ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋ ๋ณต์ฌ
# ํ์ฌ ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ํ์ผ์ /app ๋๋ ํ ๋ฆฌ๋ก ๋ณต์ฌํฉ๋๋ค.
COPY . .
# 1-5. ํ๊ฒฝ ๋ณ์ ์ค์
ENV NEXT_PUBLIC_BACKEND_URL=https://mafiacamp.p-e.kr
# 1-6. ์ ํ๋ฆฌ์ผ์ด์
๋น๋
RUN npm run build
# 2. ๋ฐํ์ ๋จ๊ณ
FROM node:20-alpine
# 2-1. ๋น๋ ๊ฒฐ๊ณผ๋ฌผ๊ณผ ํ์ํ ํ์ผ๋ง ๋ณต์ฌ
WORKDIR /app
COPY --from=build /app/.next ./.next
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/package.json ./package.json
COPY --from=build /app/public ./public
# 2-2. ํฌํธ ์ค์
# ์ปจํ
์ด๋๊ฐ ์ฌ์ฉํ๋ ํฌํธ๋ฅผ ๋ช
์์ ์ผ๋ก ์ง์ ํ๋ ๋ช
๋ น์ด๋ก, ํธ์คํธ์ ํต์ ํ ํฌํธ๋ฅผ ์ค์ ํฉ๋๋ค.
EXPOSE 3000
# 2-3. ์ ํ๋ฆฌ์ผ์ด์
์คํ
# ์ปจํ
์ด๋๊ฐ ์์๋ ๋ ์คํํ ๊ธฐ๋ณธ ๋ช
๋ น์ด๋ฅผ ์ง์ ํฉ๋๋ค.
# CMD๋ Dockerfile์์ ํ ๋ฒ๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
CMD [ "npm", "run", "start" ]
Dockerfile
์ ์์ฑํ ํ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํฉ๋๋ค.
docker build -t mafiacamp-fe .
๊ฐ ๋จ๊ณ๋ฅผ ์์ธํ ์ค๋ช ํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. ๋น๋ ๋จ๊ณ
# 1. ๋น๋ ๋จ๊ณ
# ์์ฑํ Docker ์ด๋ฏธ์ง์ ๋ฒ ์ด์ค๊ฐ ๋๋ ์ด๋ฏธ์ง๋ฅผ ์ง์ ํฉ๋๋ค.
FROM node:20-alpine AS build
๋จผ์ Docker์ ๋ฉํฐ ์คํ
์ด์ง ๋น๋
๋ฐฉ์์ ์ ์ฉํ๊ธฐ ์ํด AS build
๋ก ์ด ์ด๋ฏธ์ง ๋จ๊ณ๋ฅผ build
๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ณ์นญ์ ์ง์ ํ๊ณ , ๋์ค์ ๋ค๋ฅธ ๋จ๊ณ์์ ์ด ๋จ๊ณ์ ๊ฒฐ๊ณผ๋ฌผ์ ์ฐธ์กฐํ ์ ์๋๋ก ์ค์ ํ์์ต๋๋ค. ์ฌ๊ธฐ์ ๋ฉํฐ ์คํ
์ด์ง ๋น๋
๋ ์ฌ๋ฌ ๋จ๊ณ์์ ๋น๋ ์์
์ ์งํํ๊ณ , ์ต์ข
์ด๋ฏธ์ง์๋ ํ์ํ ํ์ผ๋ง ํฌํจํ์ฌ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ์๋ฏธํฉ๋๋ค. ํนํ ๋น๋๊ฐ ์๋ฃ๋ ํ์ผ๋ง ์ต์ข
ํ๋ก๋์
์ด๋ฏธ์ง์ ํฌํจํ๊ณ , ๋ถํ์ํ ๋น๋ ๋๊ตฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ธํ์ฌ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
๋ค์์ผ๋ก FROM
๋ช
๋ น์ด๋ ์์ฑํ Docker ์ด๋ฏธ์ง์ ๋ฒ ์ด์ค๊ฐ ๋๋ ์ด๋ฏธ์ง๋ฅผ ์ง์ ํฉ๋๋ค. Next.js ์ ํ๋ฆฌ์ผ์ด์
์ Node.js ์์์ ์คํ๋๋ฏ๋ก node.js 20 ๋ฒ์ ์ ์ฌ์ฉํ๊ธฐ ์ํด node:20-alpine
์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฒผ์ด Node.js ํ๊ฒฝ์ ์ค์ ํฉ๋๋ค.
์ฐธ๊ณ ๋ก node
์ด๋ฏธ์ง๋ ๊ฐ๋ฐ ํธ์์ฑ ๋ฐ ๋ค์ํ ๋๊ตฌ๊ฐ ํฌํจ๋ ์ด๋ฏธ์ง๋ก, ๊ฐ๋ฐ ํ๊ฒฝ์ด๋ ๋ณต์กํ ๋น๋ ์์
์ ์ ํฉํฉ๋๋ค. ๋ฐ๋ฉด์ node:alpine
์ด๋ฏธ์ง๋ ํฌ๊ธฐ๊ฐ ์๊ณ ๊ฐ๋ฒผ์ด ์ด๋ฏธ์ง๋ก, ํ๋ก๋์
ํ๊ฒฝ์ด๋ ๋ฆฌ์์ค๊ฐ ์ ํ๋ ํ๊ฒฝ์ ์ ํฉํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ต์ํํด์ผ ํ๊ธฐ ์ํด node:alpine
์ด๋ฏธ์ง๋ฅผ ์ ํํ์์ต๋๋ค.
1-1. ์์ ๋๋ ํ ๋ฆฌ ์ค์
# 1-1. ์์
๋๋ ํ ๋ฆฌ ์ค์
# ์ ํ๋ฆฌ์ผ์ด์
ํ์ผ์ ์ ์ฅํ๊ณ ์คํํ ๊ธฐ๋ณธ ์์
๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํฉ๋๋ค.
# /app ๋๋ ํ ๋ฆฌ๊ฐ ์๋์ผ๋ก ์์ฑ๋๋ฉฐ, ์ดํ์ ๋ชจ๋ ๋ช
๋ น์ด๊ฐ ์ด ๋๋ ํ ๋ฆฌ์์ ์คํ๋ฉ๋๋ค.
WORKDIR /app
WORKDIR
๋ ์ ํ๋ฆฌ์ผ์ด์
ํ์ผ์ ์ ์ฅํ๊ณ ์คํํ ์์
๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํ๋ ๋ช
๋ น์ด์
๋๋ค.
1-2. ์์กด์ฑ ํ์ผ ๋ณต์ฌ
# 1-2. ์์กด์ฑ ํ์ผ ๋ณต์ฌ
COPY package.json package-lock.json ./
COPY
๋ COPY [source] [dest]
ํ์์ผ๋ก ์ฌ์ฉํ๋ฉฐ, ํธ์คํธ ํ์ผ ์์คํ
์ ํ์ผ์ด๋ ํด๋๋ฅผ ์ปจํ
์ด๋์ ํ์ผ ์์คํ
์ผ๋ก ๋ณต์ฌํ๋ ๋ช
๋ น์ด์
๋๋ค. ์์ ์์์์๋ package.json
๊ณผ package-lock.json
ํ์ผ์ ๋จผ์ ๋ณต์ฌํ์ฌ ์์กด์ฑ ์ค์น ์ค๋น๋ฅผ ๋ง์นฉ๋๋ค.
1-3. ์์กด์ฑ ์ค์น
# 1-3. ์์กด์ฑ ์ค์น
# ์ปจํ
์ด๋ ์์์ ๋ช
๋ น์ด๋ฅผ ์คํํ๊ณ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํฉ๋๋ค.
RUN npm install --force
RUN
์ ์ปจํ
์ด๋ ์์์ ๋ช
๋ น์ด๋ฅผ ์คํํ ๋ ์ฌ์ฉํ๋ ๋ช
๋ น์ด์
๋๋ค. ์์ ์์์์๋ npm install
๋ช
๋ น์ด๋ก package.json
์ ์ง์ ๋ ์์กด์ฑ์ ์ค์นํฉ๋๋ค.
์ฐธ๊ณ ๋ก --force
์ต์
์ ์ฌ์ฉํ ์ด์ ๋ Next.js v15.0.2
๋ฅผ ๊ธฐ์ค์ผ๋ก React 19 RC
๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น๊ฐ ์๋๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ถ๊ฐํ์์ต๋๋ค. ๋ถํ์ํ ๊ฒฝ์ฐ --force
์ต์
์ ์ ์ธํ๋ฉด ๋ฉ๋๋ค.
1-4. ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ๋ณต์ฌ
# 1-4. ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋ ๋ณต์ฌ
# ํ์ฌ ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ํ์ผ์ /app ๋๋ ํ ๋ฆฌ๋ก ๋ณต์ฌํฉ๋๋ค.
COPY . .
์ ํ๋ฆฌ์ผ์ด์ ์ ์์ค ์ฝ๋๋ฅผ ๋ชจ๋ ๋ณต์ฌํ๋ ๋ถ๋ถ์ ๋๋ค.
1-5. ํ๊ฒฝ ๋ณ์ ์ค์
# 1-5. ํ๊ฒฝ ๋ณ์ ์ค์
ENV NEXT_PUBLIC_BACKEND_URL=https://mafiacamp.p-e.kr
ENV
๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ๋ ๋ช
๋ น์ด์
๋๋ค. ์์์ ์์ฑํ .dockerignore ํ์ผ์๋ .env
ํ์ผ์ ์ ์ธํ๋๋ก ์ค์ ํ์๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์
๋น๋ ์ ์ ํ์ํ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค.
1-6. ์ ํ๋ฆฌ์ผ์ด์ ๋น๋
# 1-6. ์ ํ๋ฆฌ์ผ์ด์
๋น๋
RUN npm run build
์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ๋ ๋ถ๋ถ์ ๋๋ค.
2. ๋ฐํ์ ๋จ๊ณ
# 2. ๋ฐํ์ ๋จ๊ณ
FROM node:20-alpine
๋น๋๊ฐ ์๋ฃ๋ ํ ๋ถํ์ํ ๋น๋ ๋๊ตฌ๋ฅผ ์ ์ธํ๊ณ ํ์ํ ํ์ผ๋ง ์ด๋ฏธ์ง์ ํฌํจ์ํฌ ์ ์๋๋ก ๋ณ์นญ์ ์ฌ์ฉํ์ง ์๋ ์๋ก์ด node:20-alpine
์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐํ์ ๋จ๊ณ๋ฅผ ์์ํฉ๋๋ค.
2-1. ๋น๋ ๊ฒฐ๊ณผ๋ฌผ๊ณผ ํ์ํ ํ์ผ๋ง ๋ณต์ฌ
# 2-1. ๋น๋ ๊ฒฐ๊ณผ๋ฌผ๊ณผ ํ์ํ ํ์ผ๋ง ๋ณต์ฌ
WORKDIR /app
COPY --from=build /app/.next ./.next
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/package.json ./package.json
COPY --from=build /app/public ./public
--from=build
๋ผ๋ ์ต์
์ ์ฌ์ฉํ์ฌ build
๋จ๊ณ์์ ์์ฑ๋ ํ์ผ ์ค์์ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋ ๋ฐ ํ์ํ ํ์ผ๋ค๋ง ๋ณต์ฌํฉ๋๋ค.
2-2. ํฌํธ ์ค์
# 2-2. ํฌํธ ์ค์
# ์ปจํ
์ด๋๊ฐ ์ฌ์ฉํ๋ ํฌํธ๋ฅผ ๋ช
์์ ์ผ๋ก ์ง์ ํ๋ ๋ช
๋ น์ด๋ก, ํธ์คํธ์ ํต์ ํ ํฌํธ๋ฅผ ์ค์ ํฉ๋๋ค.
EXPOSE 3000
EXPOSE
๋ ์ปจํ
์ด๋๊ฐ ์ฌ์ฉํ๋ ํฌํธ๋ฅผ ๋ช
์์ ์ผ๋ก ์ง์ ํ๋ ๋ช
๋ น์ด๋ก, ํธ์คํธ์ ํต์ ํ ํฌํธ๋ฅผ ์ค์ ํฉ๋๋ค. ์์ ์์์์๋ 3000 ํฌํธ๋ฅผ ๋
ธ์ถํ์ฌ ์ธ๋ถ์์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์ค์ ํฉ๋๋ค.
2-3. ์ ํ๋ฆฌ์ผ์ด์ ์คํ
# 2-3. ์ ํ๋ฆฌ์ผ์ด์
์คํ
# ์ปจํ
์ด๋๊ฐ ์์๋ ๋ ์คํํ ๊ธฐ๋ณธ ๋ช
๋ น์ด๋ฅผ ์ง์ ํฉ๋๋ค.
# CMD๋ Dockerfile์์ ํ ๋ฒ๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
CMD [ "npm", "run", "start" ]
CMD
๋ ์ปจํ
์ด๋๊ฐ ์์๋ ๋ ์คํํ ๋ช
๋ น์ด๋ฅผ ์ง์ ํ๋ ๋ช
๋ น์ด์
๋๋ค. CMD
๋ ํ๋์ Dockerfile ์์์ ํ ๋ฒ๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ ์์์์๋ npm run start
๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ Next.js ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํฉ๋๋ค.
Dockerfile์ด ์๋ ๋๋ ํ ๋ฆฌ์์ ํฐ๋ฏธ๋์ ์ด๊ณ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํฉ๋๋ค.
docker build -t mafiacamp-fe .
์๋ ๊ฒฐ๊ณผ๋ ์์ Dockerfile
์ ๊ธฐ๋ฐ์ผ๋ก Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ๊ฒฐ๊ณผ ์์์
๋๋ค.
PS C:\Users\user\๋ฌธ์\vscode\web12-MafiaCamp\FE> docker build -t mafiacamp-fe .
[+] Building 140.9s (15/15) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 1.93kB 0.0s
=> [internal] load metadata for docker.io/library/node:20-alpine 1.8s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 174B 0.0s
=> [build 1/6] FROM docker.io/library/node:20-alpine@sha256:c13b26e7e602ef2f1074aef304ce6e9b7dd284c419b35d89fcf3cc8e44a8def9 0.0s
=> => resolve docker.io/library/node:20-alpine@sha256:c13b26e7e602ef2f1074aef304ce6e9b7dd284c419b35d89fcf3cc8e44a8def9 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 6.29kB 0.0s
=> CACHED [build 2/6] WORKDIR /app 0.0s
=> CACHED [build 3/6] COPY package.json package-lock.json ./ 0.0s
=> CACHED [build 4/6] RUN npm install --force 0.0s
=> [build 5/6] COPY . . 0.2s
=> [build 6/6] RUN npm run build 77.1s
=> [stage-1 3/6] COPY --from=build /app/.next ./.next 1.2s
=> [stage-1 4/6] COPY --from=build /app/node_modules ./node_modules 4.5s
=> [stage-1 5/6] COPY --from=build /app/package.json ./package.json 0.2s
=> [stage-1 6/6] COPY --from=build /app/public ./public 0.1s
=> exporting to image 45.0s
=> => exporting layers 33.8s
=> => exporting manifest sha256:1cbf4b5bee24744bfe02047906dab35edfd26e2d7e859d2d48126d5976948c26 0.0s
=> => exporting config sha256:d667149ae2af3795ca5b414568d640435664cb894727eb73af12f28b220ae24e 0.0s
=> => exporting attestation manifest sha256:a445a77eb5e50e332d06b5145d3437746bcb35a2f7f3596b9b277c089bab4dad 0.0s
=> => exporting manifest list sha256:d3e238644af5f4a6d2a27b9fc4051e83d1fb8f133120608debaebc30f9f8c0a2 0.0s
=> => naming to docker.io/library/mafiacamp-fe:latest 0.0s
=> => unpacking to docker.io/library/mafiacamp-fe:latest 11.0s
Docker ์ด๋ฏธ์ง๊ฐ ๋น๋๋ ํ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ ์ปจํ ์ด๋๋ฅผ ์คํํฉ๋๋ค.
docker run -p 3000:3000 --rm mafiacamp-fe
์ปจํ ์ด๋๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
web12-MafiaCamp
๐ฏํ๋ก์ ํธ ๊ท์น
๐ปํ๋ก์ ํธ ๊ธฐํ
๐๊ธฐ์ ์คํ
- ๐ป Next.js 15๋ฅผ ์ ํํ ์ด์
- ๐ NestJS๋ฅผ ์ ํํ ์ด์
- ๐ฅ๏ธ OpenVidu๋ฅผ ์ ํํ ์ด์
- ๐ TypeORM์ ์ ํํ ์ด์
- ๐ฌ ์ฑํ ๊ธฐ๋ฅ ๊ตฌํ์ ์ํด WebSocket์ ์ ํํ ์ด์
- ๐ WebRTC ๊ฐ๋ ์ ๋ฆฌ
- ๐พ WebRTC โ Nest.js์ React๋ก ํ๋ ๊ฐ๋จ ํ์์ฑํ ์์
- ๐ฅ๏ธ GitHub Actions๋ก CI/CD ๊ตฌ์ถ ๋ฐฉ๋ฒ
- ๐ฆ Docker์ ๊ฐ๋ ๊ณผ ์ฌ์ฉ ๋ฐฉ๋ฒ
- ๐ OAuth ๊ธฐ๋ณธ ์ธ์ฆ ๊ณผ์ ๊ณผ ์์
๐๊ทธ๋ฃน ํ๊ณ
๐๊ฐ๋ฐ ์ผ์ง
๐๋ฌธ์ ํด๊ฒฐ ๊ฒฝํ
- ์น์์ผ ๋ฐฉ ๊ด๋ฆฌ ๊ตฌ์กฐ ๊ฐ์
- Pub-Sub ํจํด์ ํตํ ์ค์๊ฐ ๋ฐฉ ๋ชฉ๋ก ์กฐํ ๊ธฐ๋ฅ ๊ฐ๋ฐ
- ์ ํ ์ํ ๊ธฐ๊ณ๋ฅผ ์ด์ฉํ ๊ฒ์ ์งํ ๋ชจ๋ธ๋ง
- ๐ ๋์์ฑ ์ด์๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ LockManager ๋ง๋ค๊ธฐ
- โฐ RxJS๋ก ์ค์๊ฐ ํ์ด๋จธ ๊ตฌ์ถํ๊ธฐ
- ๐ณNext.js์ Docker๋ฅผ ์ฌ์ฉํ ๋น๋ ์ต์ ํํ๊ธฐ
- ๐ข Redis๋ฅผ ํตํ ์ ์ ์จ๋ผ์ธ ์ํ ๊ด๋ฆฌ ์์คํ ๊ตฌํํ๊ธฐ
- openvidu ์๋ฌ ๋๋ฒ๊น ์ ์ํ Docker ๊ฐ๋ฐํ๊ฒฝ ์ค์
๐งํธ๋ฌ๋ธ ์ํ
- NestJS, mkcert CA ์ธ์ฆ์ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
- openvidu ICE ํ๋ณด ๊ด๋ จ ์ค๋ฅ
- Enterํค ์ด๋ฒคํธ ์ค๋ณต ํธ์ถ ๋ฌธ์
- mutex lock ๋ฌธ์
- ํฌํ ๋์์ ์ง์ ์ค๋ฅ
- openvidu ์ธ์ ์ข ๋ฃ ๋ฉ์๋ ์ค๋ฅ
- ์บ์๋ก ์ธํ ๋ฏธ๋ค์จ์ด ๋ฏธํธ์ถ ๋ฐ ํ์ด์ง ์ ํ ์ค๋ฅ
- ๋คํฌ ๋ชจ๋์์ ํ ์คํธ๊ฐ ๋ณด์ด์ง ์๋ ๋ฌธ์
- ๊ฒ์ ๋ฐฉ์์ ์๋ก๊ณ ์นจ ๋๋ ๋ธ๋ผ์ฐ์ ํญ์ ๋ซ์ ๋์ ์์ธ ์ฒ๋ฆฌ