실습 디렉토리 : ex07/composetest

튜토리얼 사이트 : https://docs.docker.com/compose/gettingstarted/

 

Docker Compose Quickstart

Check out this tutorial on how to use Docker Compose from defining application dependencies to experimenting with commands.

docs.docker.com

3단계 까지만 진행했음.

 

1. 프로젝트에 대한 디렉토리를 만듭니다.

$ mkdir composetest
$ cd composetest

 

2. app.py프로젝트 디렉토리에 라는 파일을 만들고 다음 코드를 붙여넣습니다.

vi app.py

import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)

 

3. 프로젝트 디렉토리에 requirements.txt  파일을 만들고 다음 코드를 붙여넣습니다.

vi requirements.txt

flask
redis

 

 

4. 코드를 생성하여 Dockerfile다음 코드를 붙여넣으세요.

# syntax=docker/dockerfile:1
FROM python:3.10-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run", "--debug"]

 

이는 Docker에게 다음을 알려줍니다.

  • Python 3.10 이미지로 시작하여 이미지를 빌드합니다.
  • 작업 디렉토리를 .으로 설정합니다 /code.
  • 명령 에 사용되는 환경 변수를 설정합니다 flask.
  • gcc 및 기타 종속성 설치
  • requirements.txtPython 종속성을 복사 하고 설치합니다.
  • 컨테이너가 포트 5000에서 수신 중임을 설명하는 메타데이터를 이미지에 추가합니다.
  • .프로젝트의 현재 디렉토리를 .이미지의 작업 디렉토리로 복사합니다.
  • 컨테이너의 기본 명령을 .으로 설정합니다 flask run --debug.

 

5. docker-compose.yml 정의

services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"
  • 이 web서비스는 현재 디렉토리에 있는 Dockerfile이 빌드된 이미지를 사용합니다 
  • 그런 다음 컨테이너와 호스트 머신을 노출된 포트인 에 바인딩합니다. (8000(HOST) --> 5000(Container)) 5000포트는 flask의 기본 포트임.

6. 컨테이너 실행

docker compose up -d

 

H2 server에 접속해보면 잘 작동하는 것을 볼 수 있다.

redis에 잘 연결되어있으면 새로고침 할 때 마다 카운트가 올라감.

 

H2 server에 올라간 container flask에 접속한 화면

 

compose watch 부분은 강의 때 안 다뤄서 하지않았음. 필요하면 개인적으로 공부해야할듯!

+ Recent posts