Dockerfile
작성 1가장 먼저 Dockerfile
을 작성하는데 trestletech/plumber
도커 이미지가 있으니 이를 가져와서 telco
RESTful API로 작성된 예측서비스를 올리는 방식으로 구성한다. 서비스는 이미 deploy_glm.rds
, telco.R
에 담겨져 있으니 이를 복사해서 컨테이너 /data
디렉토리에 담아 넣으면 된다.
그리고 나서, ENTRYPOINT
에 plumber
를 실행시키면 서비스가 8000 포트에 떠 있게 된다.
# Telco Dockerfile to expose a plumber service
FROM trestletech/plumber
MAINTAINER Kwangchun Lee <kwangchun.lee.7@gmail.com>
# install tidyverse dependancy
RUN apt-get update --allow-releaseinfo-change
RUN apt-get -y --no-install-recommends install \
libxml2-dev \
libcairo2-dev \
libsqlite-dev \
libmariadbd-dev \
libmariadbclient-dev \
libpq-dev \
libssh2-1-dev
RUN apt-get install openssl
# copy model and scoring script
RUN mkdir /data
COPY deploy_glm.rds /data
COPY telco.R /data
WORKDIR /data
# plumb and run server
EXPOSE 8000
ENTRYPOINT ["R", "-e", \
"pr <- plumber::plumb('/data/telco.R'); pr$run(port=8000)"]
Bind for 0.0.0.0:4000 failed: port is already allocated
오류 2
포트가 이미 할당되어서 다시 도커 컨테이너를 띄울 수 없는 경우, docker rm -f
명령어로 해당 이미 떠 있는 컨테이너를 지정하여 삭제한다.
Dockerfile
에 담긴 내용을 근거로 도커 이미지를 만든다. plumber-telco
를 이름으로 주면 현재 디렉토리에
/healthcheck
를 통해 제대로 서비스가 올라왔는지 테스트한다.
library(httr)
response <- GET("http://localhost:8000/healthcheck")
content(response, simplifyVector=TRUE)
고객이탈 예측모형을 /predict_churn
서비스를 통해 검증한다.