docker-compose 사용기

code_able·2023년 3월 11일
0

채팅방에서 hate speech를 탐지하는 봇을 만들어야 햔다.
flask로 nlp를 수행하는 실시간 서비스를 만들어야 했다.

우리의 목표는 정확히 기억이 안나는데
초당 엄청 많은 요청을 수행 해야 했다.

python은 cpu 바운드에서 싱글스레드로 작동한다.
대충 GIL을 보면 안다.

그래서!
프로세스를 늘리고 비슷한 요청이 오면 캐시에 저장된 값을 줄 예정이다.

구현은 다음과 같이 할 계획이다.

  1. flask - gunicorn - nginx
  2. memcached 활용

아무튼 핵심은 컨테이너를 여러개 띄울 예정이다.

구현은 어찌어찌 됐는데 문제는 배포였다.
그래서 사용한게 docker-compose다

docker-compose를 사용하면
여러 컨테이너 간의 종속성과 구성을 정의하고, 한 번에 시작하고 정지할 수 있다.

시작해보자

docker-compose 만들기

vi docker-compose.yml

버전 작성

version: '3'

flask 서비스 작성

	
  api:  # 서비스 이름
    container_name: flask-container
    build: .  # Dockerfile 일때
    entrypoint: gunicorn --timeout=30000 -w 3 --bind 0.0.0.0:5000 "app:create_app()"
    env_file:
      - .env
    ports:  # 포트설정
      - '5000:5000'

memcahed 서비스 작성

  memcached:
    image: memcached:latest #  docker image일때
    container_name: memcached-container
    entrypoint:
      - memcached
      - -m 64
    ports:
      - "11211:11211" 
    expose:  # 컨테이너간 통신 포트
      - "11211"
    depends_on:  # 서비스 실행 순서
      - api

nginx 서비스 작성

  nginx:
    image: nginx:latest
    container_name: nginx-container
    ports:
      - "80:8080"
    volumes:
      - ./nginx:/etc/nginx/conf.d
    depends_on:
      - api

전체 내용

version: '3'
services:
	

  api:  # 서비스 이름
    container_name: flask-container
    build: .  # Dockerfile 일때
    entrypoint: gunicorn --timeout=30000 -w 3 --bind 0.0.0.0:5000 "app:create_app()"
    env_file:
      - .env
    ports:  # 포트설정
      - '5000:5000'


  memcached:
    image: memcached:latest #  docker image일때
    container_name: memcached-container
    entrypoint:
      - memcached
      - -m 64
    ports:
      - "11211:11211" 
    expose:  # 컨테이너간 통신 포트
      - "11211"
    depends_on:  # 서비스 실행 순서
      - api


  nginx:
    image: nginx:latest
    container_name: nginx-container
    ports:
      - "80:8080"
    volumes:
      - ./nginx:/etc/nginx/conf.d
    depends_on:
      - api
profile
할수 있다! code able

0개의 댓글