2017-02-09 9 views
1

Play Framework 2.5で書かれたアプリをJelasticプラットフォームにデプロイしたいと思います。私はPlay2Warプラグインを使用して再生しましたが、Play 2.5はまだサポートされていません。DockerでJelasticにPlay 2.5アプリをデプロイする方法は?

DockerコンテナまたはVPSの使用を推奨するプラットフォームのサポート。以前はDockerと仕事をしたことはありません。 SBTを使用してDockerfileを自動的に作成する手段を提供するためにSBT native packager pluginがあります。だからここ は私の新しいplugins.sbtファイルです:

// The Play plugin 
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.11") 

// Web plugins 
addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0") 
addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.1.0") 
addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.3") 
addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.7") 
addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.0") 
addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.0") 
addSbtPlugin("org.irundaia.sbt" % "sbt-sassify" % "1.4.2") 

// Play enhancer - this automatically generates getters/setters for public fields 
// and rewrites accessors of these fields to use the getters/setters. Remove this 
// plugin if you prefer not to have this feature, or disable on a per project 
// basis using disablePlugins(PlayEnhancer) in your build.sbt 
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0") 

// Play Ebean support, to enable, uncomment this line, and enable in your build.sbt using 
// enablePlugins(PlayEbean). 
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "3.0.0") 

// Play Eclipse plugin 
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0") 

// Play native packager support for Docker 
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.2.0-M8") 

そしてここでいくつかの例をもとにドッカー設定で私のbuild.sbtファイルです:

import com.typesafe.sbt.packager.docker._ 

name := """VestaWeb""" 

version := "1.0-SNAPSHOT" 

lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayEbean, DockerPlugin) 

scalaVersion := "2.11.7" 

// Configure Docker settings 
maintainer in Docker := "eeproperty" 

dockerRepository := Some("eeproperty") 
dockerBaseImage := "frolvlad/alpine-oraclejdk8:latest" 
dockerCommands := dockerCommands.value.flatMap { 
    case [email protected]("FROM", _) => List(cmd, Cmd("RUN", "apk update && apk add bash")) 
    case other => List(other) 
} 

// Add dependencies from Maven 
libraryDependencies ++= Seq(
    filters, 
    javaCore, 
    javaJdbc, 
    cache, 
    javaWs, 
    "mysql" % "mysql-connector-java" % "5.1.28", 
    "com.stripe" % "stripe-java" % "2.10.0", 
    "com.typesafe.play" %% "play-mailer" % "5.0.0", 
    "it.innove" % "play2-pdf" % "1.5.1", 
    "com.google.api-client" % "google-api-client" % "1.22.0", 
    "org.apache.commons" % "commons-compress" % "1.12" 
) 

// Remove the documentation from the dist 
sources in (Compile, doc) := Seq.empty 
publishArtifact in (Compile, packageDoc) := false 

// Disable strange behavior in local run 
fork in run := false 

コマンド:

activator docker:stage 

はこのDockerファイルを生成します:

と、docker/フォルダのようないくつかのものがあります。

コマンド:

activator docker:publish 

はDockerfile公開する(そしておそらく他のファイルを???)私のドッカーリポジトリへ。 Dockerがプッシュしていることと、Alpine LinuxベースイメージにPlayアプリを組み込む方法が分かっていない。

私のリポジトリをDockerインスタンスに追加し、Jelasticと私はそれを開始しました。私はSSH経由で自分のrootアカウントにログインすることができますが、コンテナには私のアプリケーションに関連するものは何もありません。ブラウザでJelasticノードを開こうとすると、何も表示されません。

Play Frameworkでは、デフォルトでポート80からのポート9000とJelasticロードが使用されます。私はiptablesコマンドをDockerfileに追加して、トラフィックを80から9000にリダイレクトする必要があります。

「PlayアプリケーションをDockerize」のチュートリアルをたくさん読んだことがありますが、アプリ、activator docker:publishLocalでローカルにコンテナを実行する方法のみ。

私は何を欠場しましたか?

+0

は、あなたのローカルドッキングウィンドウの仕事とは/ opt /フォルダが空ではないでしょうか? – Aless

答えて

0

私たちはそのドッカーで問題を再現しました。ドッカーはlocalhostでうまく動作しますが、Jelastic環境ではうまく動作しません。 根本的な原因は、バグですJE-29972-nologin:このアカウントは利用できません)ドッキングウィンドウ内のユーザーが/sbinに/ nologinにシェルの代わりに、/binに/ bashのを持っている場合。回避策として

、我々はあなたが/etc/passwdファイルを変更示唆してデーモン置き換えることができます。x:2:2:デーモンを:/ sbinに:/ sbinに/ nologinにデーモンと:X:2:2 :デーモン:/ opt/docker:/ bin/bashと変更後、環境を再起動してください。

ビルドがあります。SBT言及した回避策が含まれているドッカー設定でファイル:

import com.typesafe.sbt.packager.docker._ 

name := """test""" 

version := "1.0-SNAPSHOT" 

lazy val root = (project in file(".")).enablePlugins(PlayJava, DockerPlugin) 

scalaVersion := "2.11.7" 

// Configure Docker settings 
maintainer in Docker := "eeproperty" 

dockerExposedPorts := Seq(9000) 
dockerRepository := Some("eeproperty") 
dockerBaseImage := "frolvlad/alpine-oraclejdk8:latest" 
dockerCommands := dockerCommands.value.flatMap { 
    case [email protected]("FROM", _) => List(cmd, Cmd("RUN", "apk update && apk --no-cache add bash shadow && usermod -s /bin/bash daemon && usermod -d /opt/docker/ daemon")) 
    case other => List(other) 
} 

libraryDependencies ++= Seq(
    javaJdbc, 
    cache, 
    javaWs 
) 

sources in (Compile, doc) := Seq.empty 
publishArtifact in (Compile, packageDoc) := false 
関連する問題