0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker で API サーバーと DB を立てて接続するまで

Last updated at Posted at 2024-11-26

概要

個人開発で Docker 非常に便利ですね。
今回は Docker で APIサーバー と DB を立てて、APIサーバー から DB に接続するまでをまとめます。
DB には Postgres を採用しています。
一つ一つ解説することはしませんが、コピペすれば動くはずなので、動かして気になったところを調べていくと良いと思います。

前提

  • Docker がインストールされていること

使用技術

  • Docker
  • PostgreSQL

手順

  1. Dockerfle 作成
  2. docker-compose.yml 作成
  3. コンテナ作成
  4. DB 接続

フォルダ構成

docker/
  ├ docker-compose.yml
  └ Dockerfile

1. Dockerfile 作成

Dockrfile では既存のイメージを pull して、その上に自分で必要なものを付け足すことができますが、今回は説明を簡単にするため、付け足した部分は省略します。

次のような Dockerfile を作成します。

# api-server
FROM eclipse-temurin:23-jdk AS api-server

#db
FROM postgres:15.4-alpine AS db

eclipse-temurin:23-jdkpostgres:15.4-alpine の部分は自身で使用したい言語とDBのイメージに置き換えてください。

2. docker-compose.yml 作成

次はイメージからコンテナを立てる際の手順書に相当する docker-compose.yml を作成します。

services:
  app:
    container_name: api-server
    build:
      context: .
      target: api-server
      dockerfile: ./Dockerfile
    tty: true
    ports: ['8080:8080']
    networks:
      - app-network
    depends_on:
      - db
    volumes:
      - ../api:/java_project/
  db:
    container_name: db
    build:
      context: .
      target: db
      dockerfile: ./Dockerfile
    environment:
      POSTGRES_DB: 'test-db'
      POSTGRES_USER: 'user'
      POSTGRES_PASSWORD: 'password'
      POSTGRES_HOST: 'localhost'
    ports: ['5432:5432']
    networks:
      - app-network
    volumes:
      - postgres:/var/lib/postgresql/data

volumes:
  postgres:

networks:
  app-network:
    driver: bridge

build > dockerfile で参照する dockerfile を指定し、
build > target で元となるイメージを指定します。
この target に指定するのは DockerfileAS 以降の部分です。

db > environment の各値は適宜書き換えてください。

app > volumnes../api:/java_project/ では APIサーバー に乗せたいソースをコンテナにマウントしています。私の場合、docker フォルダと同じ階層に api というjavaのプロジェクトフォルダがあるので、それを指定しています。

3. コンテナ作成

カレントディレクトリ下に docker フォルダがあることを確認してください。

下記コマンドで Dockerfile のイメージを pull します

docker-compose -f ./docker/docker-compose.yml build

その後、下記コマンドでコンテナを作成します

docker-compose -f ./docker/docker-compose.yml up -d

コンテナが問題なく立っているかを確認します。
下記コマンドで、ターミナルを操作するようにコンテナにコマンドを投げられます。ここでは、DBにSQLを投げています。

docker exec -it db psql -U user test-db -c "SELECT 'KIPFEL'"

次のような結果が返っていれば問題ありません

 ?column? 
----------
 KIPFEL
(1 row)

4. DB 接続

APIサーバーとDBは docker-compose.ymlnetwork で作成した app-network で繋がっているので、APIサーバーから

url: "jdbc:postgresql://db:5432/vrcs-db"
userName: "user"
password: "password"

を指定すれば接続できます。
jdbc:postgresql の部分はデータベースドライバなので postgres 以外を使用する場合は適切なドライバ名に書き換える必要があります。また、psotgres を使用する場合でもドライバを依存関係に追加するか直接ダウンロードする必要があります。

java で postgres のドライバを追加する場合の参考
=>https://mvnrepository.com/artifact/org.postgresql/postgresql/42.7.4

おわりに

初めての投稿で説明の至らぬところもあったとは思いますが、参考になれば幸いです。
何か誤りや不正確な点があればご指摘ください。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?