LoginSignup
2
2

More than 5 years have passed since last update.

DockerでSpringBoot+Mongoなアプリケーションを立ち上げる

Last updated at Posted at 2019-03-27

目標

SpringBoot+MongoDBなアプリケーションをDockerで起動するサンプルを作る。

リポジトリ

構築

docker-compose.yml

docker-compose.yml
version: '3.1'

services:

  mongo:
    image: mongo:latest
    volumes:
      - ./mongodb/data/db:/data/db
      - ./docker-entrypoint-initdb.d/:/docker-entrypoint-initdb.d/
    command: ["mongod", "--smallfiles", "--logpath=/dev/null"]

  example-application:
    build: ./
    image: iwanagat85:example-application
    volumes:
      - ./logs:/app/logs
    ports:
      - 8080:8080
    depends_on:
      - mongo
    restart: always
    links:
      - mongo

Dockerfile

  • MongoDBの立ち上がりまでアプリの起動を待つためにDocker公式に書いてあったスクリプトを参考に。
  • Gradleで ./build/libs にスクリプトをコピーする方法も考えたけど、RUNで出力するほうが性に合った。
Dockerfile
FROM openjdk:8-jdk-alpine

WORKDIR /app

COPY ./build/libs /app

RUN : "make wait.sh" && { \
  echo "#!/bin/sh"; \
  echo "# wait.sh"; \
  echo ""; \
  echo "set -e"; \
  echo "HOST_NAME=\${1}"; \
  echo "host=\${HOST_NAME%:*}"; \
  echo "port=\${HOST_NAME#*:}"; \
  echo "shift"; \
  echo ""; \
  echo "cmd=\"\$@\""; \
  echo ""; \
  echo "while !(nc -z \${host} \${port}) ; do"; \
  echo "    echo \"Waiting \${host}:\${port} to initialize...\""; \
  echo "    sleep 2"; \
  echo "done"; \
  echo ""; \
  echo ">&2 echo \"Executing command: \${cmd}\""; \
  echo "exec \${cmd}"; \
} | tee /app/wait.sh


CMD ["sh", "wait.sh", "mongo:27017", "java", "-jar", "spring-boot-docker-1.0.0-SNAPSHOT.jar"]

build.gradle

  • Gradleでイメージの作成を行う。
  • 最初はDocker内でclone→buildしてみたけど、イメージのサイズが信じられないくらい膨れ上がったので止め。
  • --no-cache--force-rm を入れてもいい。
task execDockerCompose(type: Exec) {
    commandLine 'docker-compose', 'build', '--force'
}

task buildDockerImages(group: 'build', type: GradleBuild) {
    tasks = ['clean', 'build', 'bootJar', 'execDockerCompose']
}

ディレクトリ構成

.
├── .dockerignore
├── .gitignore
├── Dockerfile
├── build.gradle
├── docker-compose.yml
├── docker-entrypoint-initdb.d
│   └── init.js
├── gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    └── test

実行

$ ./gradlew buildDockerImages
$ docker-compose up

その他

  • 開発中はmongohosts127.0.0.1として登録して、mongoだけ立ち上げていた。
  • もっと他に良い方法がありそう。
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2