Docker Compose
이번 포스팅은 도커 컴포즈에 관한 내용이다.
멘토님이 실제 서비스에서는 여러 컨테이너를 띄우기 때문에
docker compose 공부를 추천해주셨다!👍
docker compose란
Docker compose는
compose 파일로 여러 컨테이너를 관리하기 쉽게 해주는 기능이다.
아래 실습 내용들은 도커의 공식 document를 따라 실습 후, 작성하였다.
installation
우선 나는 Docker desktop을 설치하였다.
이 경우 docker-compose는 설치되어있으며,
터미널에
docker-compose
입력 시 아래 결과로 설치되어있음을 확인할 수 있다.
app.py
다음은 redis와 flask를 이용한 간단한 웹페이지 작성이다.
get_hit_count 함수로 페이지가 갱신될 때 마다
값을 1 증가시키며 반환한다.
가장 기본 path인 ~/ 로 접근할 경우 hello 함수가 작동하며
get_hit_count에서 받아온 값을
Hello Wordl!~~ ~times. 사이에 넣어서 보여준다.
requirements.txt
그 다음 redis와 flask는 docker 안에서 따로 설치가 필요하기 때문에 작성해준다.
flask
redis
Dockerfile
이번에는 Dockerfile을 작성한다.
# syntax=docker/dockerfile:1
FROM python:3.7-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"]
- Python 3.7 image에서 시작한다.
- working directory 를 /code로 설정한다.
- flask를 위한 환경설정을 한다.
- gcc등 다른 dependencies를 설치한다.
- requirements.txt를 복사하고 이를 설치한다.
- EXPOSE로 5000번 포트를 외부에 공개할 예정이라고 알려준다.
- 현재 디렉토리를 workdir .으로 복사한다.
- 마지막으로 flask run 로 웹을 실행한다.
docker-compose.yml
docker compose를 위한 파일을 작성한다.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
Build and run my app
터미널에서
docker-compose up
을 실행한다.
그리고 localhost:8000을 확인한다.
새로고침하면 숫자가 계속해서 늘어나는 것을 확인할 수 있다.
내릴 때는
docker-compose down
를 입력한다.
그리고 image를 확인하면
여러 이미지가 생성된 것을 볼 수 있다.
docker images
Edit the compose file
이번에는 bind mount를 추가하려고 한다.
docker-compose.yml에 volumes와 environment를 추가한다.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
environment:
FLASK_ENV: development
redis:
image: "redis:alpine"
- volumes로 현재 프로젝트 디렉토리를 host의 /code안 컨테이너에 마운트한다.
그러면 코드를 수정해도 이미지를 rebuild 할 필요가 없다.
Re-build and run the app
위에서 했던 것처럼 다시
docker-compose up
를 입력한다.
잘 업데이트 되는지 확인하기 위해서
app.py의 hello function의 return 부분을 아래와 같이 바꿔준다.
return 'Hello from Docker! I have been seen {} times.\n'.format(count)
rebuild 없이 잘 변경된 것을 확인할 수 있다.
background 실행
background에서 돌리고 싶으면 -d flag를 추가한다.
docker-compose up -d
stop 할 때는
docker-compose stop
down과 함께 volumes 데이터를 삭제하고 싶을 때는
docker-compose down --volumes
를 입력한다.
'MLOps' 카테고리의 다른 글
도커란? | 가상화, 컨테이너, 도커 개념, 기능 (0) | 2024.01.12 |
---|---|
AI 프로젝트의 Flow 와 유의할 점 파악해보기 (0) | 2023.12.24 |