Docker ComposeでMySQLとPostgreSQLを扱うサンプルコード
Docker Compose は、複数のコンテナをまとめて定義し、起動、停止、管理できるツールです。データベースコンテナも例外ではなく、Docker Compose を利用して複数のデータベースコンテナを簡単に管理することができます。
メリット
Docker Compose で複数のデータベースを扱うメリットは以下の通りです。
- 環境構築の簡素化: 個別にコンテナを起動するよりも、まとめて定義することで、データベース環境を簡単に構築できます。
- スケーラビリティ: 必要なに応じて、データベースコンテナを簡単に追加・削除できます。
- 再現性: 定義ファイルを共有することで、開発者間でデータベース環境を簡単に共有できます。
具体的な方法
- docker-compose.yml ファイルを作成する: このファイルには、起動するデータベースコンテナとその設定を記述します。
- 各データベースコンテナを定義する: コンテナ名、使用するイメージ、ポート番号、環境変数などを定義します。
- ネットワークを定義する (必要に応じて): 複数のデータベースコンテナ間で通信できるように、ネットワークを定義する必要があります。
- docker-compose up コマンドを実行する: このコマンドを実行すると、定義したすべてのコンテナが起動されます。
例
以下の例は、MySQL と PostgreSQL の 2 つのデータベースコンテナを起動する docker-compose.yml
ファイルです。
version: "3.8"
services:
mysql:
image: mysql:5.7
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: db_mysql
postgresql:
image: postgres:12
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: password
POSTGRES_DB: db_postgresql
このファイルを docker-compose up
コマンドで実行すると、MySQL コンテナと PostgreSQL コンテナが起動し、それぞれ db_mysql
と db_postgresql
という名前のデータベースが作成されます。
補足
- 上記はあくまでも基本的な例であり、状況に応じて様々な設定を追加することができます。
- データベースによっては、特別な設定が必要なものもあります。
- 本番環境で Docker Compose を使用する場合は、セキュリティ対策をしっかりと行ってください。
docker-compose.yml ファイル
version: "3.8"
services:
mysql:
image: mysql:5.7
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: db_mysql
postgresql:
image: postgres:12
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: password
POSTGRES_DB: db_postgresql
コンテナの起動
docker-compose up -d
MySQL に接続
docker exec -it mysql mysql -u root -p -h 127.0.0.1 -D db_mysql
PostgreSQL に接続
docker exec -it postgres psql -U postgres -h 127.0.0.1 -d db_postgresql
説明
mysql
サービスは、MySQL 5.7 イメージを使用して起動されます。ポート 3306 がホストポートにマップされ、MYSQL_ROOT_PASSWORD
とMYSQL_DATABASE
環境変数が設定されます。docker exec
コマンドを使用して、コンテナ内にシェルを起動し、データベースクライアントを実行できます。- 上記の例では、
mysql
コマンドを使用して MySQL に接続し、psql
コマンドを使用して PostgreSQL に接続します。
- 実際の環境では、パスワードを安全な方法で設定する必要があります。
- データベースにアクセスするには、適切な権限を持つユーザーアカウントを使用する必要があります。
- 詳細については、それぞれのデータベースのドキュメントを参照してください。
Docker Compose 以外の方法
個別にコンテナを起動する
Docker Compose を使用せずに、個別にコンテナを起動することもできます。
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=db_mysql mysql:5.7
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=password -e POSTGRES_DB=db_postgresql postgres:12
この方法では、各コンテナの設定を個別に管理する必要があります。
Dockerfile を使用して、独自のデータベースイメージを作成することもできます。
FROM mysql:5.7
ENV MYSQL_ROOT_PASSWORD=password
ENV MYSQL_DATABASE=db_mysql
RUN apt-get update && apt-get install -y some-dependencies
CMD ["mysqld"]
この方法では、データベースの設定をイメージ内に埋め込むことができます。
Kubernetes は、コンテナをオーケストレーションするためのプラットフォームです。Kubernetes を使用して、複数のデータベースコンテナをデプロイし、管理することができます。
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-root-password
key: password
- name: MYSQL_DATABASE
value: db_mysql
ports:
- containerPort: 3306
この方法は、より複雑な環境で複数のデータベースを管理するのに適しています。
- シンプルな環境 で複数のデータベースを扱う場合は、Docker Compose または 個別にコンテナを起動する 方法がおすすめです。
- データベースの設定をイメージ内に埋め込む 必要がある場合は、Dockerfile を使用する必要があります。
- より複雑な環境 で複数のデータベースを管理する場合は、Kubernetes を使用する必要があります。
database docker docker-compose