↓폴밍끼 유튜브 채널 자세히보기

Python library & package/Tensorflow & keras

하나의 도커 이미지 docker image 에 여러 개의 컨테이너 container 만들기(tensorflow/serving)

폴밍끼 2021. 8. 2. 13:34
728x90

호스트 시스템의 TCP 포트 번호를 달리 해서 가능하게 했습니다. 

tensorflow model server를 도커를 통해 실행시켰는데, 비트코인 가격 예측 모델은 포트 번호 8501:8501로 하여 컨테이너를 만들고 이더리움 가격 예측 모델은 도커 엔진이 호스트 시스템의 TCP 포트 8502번을 컨테이너의 TCP 포트 8501번으로 포워딩하도록 하여(8502:8501) 컨테이너를 두 개 만들었습니다. 즉, 호스트 시스템의 TCP 포트만 바꿔주고(8501->8502) 컨테이너의 TCP 포트는 8501번으로 고정시켜 줍니다. 기본적으로 TF서빙은 8501번 포트를 사용하여 REST API를 제공하기 때문입니다. (8500번은 gRPC API를 제공하는 데 사용합니다.)

참고로 각각 예측 모델의 컨테이너 생성 코드는 다음과 같습니다.

$ docker run -d -p 8501:8501 --name tfserving_btc_lstm --mount type=bind,source=/mnt/c/Users/007_0/serving/btc_lstm,target=/models/btc_lstm -e MODEL_NAME=btc_lstm -t tensorflow/serving
$ docker run -d -p 8502:8501--name tfserving_eth_lstm --mount type=bind,source=/mnt/c/Users/007_0/serving/eth_lstm,target=/models/eth_lstm -e MODEL_NAME=eth_lstm -t tensorflow/serving

콘솔 창에 명령어 docker container ls를 통해 tensorflow/serving 이미지에 두 개의 도커가 생성된 것을 확인할 수 있습니다

Docker Desktop을 통해서도 확인할 수 있습니다.

 

덧붙여서 REST API로 새로 생성한 TF서빙(호스트 시스템의 TCP 포트 8502번을 사용한)에 쿼리할 때 http://localhost:8502/v1/models/eth_lstm:predict 처럼 포트 번호는 컨테이너의 TCP 포트인 8501번이 아니라 호스트 시스템의 TCP 번호를 기입하면 됩니다.

 


시행착오) 어쩌면 당연한 말이겠지만, 하나의 이미지에 생성할 또 다른 컨테이너의 포트 번호를 이전에 생성한 컨테이너의 포트 번호와 같게 한다면(똑같이 8501로) failed: port is already allocated. 라는 에러가 뜹니다. docker container ls라는 명령어를 쳐도 기존에 8501 포트 번호를 이미 할당한 컨테이너만 보입니다. 즉, 똑같이 8501:8501은 불가합니다.