Docker Compose ๋
docker run mmumshad/simple-webapp
docker run mongodb
docker run redis:alpine
docker run ansible
- ์์ ๊ฐ์ ๋ค์์ ์๋น์ค๋ฅผ ์คํํ๋ ๋ณต์กํ Application ์ ์ค์ ํ ๋์ Docker Compose ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ข์
- Docker Compose ๋ ๊ธฐ๋ณธ์ผ๋ก ์ค์น๋์ง ์๊ธฐ ๋๋ฌธ์ ๊ณต์ ํํ์ด์ง์์ ๋ฐ๋ก ์ค์นํด์ผ ํจ
# docker-compose.yml
services:
web:
image: "mmumshad/simple-webapp"
database:
image: "mongodb"
messaging:
image: "redis:alpine"
orchestration:
image: "ansible"
- ์์ฒ๋ผ
docker-compose.yml
์ ์์ฑํ ๋ค
docker-compose up
์ปค๋งจ๋๋ฅผ ์คํํ๋ฉด Application ์คํ ์ ์ฒด๋ฅผ ๋ถ๋ฌ์ฌ ์ ์์
- ๊ตฌ์ฑ ํ์ผ์ ํตํด ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์๊ฐ ์์ํ์ง๋ง ํ๋์ Docker Host ์ ์คํ๋๋ Container ์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
Sample - Voting Application

- ์ ์ํคํ
์ฒ๋ Docker ๊ฐ ๊ฐ๋ฐํ Docker ๋ฅผ ์์ฐํ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋์ข
ํฉ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์
์์
docker run -d --name=redis redis
docker run -d --name=db postgres
docker run -d --name=vote -p 5000:80 --link redis:redis voting-app
docker run -d --name=result -p 5001:80 --link db:db result-app
docker run -d --name=worker --link db:db --link redis:redis worker
--link {์ปจํ
์ด๋ ์ด๋ฆ}:{์ฑ์ด ์ฐพ๋ ํธ์คํธ์ ์ด๋ฆ(์ฝ๋์ ์๋ ์ด๋ฆ)}
- Docker Swarm ๊ณผ ๋คํธ์ํน๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ฐ๋
์ด ๋ฑ์ฅํด ์ด์ฐจํผ Deprecated ๋ ๊ธฐ๋ฅ
# docker-compose.yml
redis:
image: redis
db:
image: postgres:9.4
vote:
image: voting-app
ports:
- 5000:80
links:
- redis
result:
image: result-app
ports:
- 5001:80
links:
- db
worker:
image: worker
links:
- redis
- db
Docker compose - build
# docker-compose.yml
redis:
image: redis
db:
image: postgres:9.4
vote:
build: ./vote
ports:
- 5000:80
links:
- redis
result:
build: ./result
ports:
- 5001:80
links:
- db
worker:
build: ./worker
links:
- redis
- db
- Docker Compose ๊ฐ Docker Image ๋ฅผ pull ํด์ค๋ ๋์
docker build
๋ช
๋ น์ด๋ฅผ ์คํํ ์ ์๋๋ก image
๋์ build
๋ฅผ ์
๋ ฅํ ๋ค ํด๋น Application ์ฝ๋์ Dockerfile
์ด ์กด์ฌํ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์
๋ ฅ
Docker compose - versions
Version 1
- ์ ์์๋ค์ ๋ชจ๋ Version 1 ๊ธฐ์ค์ผ๋ก ์์ฑ๋์์ผ๋ฉฐ ์ด๋ ์ฌ๋ฌ ์ ํ ์ฌํญ์ ๊ฐ์ง๊ณ ์์
- ์ฌ๋ฌ ๋คํธ์ํฌ์ ์ปจํ
์ด๋๋ฅผ ๋ฐฐํฌํ ๋ ๊ธฐ๋ณธ ์ค์ ์ธ ๋ธ๋ฆฟ์ง ๋คํธ์ํฌ ์ธ์ ์ค์ ํ ๋ฐฉ๋ฒ์ด ์์
- ์์กด์ฑ์ด๋ ์์ ์์๋ฅผ ์ง์ ํ ๋ฐฉ๋ฒ์ด ์์
Version 2
# docker-compose.yml
version: 2
services:
redis:
image: redis
db:
image: postgres:9.4
vote:
image: voting-app
ports:
- 5000:80
depends_on:
- redis
- Version 2 ๋ ์ ์ ํ ์ฌํญ๋ค์ด ๋ชจ๋ ํด๊ฒฐ๋จ
- Docker Compose ์๊ฒ Version 2 ๋ผ๋ ๊ฒ์ ์๋ ค์ฃผ๊ธฐ ์ํด
version
์ ๊ผญ ์ง์ ํด์ผ ํจ
- ๊ธฐ์กด Version 1 ์์ ์์ฑํ๋ ๊ตฌ์ฑ ์์๋ฅผ
services
ํ์์ ์์ฑํ๋ฉด ๋จ
- Version 1 ์์ ๊ธฐ๋ณธ ๋ธ๋ฆฟ์ง ๋คํธ์ํฌ์ ์คํํ๋ ๋ชจ๋ ์ปจํ
์ด๋๋ฅผ ์ฐ๊ฒฐํ๊ณ
link
๋ฅผ ์ฌ์ฉํด ์ปจํ
์ด๋ ๊ฐ ์ฐ๊ฒฐ์ ํ์ฑํํ ๋ฐ๋ฉด Version 2 ์์ Docker Compose ๊ฐ ์๋์ผ๋ก ์๋ก์ด Application ์ ์ฉ ๋ธ๋ฆฟ์ง ๋คํธ์ํฌ๋ฅผ ์์ฑํ๊ณ ํด๋น ๋คํธ์ํฌ์ ๋ชจ๋ ์ปจํ
์ด๋๋ฅผ ์ฐ๊ฒฐํจ ๋ฐ๋ผ์ link
๊ฐ ํ์์์
depends_on
๊ธฐ๋ฅ์ ํตํด ์์กด์ฑ์ด๋ ์์ ์์๋ฅผ ์ง์ ํ ์ ์์
Version 3
# docker-compose.yml
version: 3
services:
redis:
image: redis
db:
image: postgres:9.4
vote:
image: voting-app
ports:
- 5000:80
- Version 3 ๋ถํด Docker Swarm ์ ์ง์
- ๋ช ๊ฐ์ง ์ต์
์ด ์ ๊ฑฐ๋๊ณ ์ถ๊ฐ๋จ
Docker compose - network
# docker-compose.yml
version: 2
services:
redis:
image: redis
networks:
- back-end
db:
image: postgres:9.4
networks:
- back-end
vote:
image: voting-app
ports:
- 5000:80
networks:
- front-end
- back-end
result:
image: result-app
ports:
- 5001:80
networks:
- front-end
- back-end
worker:
image: worker
networks:
- back-end
networks:
front-end:
back-end:
- ๊ธฐ์กด์ ๋ชจ๋ ์ปจํ
์ด๋๋ฅผ ๊ธฐ๋ณธ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ์ ๋ฐฐํฌํ๋ ์ํคํ
์ฒ์์ง๋ง front-end ์ back-end ๋ก ๋คํธ์ํฌ๋ฅผ ๋๋ ๊ฒฝ์ฐ ์์ ๊ฐ์ด ์ค์ ํ ์ ์์
References