sbt로 AkkaHttp 서버의 Docker 이미지와 RPM 만들기
sbt-native-packager
를 사용하여 AkkaHttp 서버의 Docker 이미지와 RPM을 만드는 방법에 대해 설명합니다.[sbt-native-packager]
htps //w w. s 또는 sbt. 오 rg / sbt - 나치 ゔ ぇ 파 c
이후 절차에 대해 설명합니다.
project/plugin.sbt 설정
패키지화에
sbt-native-packager
를 사용하기 때문에 project/plugin.sbt
에 이하 추기했습니다.project/plugin.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.6")
build.sbt 설정
중요한
build.sbt
설정은 다음과 같이 설정했습니다.내용은 코멘트를 참조하십시오.
build.sbt
libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-http" % "10.1.7",
"com.typesafe.akka" %% "akka-stream" % "2.5.21" // or whatever the latest version is
)
lazy val root = (project in file(".")).
enablePlugins(JavaAppPackaging, DockerPlugin, JavaServerAppPackaging, RpmPlugin)
.settings(
organization := "com.example",
scalaVersion := "2.12.7",
name := "AkkaHttpQuick"
)
.settings(
// Dockerのimageにパッケージング化するための設定
version in Docker := "1.0", // imageのバージョン
packageName in Docker := "akka-http-server", // imageの名前
dockerBaseImage := "java:openjdk-8-jdk", // image生成元のimage
dockerRepository := Some("chocomint-kusoyaro"), // レジストリ名
dockerExposedPorts := Seq(8080) // 公開するport
)
.settings(
// RPMにパッケージング化するための設定
packageName in Rpm := "akka-http-server", // rpmの名前
version in Rpm := "0.1", // rpmのバージョン
rpmRelease := "1", // rpmのリリースバージョン
packageSummary := "Akka Http Server", // rpmのサマリ
packageDescription := "Simple Akka Http Quickstart", // rpmのディスクリプテョン
rpmVendor := "chocomint-kusoyaro", // rpmのベンダ
rpmUrl := Some("http://chocomint-kusoyaro.com"),
rpmLicense := Some("MIT")
)
엔드포인트 웹 서버 코딩
프로젝트의 끝점이 될 웹 서버를 코딩합니다.
이번에는 Docker, Rpm으로 시작하기 때문에 엔드포인트는 프로젝트에 하나여야 합니다.
생각해 보면 당연합니다만, 나는 빠졌으므로 주의해 주세요.
소스는 다음 AkkaHttp의 Introduction에서 적절하게 가져왔습니다.
IP 주소에서만 변경하고 있습니다.
[AkkaHttp Introduction]
htps // c c. 어? 이오/도 cs/아카-h tp/쿤 t/인 t로즈 c 치온. HTML
WebServer.scala
package com.example
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.model._
import akka.http.scaladsl.server.Directives._
import akka.stream.ActorMaterializer
import scala.io.StdIn
object WebServer {
def main(args: Array[String]) {
implicit val system = ActorSystem("my-system")
implicit val materializer = ActorMaterializer()
// needed for the future flatMap/onComplete in the end
implicit val executionContext = system.dispatcher
val route =
path("hello") {
get {
complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, "<h1>Say hello to akka-http</h1>"))
}
}
// ここだけ「127.0.0.1」から「0.0.0.0」に変更した。
val bindingFuture = Http().bindAndHandle(route, "0.0.0.0", 8080)
println(s"Server online at http://localhost:8080/\nPress RETURN to stop...")
StdIn.readLine() // let it run until user presses return
bindingFuture
.flatMap(_.unbind()) // trigger unbinding from the port
.onComplete(_ => system.terminate()) // and shutdown when done
}
}
참고로 프로젝트의 구성은 아래 그림과 같이 되어 있다고 생각합니다.
여기까지, 설정은 완료했으므로, 이후는 Docker의 이미지의 작성, Rpm의 작성에 대해 기재합니다.
sbt로 Docker 이미징 ~ 소통 확인
Docker의 이미징에 대해 설명합니다.
이미지 만들기
다음 sbt 명령으로 Docker 이미지를 만듭니다.
$ sbt docker:publishLocal
...
[success] Total time: 11 s, completed 2019/03/03 19:06:33
이미지를 만들었는지 확인합니다.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
chocomint-kusoyaro/akka-http-server 1.0 69e7c5f9c55c 47 seconds ago 665MB
컨테이너 시작
포트를 8080번으로 공개하고 있으므로, 아래와 같이 기동합니다.
Scala 소스 코드를 보면 알 수 있습니다만,
-d
로 백그라운드 프로세스로서의 기동은 이번 할 수 없게 되어 있습니다.$ docker run -it -p 8080:8080 chocomint-kusoyaro/akka-http-server:1.0
Server online at http://localhost:8080/
Press RETURN to stop...
마지막으로 소통 확인합니다.
아래와 같이 표시되면 성공입니다.
$ curl -XGET localhost:8080/hello
<h1>Say hello to akka-http</h1>
sbt로 그대로 레지스트리에 등록하고 싶다면
sbt docker:publish
명령으로 가능합니다.$ docker login
$ sbt docker:publish
다음 명령과 동일합니다.
$ docker login
$ docker push chocomint-kusoyaro/akka-http-server:1.0
sbt에서 Rpm 만들기 ~ 소통 확인
Rpm화 하는 경우는, 이하의 순서를 참고해 주세요.
rpm 설치
Mac에서
rpmbuild
명령이 없으면 rpm화 할 수 없었기 때문에 rpm
를 Homebrew로 설치했습니다.$ brew install rpm
Rpm 만들기
sbt 명령으로 Rpm을 만듭니다.
$ sbt rpm:packageBin
...
[success] Total time: 8 s, completed 2019/03/03 19:17:19
성공하면
target/rpm/RPMS/noarch/
아래에 akka-http-server-0.1-1.noarch.rpm
가 만들어져 있어야 합니다.$ ls target/rpm/RPMS/noarch
akka-http-server-0.1-1.noarch.rpm
Rpm 설치
어딘가 적당한 서버에 상기에서 작성한
akka-http-server-0.1-1.noarch.rpm
를 가져가서 인스톨 합니다. 설치에는 Java8이 필요하므로 설치되어 있지 않은 경우 설치해 둡니다.$ sudo rpm -ivh akka-http-server-0.1-1.noarch.rpm
Preparing... ################################# [100%]
Creating system group: akkahttpquick
Creating system user: akkahttpquick in akkahttpquick with akkahttpquick user-daemon and shell /bin/false
Updating / installing...
1:akka-http-server-0.1-1 ################################# [100%]
그런 다음 시작합니다.
build.sbt
로 name := "AkkaHttpQuick"
로 설정한 부분이 커맨드에 반영되는 것처럼, 다음의 커멘드로 기동합니다.$ akkahttpquick
마지막으로 소통 확인해 둡니다.
$ curl http://llhost:8080/hello
<h1>Say hello to akka-http</h1>
Reference
이 문제에 관하여(sbt로 AkkaHttp 서버의 Docker 이미지와 RPM 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/chocomintkusoyaro/items/f3b16ff8536a34824c7e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)