【Docker】Docker 上で PostgreSQL サーバーを構築する

どうも、エピックです。

この記事ではMacのDocker 上で PostgreSQL サーバーを構築する方法についてメモします。

環境は次のとおり。

  • MacBook pro (13-inch, 2018)
  • 2.7 GHz クアッドコアIntel Core i7
  • macOS Monterey (v12.3.1)
目次

ワークスペースとDocker Composeファイルを作成

Dockerのバージョンは次のようになっています。

$ docker --version
Docker version 20.10.14, build a224086

デスクトップに次のフォルダ、ファイル構成でワークスペースを作成します。

Docker Compose を使って構築していくので、postgresフォルダと同一階層にdocker-compose.yml 配置します。

docker-composeのコードはこんな感じになっています。

version: '3'

services:
  postgres:
    container_name: postgres_sample
    build:
      context: .
      dockerfile: ./postgres/Dockerfile
    networks:
      - sample_network
    ports:
      - "5432:5432"
    volumes:
      - sample_volume:/var/lib/postgres
    restart: always
    environment:
      POSTGRES_USER: testuser
      POSTGRES_PASSWORD: rootpass
      POSTGRES_DB: sns
      TZ: 'Asia/Tokyo'

networks:
  sample_network:

volumes:
  sample_volume:

定義ファイルの書式はYAML形式で、ファイル名もdocker-compose.ymlで固定です。

  • フェイル形式:YAML形式
  • ファイル名:docker-compose.yml

Docker Compose は一見ややこしく見えますが、基本構成はいたってシンプルで次のようになっています。

参考にしてください。

version: 3 ⇦ Dockerエンジンに対応したDocker Composeのバージョンを書く
services: ⇦ コンテナの情報を書く
networks: ⇦ ネットワークの情報を書く
volumes: ⇦ ボリュームの情報を書く

コンテナ情報は別のDockerファイル(sample_volume:/var/lib/postgres)で定義していきます。

PostgreSQL の設計

次のようにDockerファイルを作成します。

場所はpostgresフォルダを作ってその中に配置します。

# https://hub.docker.com/_/postgres
FROM postgres:14.4
COPY ./postgres/init /docker-entrypoint-initdb.d

Dockerファイルの記載内容自体は非常にシンプルです。

ベースイメージは、オフィシャルからでている postgres のイメージを使います。

それぞれのコマンドの役割は次の通りです。

  • FROM:コンテナのベースイメージを指定
  • COPY:ファイルをイメージ上へコピー

ベースイメージに対し、COPYで実行用のスクリプトをinitフォルダにコピーしてカスタマイズしてあげます。

注意点としては、今回 docker-compose.yml 上で Context を定義しているので、COPY で指定するファイルの場所がフォルダトップ階層からのパスとなっています。

ここの Quiita で解説してくれてますが、contextの定義した場所 = docker buildコマンドを実行した場所 となります。

Quita[docker-compose.ymlのbuild設定はとりあえずcontextもdockerfileも埋めとけって話」

COPYでは init フォルダを丸ごとコピーしてあげてますが、/docker-entrypoint-initdb.d フォルダ配下にファイルを配置してあげるとコンテナ作成時に自動で実行してくれます。

例えば次のようなSQLファイルを作成しています。

CREATE DATABASE sample_database;
USE sample_database;

CREATE TABLE users(
	userId		int(11)	PRIMARY KEY AUTO_INCREMENT,
	userName	varchar(64),
	profile		varchar(128)
);

今回はinitフォルダごとCOPYしているのでその他の実行ファイルを格納しておけば全て自動で実行してくれるはずです。

コマンドを実行していく

トップの workspace_mysql ディレクトリへ移動します。

cd workspace_mysql

docker-compose.yml をもとにコンテナを一気に立ち上げます。

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

これで完了です。

あとは、コンテナが立ち上がっているかの確認をおこなったり、

docker ps -a

MySQLコンテナの中に入ってデータベースが作成されているか確認してみてください。

docker exec -it postgres_sample bash
psql -d postgres
\c sample_database;
\d テーブル名;

最後に

今回はMacのDocker 上で PostgresSQL サーバーを構築する方法ついて書いてみました。
もしわからないこと等あればコメントにていただけれればと思います。

今回も最後までお読みいただきありがとうございました。

では。

目次