모던웹으로 Playframework 를 선택하였다고 하면, Scala+Akka의 이점을 고려했을것이며

여기서는 Playframework 를 인텔리J를 사용하여 초기 셋팅하고, 도커에 배포 실행하는 방법을 알아보겠습니다.

Play는 JVM환경에서 구동되는것이기때문에 JAVA 배포방법과 큰 차이는 없으며.

스칼라 실행/배포를 위해 SBT 를 이용하는것의 약간의 차이가 있습니다. ( Gradle도 지원)

도커는 덤으로 연동을 하였습니다.

play frame work : https://www.playframework.com/documentation/2.6.x/Home


필요플러그인


프로젝트 생성에서 실행 배포까지

Step0. 라이트벤드 제공 Play템플릿 선택하기

여기서는 Play Scala ChatRoom 을 선택하였으며 기본 MVC를 위한 뷰템플릿 + 웹소켓요소가 포함되어 있으며

웹소켓은 이제 모던웹에 필수요소이기때문에 기본으로 선택하였습니다.



Step1. 구성요소 받을때까지 기다리기

주요 application layout


Step2. 컴파일및 실행

sbt는 스칼라프로젝트를 운영할시 메이븐과 유사한 심플하고 유용한 빌드툴입니다.

기본적으로 다음과 같은 명령을 사용할수가 있습니다.


배포용 빌드 Task등록

배포용 Task를 만들어둠으로 재사용이 가능하며, 배포 빌드단계 전단계에서 사용할수가 있습니다.

Step3. Docker Build 만들기

FROM openjdk:8-jre
COPY target/universal/play-chatroom-scala-example-2.6.x /svc
EXPOSE 9000 9443
CMD /svc/bin/play-chatroom-scala-example -Dhttps.port=9443 -Dplay.crypto.secret=secret

프로젝트 루트에 Dockerfile을 위와같이 만들어 줍니다. sbt dist후  universal에 생성된 zip의 압축을 푼후 ( unzip으로 자동화가능) 수행이가능한

도커 명령이며(도커가 셋팅이되었다고 가정합니다.) 

위 명령은 jre가 필요하고 9000(play 웹기본포트), 9443(https) 두가지 포트를 사용하는 실행가능한 scala 웹서비스의 컨터이너를 작성하겠다란 의미입니다.

  

docker build -t playchatroom .

IDE에서 도커설정을 하게되면 , 배포-도커빌드-실행 단계를 버튼하나로 진행할수가 있으며

도커 컨테이너 내의 가상 네트워크에서 작동되지만, 로컬에서 작동하는것처럼 불편함없이 작동이 가능합니다.

디버깅 환경을 구축하려면 , 리모트환경을 이용해야하며 약간의 다른 셋팅 필요합니다.


Docker 빌드는 다양한 방법으로 연동될수 있습니다.


위 명령은 Dockerfile을 참고 하여 playchatroom 이라는 실행가능한 도커 이미지를 생성해줍니다.

D:\project\scala2>docker images

REPOSITORY                     TAG                      IMAGE ID            CREATED             SIZE

playchatroom                   latest                   88e0b3cd5a14        10 minutes ago      484MB

openjdk                        8-jre                    66bf39162ea7        4 weeks ago         443MB

openjdk 를 베이스로 playcharroom 이라는 이미지 생성이 되었습니다. 

Step4. Docker 실행하기

docker run -it -p 9000:9000 -p 9443:9443 --rm playchatroom

실행되는 도커 컨테이너는 격리된 네트워크로 포트 접근이 기본적으로 불가능하며, 도커의 본체에 포트포워딩 경로를 통해

접근을 시킬수가 있습니다. 여기서는 도커의 본체는 localhost이며  위 실행명령은 http://localhost:9000 으로 접속가능하게해줍니다.


인텔리J가 제공하는 Docker 플러그인을 통해서도 컨테이너 제어가가능하며

위 컨테이너 목록은 격리된 도커 서비스이며 여러가지 의존서비스들을 모두 동일한 가상 네트워크에서 포트충돌없이 구동이 가능합니다.

이렇게 한번 도커에 등록된 컨테이너는 환경변수만 바꿔가며 재사용및 재실행이 가능하게 됩니다.


실행성공화면