Spring Boot アプリを Maven で Docker Hub に push

僕はSpring Cloudに関して、Kennyのこのリポジトリを参照しまくってるんだけど。

github.com

Dockerの設定が入ってるので参考にした。

Repository

ここでやっといたよ。

github.com

やることは

  1. pom.xml にビルド設定を書く
  2. Dockerfile を書く
  3. push する

これだけ。

1. pom.xmlにビルド設定を書く

例えば僕のリポジトリの config-service ならここ

https://github.com/bufferings/msa/blob/master/config-service/pom.xml#L61-L77

<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>0.4.13</version>
  <configuration>
    <useConfigFile>true</useConfigFile>
    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
    <dockerDirectory>${basedir}/src/main/docker</dockerDirectory>
    <resources>
      <resource>
        <targetPath>/</targetPath>
        <directory>${project.build.directory}</directory>
        <include>${project.build.finalName}.jar</include>
      </resource>
    </resources>
  </configuration>
</plugin>

spotifyのdocker-maven-plugin使ってるす。

github.com

useConfigFile

useConfigFile についてはここに書いてる。

https://github.com/spotify/docker-maven-plugin#using-docker-config-file-for-authentication

Another option to authenticate with private repositories is using dockers ~/.docker/config.json.

ログインしといたら ~/.docker/config.json を使ってくれるってことね。

${docker.image.prefix}

プロパティを bufferings1 で定義しといた。

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  <java.version>1.8</java.version>
  <docker.image.prefix>bufferings1</docker.image.prefix>
</properties>

finalName

Dockerfileでプロジェクト毎にとか、バージョンが変わる毎に内容を書き換えるの面倒だったので finalName を固定しといた。僕は今回特に finalName を使ってないから別にいっかなって思って。

<finalName>app</finalName>

2. Dockerfileを書く

dockerDirectory で指定した src/main/docker の下に Dockerfile を置いとく。

FROM anapsix/alpine-java:8
VOLUME /tmp
ADD app.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

3. push する

ここを参考にして

https://github.com/spotify/docker-maven-plugin#usage

docker login したあとに、こうしたら

mvn clean package docker:build -DpushImage

Docker Hub に push される。(∩´∀`)∩ワーイ

おまけ .travis.yml

.travis.yml にこんな感じで書いといた

sudo: required

language: java
jdk:
  - oraclejdk8

cache:
  directories:
  - $HOME/.m2

services:
  - docker

script:
  - docker login -e="$DOCKER_EMAIL" -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
  - mvn -f auth-service clean package docker:build -DpushImage
  - mvn -f config-service clean package docker:build -DpushImage
  - mvn -f discovery-service clean package docker:build -DpushImage
  - mvn -f edge-service clean package docker:build -DpushImage
  - mvn -f kaiten-sushi-web clean package docker:build -DpushImage
  - mvn -f user-service clean package docker:build -DpushImage

https://hub.docker.com/u/bufferings1

f:id:bufferings:20161212071742p:plain

(∩´∀`)∩ワーイ