Docker Compose๊ฐ ๋ญ๊น?
๊ฐ๊ฐ ํ๋์ฉ ๊ด๋ฆฌํ๋ ์ปจํ ์ด๋๋ฅผ ํ๋๋ก ๋ชจ์์ ๊ด๋ฆฌํ๊ธฐ ์ํ ํด
(ํ์ฌ ๋ด๊ฐ ์งํ ์ค์ธ ํ๋ก์ ํธ์์ Spring ๋ฐฑ์๋ ์๋ฒ, React ํ๋ก ํธ ์๋ฒ, MariaDB, Redis์ ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ๋ชจ์์ ๊ด๋ฆฌํ ์ ์์๋ค.)
์ด๋ค ํ์์ธ์ง ๊ฐ๋ตํ๊ฒ ์ค๋ช ํด์ค
docker-compose.yml ํ์ผ์ ์์ฑํ์ฌ ์คํํ๋ฉด ํ๋ฒ์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ ์คํํ ์ ์๋ค.
yml ํ์์ ๋ํด์ ์กฐ๊ธ๋ง ๋งํ์๋ฉด key-value ํ์์ด๋ฉฐ int, boolean, String ํ์ ์ ์ง์ํ๋ค.
๋ฆฌ์คํธ์ ์์๋ ๋ค์ฌ์ฐ๊ธฐ๋ค์ฌ ์ฐ๊ธฐ ํ - ๋ฅผ ๋ถ์ด๊ณ , ๋ฆฌ์คํธ๊ฐ ์๋ ๊ฒฝ์ฐ๋ ๋ค์ฌ ์ฐ๊ธฐ๋ก ๊ตฌ๋ถํ๋ค.
์ด์ธ์ |, |-, ---, > ๋ฑ ๋ค์ํ ๊ธฐํธ๊ฐ ์๋๋ฐ ๋์ค์ ๋ฐ๋ก ์์ธํ ์์๋ณด์!
version: "3"
services:
database:
image: mariadb:latest
volumes:
- ./mymariadbdata:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=1234
- MYSQL_DATABASE=test
ports:
- "3306:3306"
์๋ ์ฐ์ DB๋ฅผ ์์๋ก ์์ฑํ docker-compose.yml ํ์ผ์ด๋ค.
์ด์ ์กฐ๊ธ ๋ ์์ธํ ๋งํด์ค
์ ์์์ ์๋๊ฒ ๊น์ง ํฌํจํด์ ๊ฐ์ฅ ํฐ ์นดํ
๊ณ ๋ฆฌ๋ก 4๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
1. version
Docker compose ํ์ผ ํฌ๋งท ๋ฒ์ ์ ์๋ฏธํ๋ฉฐ ํ์ฌ ์ฌ์ฉ ์ค์ธ docker ๋ฒ์ ์ ๋ง๊ฒ ์ค์ ํ๋ฉด ๋๋ค.
์ฒ์์ ๋๋ ํ์ฌ ๋ด ๋ฌธ์์ ๋ฒ์ ์ ์ ๋๊ฑด ์ค ์๊ณ ์๋ชป ์ฐ๊ณ ์์๋ค...
2. services
ํ๋ ์ด์์ ์ปจํ
์ด๋๋ฅผ ์ค์ ํ๋ค.
์์ ์์์์๋ database๊ฐ ์ปจํ
์ด๋์ ์ด๋ฆ์ธ ๊ฒ์ด๋ค.
์ด ์นดํ
๊ณ ๋ฆฌ ๋ด์์๋ ์ ์์์ฒ๋ผ
์ฌ์ฉํ ์ด๋ฏธ์ง๋ฅผ ์ค์ ํ๊ฑฐ๋ ์์์๋ ์์ง๋ง restart๋ผ๋ key์ value๋ฅผ ์ค์ ํ์ฌ ํญ์ ๋ค์ด๋๋ฉด ๋ค์ ์ฌ์์ํ๋๋ก ํ๋ ์ต์
์ ์ค ์๋ ์๋ค. ๋ํ env_file์ด๋ผ๋ key๋ฅผ ํตํด ์์์ ์ง์ ์ ์ธํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํจ์ค์๋ ๊ฐ์ ์ ๋ณด๋ฅผ ํ๊ฒฝ๋ณ์ ํ์ผ๋ก ๋ฐ๋ก ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ๋๋ก ํ ์๋ ์๋ค.
ports๋ ""(์๋ฐ์ดํ)๋ฅผ ๋ถ์ฌ์ค ์ด์ ๋ yaml ๋ฌธ๋ฒ์์ ์๊ฐ์ ๋ค๋ฃจ๋ ๋ฌธ๋ฒ๊ณผ ์ถฉ๋ํ์ง ์๊ธฐ ์ํด์์ด๋ค.
3. volumes
๊ฐ ์ปจํ
์ด๋๋ง๋ค ๋ฐ๋ก volume ์ค์ ์ ํ๋๊ฒ์ผ๋ก ๋์ฒด๊ฐ ๊ฐ๋ฅํ๋ฉฐ -v์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ต์
์ด๋ค.
4. networks
๊ฐ ์ปจํ
์ด๋๋ง๋ค ๋ฐ๋ก ๋คํธ์ํฌ๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ํ ์ค์ ์ ํ๋ฉฐ ์ต์
์ด๋ค.
์ด๋ป๊ฒ ๋ช ๋ นํด์ผ ํ๋?
์ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ ๋ช ๋ น์ docker-compose.yml ํ์ผ์ด ์๋ ํด๋์์ ์ ๋ ฅํด์ผ ํ๋ค.
1. ์คํ
docker-compose up <์ต์
>
์ ๋ช
๋ น์ ํตํด ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ ์ปจํ
์ด๋๋ฅผ ์คํํ๊ฒ ๋๋ค.
์ต์
์ผ๋ก๋ -d(๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ) --no-build(์ด๋ฏธ์ง๋ฅผ ๋น๋ํ์ง ์์) --build(์ด๋ฏธ์ง ์ฌ๋น๋) --no-deps(๋งํฌ ์๋น์ค๋ฅผ ์์X) -t(์ปจํ
์ด๋์ ํ์์์์ ์ด๋ก ์ง์ ) --scale SERVICE={service์}(์๋น์ค์ ์๋ฅผ ์ง์ )
2. ์ค์ง
docker-compose stop
3. ์ปจํ ์ด๋(๋ค) ์ญ์
docker-compose down
Spring Application๊ณผ DB๋ฅผ Docker Compose๋ก ๊ฐ์ด ์ค์ ํด๋ณด์
version: "3"
services:
back:
build:
context: ./springProject
dockerfile: Dockerfile_Spring
links:
- "db:mariadb"
ports:
- "80:8080"
container_name: backend
depends_on:
- db
db:
image: mariadb:latest
volumes:
- ./mymariadbdata:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=1234
- MYSQL_DATABASE=test
ports:
- "3306:3306"
- build๋ฅผ ์ด์ฉํด์ Dockerfile์ ์์น์ ์ด๋ฆ์ ์ค์ ํ์ฌ ์ง์ ์ด๋ฏธ์ง๋ฅผ ์คํํ ๋ ๋น๋ํด์ ์ฌ์ฉํ ์๋ ์๋ค.
- depends_on์ ์ฌ๋ฌ๊ฐ์ ์ปจํ
์ด๋๊ฐ ๋์์ง ๋ ์์๋ฅผ ๋ณด์ฅํ์ง ์๊ธฐ์ ๋ฐฑ์๋ ์ดํ๋ฆฌ์ผ์ด์
์ด ๋๋น๋ณด๋ค ๋จผ์ ๋์์ง๋ฉด ์๋ฌ๊ฐ ๋๋ ์ํฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ค์ ํ๋ ๊ฒ์ด๋ค. ์ฆ, ์ด ์ปจํ
์ด๋๋ฅผ ์์ฑ ๋ฐ ์คํ๋๊ธฐ ์ ์ ์ฌ์ ์ ์์ฑ ๋ฐ ์คํ๋์ด์ผ ํ๋ ์ปจํ
์ด๋๋ฅผ ์ ์ํ๋ค.
์ํฉ์ ๋ฐ๋ผ์ ํน์ ๋ชจ๋ฅด๋ restart ์ต์ ์ ๊ฐ์ด ์ฐ๋๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค.
'๐ณ DevOps > Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Dockerfile ์์ฑ๋ฒ (1) | 2023.01.02 |
---|---|
Docker run ๋ช ๋ น์ ๋ํด์ ์์๋ณด์ (0) | 2022.12.31 |
Docker Compose๊ฐ ๋ญ๊น?
๊ฐ๊ฐ ํ๋์ฉ ๊ด๋ฆฌํ๋ ์ปจํ ์ด๋๋ฅผ ํ๋๋ก ๋ชจ์์ ๊ด๋ฆฌํ๊ธฐ ์ํ ํด
(ํ์ฌ ๋ด๊ฐ ์งํ ์ค์ธ ํ๋ก์ ํธ์์ Spring ๋ฐฑ์๋ ์๋ฒ, React ํ๋ก ํธ ์๋ฒ, MariaDB, Redis์ ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ๋ชจ์์ ๊ด๋ฆฌํ ์ ์์๋ค.)
์ด๋ค ํ์์ธ์ง ๊ฐ๋ตํ๊ฒ ์ค๋ช ํด์ค
docker-compose.yml ํ์ผ์ ์์ฑํ์ฌ ์คํํ๋ฉด ํ๋ฒ์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ ์คํํ ์ ์๋ค.
yml ํ์์ ๋ํด์ ์กฐ๊ธ๋ง ๋งํ์๋ฉด key-value ํ์์ด๋ฉฐ int, boolean, String ํ์ ์ ์ง์ํ๋ค.
๋ฆฌ์คํธ์ ์์๋ ๋ค์ฌ์ฐ๊ธฐ๋ค์ฌ ์ฐ๊ธฐ ํ - ๋ฅผ ๋ถ์ด๊ณ , ๋ฆฌ์คํธ๊ฐ ์๋ ๊ฒฝ์ฐ๋ ๋ค์ฌ ์ฐ๊ธฐ๋ก ๊ตฌ๋ถํ๋ค.
์ด์ธ์ |, |-, ---, > ๋ฑ ๋ค์ํ ๊ธฐํธ๊ฐ ์๋๋ฐ ๋์ค์ ๋ฐ๋ก ์์ธํ ์์๋ณด์!
version: "3"
services:
database:
image: mariadb:latest
volumes:
- ./mymariadbdata:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=1234
- MYSQL_DATABASE=test
ports:
- "3306:3306"
์๋ ์ฐ์ DB๋ฅผ ์์๋ก ์์ฑํ docker-compose.yml ํ์ผ์ด๋ค.
์ด์ ์กฐ๊ธ ๋ ์์ธํ ๋งํด์ค
์ ์์์ ์๋๊ฒ ๊น์ง ํฌํจํด์ ๊ฐ์ฅ ํฐ ์นดํ
๊ณ ๋ฆฌ๋ก 4๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
1. version
Docker compose ํ์ผ ํฌ๋งท ๋ฒ์ ์ ์๋ฏธํ๋ฉฐ ํ์ฌ ์ฌ์ฉ ์ค์ธ docker ๋ฒ์ ์ ๋ง๊ฒ ์ค์ ํ๋ฉด ๋๋ค.
์ฒ์์ ๋๋ ํ์ฌ ๋ด ๋ฌธ์์ ๋ฒ์ ์ ์ ๋๊ฑด ์ค ์๊ณ ์๋ชป ์ฐ๊ณ ์์๋ค...
2. services
ํ๋ ์ด์์ ์ปจํ
์ด๋๋ฅผ ์ค์ ํ๋ค.
์์ ์์์์๋ database๊ฐ ์ปจํ
์ด๋์ ์ด๋ฆ์ธ ๊ฒ์ด๋ค.
์ด ์นดํ
๊ณ ๋ฆฌ ๋ด์์๋ ์ ์์์ฒ๋ผ
์ฌ์ฉํ ์ด๋ฏธ์ง๋ฅผ ์ค์ ํ๊ฑฐ๋ ์์์๋ ์์ง๋ง restart๋ผ๋ key์ value๋ฅผ ์ค์ ํ์ฌ ํญ์ ๋ค์ด๋๋ฉด ๋ค์ ์ฌ์์ํ๋๋ก ํ๋ ์ต์
์ ์ค ์๋ ์๋ค. ๋ํ env_file์ด๋ผ๋ key๋ฅผ ํตํด ์์์ ์ง์ ์ ์ธํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํจ์ค์๋ ๊ฐ์ ์ ๋ณด๋ฅผ ํ๊ฒฝ๋ณ์ ํ์ผ๋ก ๋ฐ๋ก ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ๋๋ก ํ ์๋ ์๋ค.
ports๋ ""(์๋ฐ์ดํ)๋ฅผ ๋ถ์ฌ์ค ์ด์ ๋ yaml ๋ฌธ๋ฒ์์ ์๊ฐ์ ๋ค๋ฃจ๋ ๋ฌธ๋ฒ๊ณผ ์ถฉ๋ํ์ง ์๊ธฐ ์ํด์์ด๋ค.
3. volumes
๊ฐ ์ปจํ
์ด๋๋ง๋ค ๋ฐ๋ก volume ์ค์ ์ ํ๋๊ฒ์ผ๋ก ๋์ฒด๊ฐ ๊ฐ๋ฅํ๋ฉฐ -v์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ต์
์ด๋ค.
4. networks
๊ฐ ์ปจํ
์ด๋๋ง๋ค ๋ฐ๋ก ๋คํธ์ํฌ๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ํ ์ค์ ์ ํ๋ฉฐ ์ต์
์ด๋ค.
์ด๋ป๊ฒ ๋ช ๋ นํด์ผ ํ๋?
์ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ ๋ช ๋ น์ docker-compose.yml ํ์ผ์ด ์๋ ํด๋์์ ์ ๋ ฅํด์ผ ํ๋ค.
1. ์คํ
docker-compose up <์ต์
>
์ ๋ช
๋ น์ ํตํด ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ ์ปจํ
์ด๋๋ฅผ ์คํํ๊ฒ ๋๋ค.
์ต์
์ผ๋ก๋ -d(๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ) --no-build(์ด๋ฏธ์ง๋ฅผ ๋น๋ํ์ง ์์) --build(์ด๋ฏธ์ง ์ฌ๋น๋) --no-deps(๋งํฌ ์๋น์ค๋ฅผ ์์X) -t(์ปจํ
์ด๋์ ํ์์์์ ์ด๋ก ์ง์ ) --scale SERVICE={service์}(์๋น์ค์ ์๋ฅผ ์ง์ )
2. ์ค์ง
docker-compose stop
3. ์ปจํ ์ด๋(๋ค) ์ญ์
docker-compose down
Spring Application๊ณผ DB๋ฅผ Docker Compose๋ก ๊ฐ์ด ์ค์ ํด๋ณด์
version: "3"
services:
back:
build:
context: ./springProject
dockerfile: Dockerfile_Spring
links:
- "db:mariadb"
ports:
- "80:8080"
container_name: backend
depends_on:
- db
db:
image: mariadb:latest
volumes:
- ./mymariadbdata:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=1234
- MYSQL_DATABASE=test
ports:
- "3306:3306"
- build๋ฅผ ์ด์ฉํด์ Dockerfile์ ์์น์ ์ด๋ฆ์ ์ค์ ํ์ฌ ์ง์ ์ด๋ฏธ์ง๋ฅผ ์คํํ ๋ ๋น๋ํด์ ์ฌ์ฉํ ์๋ ์๋ค.
- depends_on์ ์ฌ๋ฌ๊ฐ์ ์ปจํ
์ด๋๊ฐ ๋์์ง ๋ ์์๋ฅผ ๋ณด์ฅํ์ง ์๊ธฐ์ ๋ฐฑ์๋ ์ดํ๋ฆฌ์ผ์ด์
์ด ๋๋น๋ณด๋ค ๋จผ์ ๋์์ง๋ฉด ์๋ฌ๊ฐ ๋๋ ์ํฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ค์ ํ๋ ๊ฒ์ด๋ค. ์ฆ, ์ด ์ปจํ
์ด๋๋ฅผ ์์ฑ ๋ฐ ์คํ๋๊ธฐ ์ ์ ์ฌ์ ์ ์์ฑ ๋ฐ ์คํ๋์ด์ผ ํ๋ ์ปจํ
์ด๋๋ฅผ ์ ์ํ๋ค.
์ํฉ์ ๋ฐ๋ผ์ ํน์ ๋ชจ๋ฅด๋ restart ์ต์ ์ ๊ฐ์ด ์ฐ๋๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค.
'๐ณ DevOps > Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Dockerfile ์์ฑ๋ฒ (1) | 2023.01.02 |
---|---|
Docker run ๋ช ๋ น์ ๋ํด์ ์์๋ณด์ (0) | 2022.12.31 |