概要
個人開発で Docker 非常に便利ですね。
今回は Docker で APIサーバー と DB を立てて、APIサーバー から DB に接続するまでをまとめます。
DB には Postgres を採用しています。
一つ一つ解説することはしませんが、コピペすれば動くはずなので、動かして気になったところを調べていくと良いと思います。
前提
- Docker がインストールされていること
使用技術
- Docker
- PostgreSQL
手順
- Dockerfle 作成
- docker-compose.yml 作成
- コンテナ作成
- 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-jdk と postgres: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 に指定するのは Dockerfile の AS 以降の部分です。
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.yml の network で作成した 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
おわりに
初めての投稿で説明の至らぬところもあったとは思いますが、参考になれば幸いです。
何か誤りや不正確な点があればご指摘ください。