이번 포스팅은 도커 컴포즈에 관한 내용이다.
멘토님이 실제 서비스에서는 여러 컨테이너를 띄우기 때문에
docker compose 공부를 추천해주셨다!👍
Docker compose는
compose 파일로 여러 컨테이너를 관리하기 쉽게 해주는 기능이다.
아래 실습 내용들은 도커의 공식 document를 따라 실습 후, 작성하였다.
우선 나는 Docker desktop을 설치하였다.
이 경우 docker-compose는 설치되어있으며,
터미널에
docker-compose
입력 시 아래 결과로 설치되어있음을 확인할 수 있다.
다음은 redis와 flask를 이용한 간단한 웹페이지 작성이다.
get_hit_count 함수로 페이지가 갱신될 때 마다
값을 1 증가시키며 반환한다.
가장 기본 path인 ~/ 로 접근할 경우 hello 함수가 작동하며
get_hit_count에서 받아온 값을
Hello Wordl!~~ ~times. 사이에 넣어서 보여준다.
그 다음 redis와 flask는 docker 안에서 따로 설치가 필요하기 때문에 작성해준다.
flask
redis
이번에는 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"]
docker compose를 위한 파일을 작성한다.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
터미널에서
docker-compose up
을 실행한다.
그리고 localhost:8000을 확인한다.
새로고침하면 숫자가 계속해서 늘어나는 것을 확인할 수 있다.
내릴 때는
docker-compose down
를 입력한다.
그리고 image를 확인하면
여러 이미지가 생성된 것을 볼 수 있다.
docker images
이번에는 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"
위에서 했던 것처럼 다시
docker-compose up
를 입력한다.
잘 업데이트 되는지 확인하기 위해서
app.py의 hello function의 return 부분을 아래와 같이 바꿔준다.
return 'Hello from Docker! I have been seen {} times.\n'.format(count)
rebuild 없이 잘 변경된 것을 확인할 수 있다.
background에서 돌리고 싶으면 -d flag를 추가한다.
docker-compose up -d
stop 할 때는
docker-compose stop
down과 함께 volumes 데이터를 삭제하고 싶을 때는
docker-compose down --volumes
를 입력한다.
오 도커 컴포즈까지 보다니 뿌듯합니다!
여기에 더불어서 reverse-proxy 관련해서 더 공부해보면 좋을 것 같습니다 !
reverse-proxy란 서버에서 docker-compose를 띄우고 이를 외부로 노출시키는 방법을 말합니다.