5.docker-compose
docker compose
docker-compose up
을 통해 다수의 application stack을 한 번에 형성할 수 있음- 그러나! 1개의 Docker host에 실행되는 container에만 사용할 수 있음
예제 application stack (투표 앱 sample)
- voting-app
- web-application
- python
- cat/dog 가리키는 interface
- memory DB
- redis
- 투표 결과 저장
- worker
- .NET
- 영구적인 storage(postreSQL)에 투표결과를 저장
- postreSQL
- cat/dog 투표 집계하는 table
- result-app
- Node.js
-
postreSQL에서 투표 결과 가져와서 보여주는 interface
다양한 개발 플랫폼, 다양한 구성요소를 docker-compose를 통해 쉽게 개발할 수 있음을 아는 것이 이번 강의의 목표
continer 구축
-
image build는 완성된 상황
docker run -d --name=radis redis
d
: background에서 container 실행
-
docker run -d --name=db postgres
docker run -d --name=vote -p 5000:80 voting-app
-
: (5000:80)
-
-
docker run -d --name=result -p 5001:80 result-app
docker run -d --name=worker worker
container 연결 by link
docker run --link <container name>:<host name>
- 두 개의 container를 연결하는 옵션
- link 옵션에는 run하는 container와 연결되어야할 container의 정보를 기입
docker run -d --name=vote -p 5000:80 --link redis:redis voting-app
- voting app이 db인 redis와 연결되야하기 때문
docker run -d --name=result -p 5001:80 --link db:db result-app
- db가 voting app과 연결되어야 하기 때문
docker run -d --name=worker --link db:db --link redis:redis worker
-
2개를 중복해서 사용 가능
but link 기능은 더 이상 사용되지 않을 예정. Docker Swarm을 통해 container를 연결.
-
docker-compose yaml 파일 생성
docker-compse.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
- version1:
docker-compose up
-
version2:
docker compose up
- redis와 postgres는 Dockerhub 공식 repo에 있기 때문에 image 이름을 입력
- 하지만 나머지 3개는 직접 만든 app이기 때문에 해당 image를 생성하는 Dockerfile을 build 하도록 설정해줘야함
build: <dockerfile의 위치>
docker compose의 version 2
-
application stack이 service section에 작성됨
-
version: 2
를 파일 맨 위에 작성해주어야함 -
version 1은 기본 bridge network에 모든 container를 연결 후, link를 사용해 container 간 연결 활성화
-
version 2는 app 전용 bridge network를 생성하여 연결을 활성화. link 사용할 필요 없음
-
depends_on 기능
- A container가 실행되어야 B continer가 실행될 수 있다라고하면
- B continer에
depends_on: - redis
를 작성하여 의존성을 작동시킴