LoginSignup
1
2

Docker-composeを使ってJava(spring-boot)+Postgresqlの実行環境をコンテナ化してみた

Posted at

目的

今まではJavaのみ、DBのみのコンテナ起動でしたが同時に設定させて動かしてみようというのが今回の目的になります。
実際のプロジェクトでもJavaのビルド資源はGit管理せず、CICDを使ってビルドデプロイしていくと思うので、
事前にJavaのJarファイルは用意(ビルド)しておき、そのJarファイルをコンテナに上げてコンテナで起動(デプロイ)したときにDB含めてちゃんと起動することを確認するといった流れですね。

使用するコマンド一覧

Dockerコマンド
コンテナを起動起動させる
docker-compose up -d 

//コンテナを終了させる
docker-compose down

起動しているコンテナの中にはいるコマンド
docker-compose exec #{container} bash

補足
-dオプション:バックグラウンドで動かしてくれるのでターミナルがそのまま使える

Docker設定

Dockerファイル
image.png
※補足
コンテナ内でgradlewビルドを行う際はRUN microdnf findutilsは必ず設定してください。コンテナ内でgradlewビルドを行った際に使用するコマンドがコンテナに不足しているのでインストール設定を入れておく必要があるようです。

Docker-composeファイル

  • 基本的にはそのままでよいと思いますが、「./build/libs」にてjarファイルをコンテナのルートディレクトリに直接配置してます。
docker-compose.yml
version: '3'
services:
  # Javaの設定情報
  java:
    # コンテナ名
    container_name: spring
    build: ./java
    ports:
     - "8080:8080"
    # local参照先:コンテナ展開先
    volumes:
    - ./build/libs:/app
    # コンテナ内のディレクトリ定義
    working_dir: /app
    tty: true
    
  # postgresの設定情報
  postgres:
    # コンテナ名
    container_name: sample-db
    # ビルドするDockerImageが格納されているディレクトリ
    build: ./postgres
    # OS起動時に自動でコンテナを起動させる(=always)
    restart: always
    # hostポート番号:コンテナポート番号
    ports: 
      - "5432:5432"
    # 初期SQL
    volumes:
      - ./postgres/init:/docker-entrypoint-initdb.d
    environment:
      POSTGRES_USER: "postgres"
      POSTGRES_PASSWORD: "postgres"
    expose:
      - "5432"

動かしてみる

1.ビルド

まずは作成したdocker-composeファイルもとにコンテナを起動してもらいたいので以下のコマンドで起動します。
※doker-composeファイルの変更を繰り返していたのでbuildコマンドを使用してますがbuildコマンドは必須で使用しなくても大丈夫です。

docker-compose up -d (-- build)

実行サンプル
image.png

2.コンテナに入りJarファイル実行

以下の実行コマンドでコンテナ内に入る。
※今回設定ファイル上、ServiceをJavaと定義しているので実行する際もそろえること。

docker-compose exec java bash

以下の実行コマンドでjarファイルを実行する。
※あらかじめgradlewビルドした時のjarファイルを指定してます。

実行コマンド
java -jar Sample3-0.0.1-SNAPSHOT.jar

実行サンプル
image.png

3.起動確認

Spring起動
2のjarファイル実行ができるとSpringが起動してくれる。
image.png

リクエスト確認
実際に今回のControllerクラスにリクエストを投げてみると
コンテナ内のローカルホストにアクセスしてレスポンスが表示されていることを確認できる。
image.png

コンテナの起動ステータス
DockerDesktop内のコンテナ状況はこんな感じ。
今回のJava(コンテナ名:spring)とDB側(コンテナ名:sample-db)の二つがちゃんと起動したうえでコンテナ内にアクセスできることを確認。
※DBについては前回立ち上がっていることを確認済みで、今回設定を何も変更していないのでコンテナ起動のみ確認。
image.png

最後に

細かいエラーはあったので試行錯誤しながらでしたが結構サクサクで起動できました。
大まかな部分は理解が進むとさらにスムーズに実装できそうです。
一人でも多くの助けになれば幸いです。
次は、hello worldじゃなくて投げたリクエストのパラメータをもとにDBから情報取得して返却するのをコンテナで表現させたいですね。
コンテナ周りの知識というより、JDBCとかMybatisとかそっちに寄っちゃいそうですが。。。

1
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
1
2