1

JPA + Playframework 2.5.xプロジェクトでDockerイメージとしてパッケージ化しています。私は強制的に出力Play JPAプロジェクトでsbt-native-packagerを使用してDockerにカスタムフォルダを追加する

をドッカーするconfフォルダの下に一つのファイル(META-INF/persistence.xmlの)以外のすべてのファイルを追加したい

は現在、私は次のことを行っている:

mappings in Docker += file("conf/base/application.conf") -> "opt/docker/conf/base/application.conf" 
mappings in Docker += file("conf/base/default-client.conf") -> "opt/docker/conf/base/default-client.conf" 
mappings in Docker += file("conf/prod/application.conf") -> "opt/docker/conf/prod/application.conf" 
mappings in Docker += file("conf/prod/logback.xml") -> "opt/docker/conf/prod/logback.xml" 
mappings in Docker += file("conf/stage/application.conf") -> "opt/docker/conf/stage/application.conf" 
mappings in Docker += file("conf/stage/logback.xml") -> "opt/docker/conf/stage/logback.xml" 
mappings in Docker += file("conf/local/application.conf") -> "opt/docker/conf/local/application.conf" 
mappings in Docker += file("conf/local/logback.xml") -> "opt/docker/conf/local/logback.xml" 
mappings in Docker += file("conf/routes") -> "opt/docker/conf/routes" 
mappings in Docker += file("conf/ValidationMessages.properties") -> "opt/docker/conf/ValidationMessages.properties" 

私はこれを達成するための最良の方法ではないことを確かめてください。 Dockerの出力を必要に応じてカスタマイズするには誰よりも良いオプションを提案できますか?

マイbuild.sbtファイル:

PlayKeys.externalizeResources := false 
name := """wp-pw-ng""" 

version := "1.0.0-SNAPSHOT" 

lazy val `wp-pw-ng` = (project in file(".")).enablePlugins(PlayJava, JavaAppPackaging) 

val playVer = "2.5.9" 

scalaVersion := "2.11.8" 

libraryDependencies ++= Seq(
    javaJpa, 
    "org.hibernate" % "hibernate-core" % "5.2.3.Final" exclude("dom4j", "dom4j"), 
    "mysql" % "mysql-connector-java" % "6.0.5", 
    cache, 
    javaWs, 
    filters, 
    "dom4j" % "dom4j" % "1.6", 
    "com.google.guava" % "guava" % "20.0-rc1", 
    "com.amazonaws" % "aws-java-sdk" % "1.11.34" 
) 

val docDeps = Seq(
    "io.swagger" %% "swagger-play2" % "1.5.3.2" 
) 

libraryDependencies ++= docDeps 

fork in Test := true 
javaOptions in Test ++= Seq(
    "-Xms512M", 
    "-Xmx1536M", 
    "-Xss1M", 
    "-XX:MaxPermSize=384M" 
) 

fork in run := false 

unmanagedResourceDirectories in Compile <+= (sourceDirectory in Compile) (_/"resources") 

mappings in Docker += file("conf/base/application.conf") -> "opt/docker/conf/base/application.conf" 
mappings in Docker += file("conf/base/default-client.conf") -> "opt/docker/conf/base/default-client.conf" 
mappings in Docker += file("conf/base/pw.conf") -> "opt/docker/conf/base/paywall.conf" 
mappings in Docker += file("conf/prod/application.conf") -> "opt/docker/conf/prod/application.conf" 
mappings in Docker += file("conf/prod/logback.xml") -> "opt/docker/conf/prod/logback.xml" 
mappings in Docker += file("conf/stage/application.conf") -> "opt/docker/conf/stage/application.conf" 
mappings in Docker += file("conf/stage/logback.xml") -> "opt/docker/conf/stage/logback.xml" 
mappings in Docker += file("conf/local/application.conf") -> "opt/docker/conf/local/application.conf" 
mappings in Docker += file("conf/local/logback.xml") -> "opt/docker/conf/local/logback.xml" 
mappings in Docker += file("conf/routes") -> "opt/docker/conf/routes" 
mappings in Docker += file("conf/ValidationMessages.properties") -> "opt/docker/conf/ValidationMessages.properties" 

//************************************************ 
// Custom Docker Build, 
// use command 'activator docker:publishLocal' 
// to publish image locally to computer. 
//************************************************ 
import com.typesafe.sbt.packager.docker._ 

val playUser = "play" 
val grp = "idud" 
dockerRepository := Some("quay.io/we") 

version in Docker := "latest" 

val buildEnv: String = System.getProperty("build.env") 

dockerCommands := Seq(
    Cmd("FROM", "anapsix/alpine-java:8_jdk_unlimited"), 
    Cmd("RUN", "apk", "-Uuv add", "--no-cache", "su-exec", "groff", "less", "python", "py-pip", "&& pip install awscli ", "&& apk --purge -v del py-pip ", " && rm /var/cache/apk/* "), 
    Cmd("RUN", s"addgroup $grp"), 
    Cmd("RUN", s"adduser -s /bin/bash -D -G $grp $playUser"), 
    Cmd("RUN", "echo", s"'$playUser ALL=(ALL) NOPASSWD:ALL'", ">> /etc/sudoers"), 
    Cmd("WORKDIR", "/opt/docker"), 
    Cmd("ADD", "opt /opt"), 
    Cmd("RUN", "chown", "-R", s"$playUser:$grp", "."), 
    Cmd("USER", s"$playUser"), 
    Cmd("ENTRYPOINT", "[\"bin/wp-pw-ng\", \"-Dconfig.file=conf/" + buildEnv + "/application.conf\", \"-Dhttp.port=7000\" , \"-Dpidfile.path=/dev/null\" ,\"-Dlogger.file=conf/" + buildEnv + "/logback.xml\"]"), 
    Cmd("EXPOSE", "9877") 
) 

追加情報 私はPlayframework、Issue 4590でビルドstageモードの問題に起因する問題に、この回避策に頼らなければならなかったと私はPlayKeys.externalizeResources := falseフラグを使用していました私のbuild.sbtファイルにあります。これにより、Dockerのconfフォルダからすべてのファイルが削除されます。

答えて

2

playExternalizeResources:= falsejust prevents sbtfrom addingplayExternalizedResourcesmappings in Universalに設定します。これは、ドッカーを含むすべてのターゲットパッケージ形式で使用できるマッピングです。

ビルドSBTが MappingsHelperScalaDocs

import NativePackagerHelper._ 
mappings in Universal ++= contentOf("conf") 

でlightenendすることができ

また、不要なファイルを削除するために、マッピングをフィルタリングすることができます例えば役立ちます

import NativePackagerHelper._ 
mappings in Universal ++= contentOf("conf").filter(_.2.contains("persistence.xml") 

希望、 Muki

+0

ありがとう、私はそれを試してみます –

+0

ドッカーステージフォルダ内では 'opt/docker/conf /'の下にファイルがあり、 'Docker ++でのマッピング= contentOf( "conf") 'は' target/stage'フォルダに追加します。 'opt/docker/conf /'の下にファイルを再マップする必要があります –

+0

そして、 'contentOf'の代わりに' directory'を使い、結果のマッピングをマップします。他のScalaコレクションと同じように – Muki

0

universal/confディレクトリにマップするファイルを追加してください。この結果、ドッカー画像を作成するときには、ファイルは/opt/docker/confディレクトリに追加されます。

関連する問題