실습 디렉토리 : 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에 잘 연결되어있으면 새로고침 할 때 마다 카운트가 올라감.

compose watch 부분은 강의 때 안 다뤄서 하지않았음. 필요하면 개인적으로 공부해야할듯!
'코딩이야기 > Docker' 카테고리의 다른 글
[도커 입문 24강] - 도커 컴포즈 React & Spring & MySQL (0) | 2024.07.19 |
---|---|
[도커 입문 23강] - 도커 컴포즈 Spring & MySQL (1) | 2024.07.19 |
도커 입문 21강 - 도커컴포즈 기본 (0) | 2024.07.02 |
도커 입문 20강 - docker file step8 - MySQL 환경변수와 볼륨연결 (0) | 2024.07.02 |
도커 입문 19강 - docker file step7 - nginx 게이트웨이 사용하기 (0) | 2024.07.01 |