docker compose

  • docker-compose up을 통해 다수의 application stack을 한 번에 형성할 수 있음
  • 그러나! 1개의 Docker host에 실행되는 container에만 사용할 수 있음

예제 application stack (투표 앱 sample)

  1. voting-app
    • web-application
    • python
    • cat/dog 가리키는 interface
  2. memory DB
    • redis
    • 투표 결과 저장
  3. worker
    • .NET
    • 영구적인 storage(postreSQL)에 투표결과를 저장
  4. postreSQL
    • cat/dog 투표 집계하는 table
  5. result-app
    • Node.js
    • postreSQL에서 투표 결과 가져와서 보여주는 interface

        다양한 개발 플랫폼, 다양한 구성요소를 docker-compose를 통해 쉽게 개발할 수 있음을 아는 것이 이번 강의의 목표
      

continer 구축

  1. image build는 완성된 상황

  2. docker run -d --name=radis redis
    • d : background에서 container 실행
  3. docker run -d --name=db postgres

  4. docker run -d --name=vote -p 5000:80 voting-app
    • : (5000:80)
  5. docker run -d --name=result -p 5001:80 result-app

  6. docker run -d --name=worker worker
  1. docker run --link <container name>:<host name>
    • 두 개의 container를 연결하는 옵션
    • link 옵션에는 run하는 container와 연결되어야할 container의 정보를 기입
  2. docker run -d --name=vote -p 5000:80 --link redis:redis voting-app
    • voting app이 db인 redis와 연결되야하기 때문
  3. docker run -d --name=result -p 5001:80 --link db:db result-app
    • db가 voting app과 연결되어야 하기 때문
  4. 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

  1. application stack이 service section에 작성됨

  2. version: 2를 파일 맨 위에 작성해주어야함

  3. version 1은 기본 bridge network에 모든 container를 연결 후, link를 사용해 container 간 연결 활성화

  4. version 2는 app 전용 bridge network를 생성하여 연결을 활성화. link 사용할 필요 없음

  5. depends_on 기능

    • A container가 실행되어야 B continer가 실행될 수 있다라고하면
    • B continer에 depends_on: - redis를 작성하여 의존성을 작동시킴

docker compose의 version 3 (가장 최신)

docker network 구성