Dockerコンテナ作成 PostgreSQL

投稿日: 2024年7月13日

Dockerのコンテナを作成するときはDocker Composeを使います。
Docker Composeは、複数のDockerコンテナを一括して定義・管理・実行するためのツールです。
Composeを使用すると、アプリケーションのサービス(Webサーバー、データベース、キャッシュ、メッセージブローカーなど)を個別のコンテナとして定義し、それらをまとめて一つの環境として扱うことができます。

PostgreSQLとPgAdminのcompose.yaml

services:
  postgres:
    image: postgres:15
    volumes:
      - db-data:/var/lib/postgresql/data  # 初期データをマウントする場所
    environment:
      POSTGRES_DB: purchasing_management
      POSTGRES_USER: testuser
      POSTGRES_PASSWORD: testpass
      TZ: 'Asia/Tokyo'
    ports:
      - "5432:5432"
  pgadmin:
    image: dpage/pgadmin4:latest
    depends_on:
      - postgres
    environment:
      PGADMIN_DEFAULT_EMAIL: admin@admin.com
      PGADMIN_DEFAULT_PASSWORD: admin
    ports:
      - "8080:80"
    volumes:
      - pgadmin-data:/var/lib/pgadmin
volumes:
  db-data:
  pgadmin-data:

YAMLの解説

Postgresの部分

  • image: postgres:15
    • 使用するPostgresのイメージを指定します。ここではバージョン15を使用しています。
  • volumes:
    • db-data:/var/lib/postgresql/data
      • volumes: データの永続化のための設定。db-dataという名前のボリュームを/var/lib/postgresql/dataにマウント。これにより、コンテナが停止してもデータが保持される。
  • environment: 環境変数の設定。
    • POSTGRES_DB:起動時に作成するデータベースの名前を指定します。(purchasing_management)。
    • POSTGRES_USER: データベースにアクセスするユーザー名(testuser)。
    • POSTGRES_PASSWORD: 作成するユーザーのパスワードを指定します。(testpass)。
    • TZ: タイムゾーンをAsia/Tokyoに設定します。
  • ports: ホストとコンテナ間のポートのマッピング。5432:5432は、ホストの5432ポートをコンテナの5432ポートにマッピング。

Pgadminの部分

  • image: dpage/pgadmin4:latest
    • 使用するDockerイメージ。ここではdpage/pgadmin4:latestを使用。
  • depends_on:
    • postgres
      • このサービスが依存する他のサービス。ここではpostgresが起動してからPgadminが起動します。
  • environment: 環境変数の設定。
    • PGADMIN_DEFAULT_EMAIL: pgAdminにログインするためのデフォルトのメールアドレス(admin@admin.com)。
    • PGADMIN_DEFAULT_PASSWORD: デフォルトのパスワード(admin)。
  • ports: ホストとコンテナ間のポートのマッピング。
    • 8080:80は、ホストの8080ポートをコンテナの80ポートにマッピングします。これにより、ホストからhttp://localhost:8080でPgadminにアクセスできます。
  • volumes:
    • pgadmin-data:/var/lib/pgadmin
      • データの永続化のための設定。pgadmin-dataという名前のボリュームを/var/lib/pgadminにマウント。

volumesセクション

  • volumes: 定義されたボリュームのリスト。
    • db-data: PostgreSQLデータの永続化のためのボリューム。
    • pgadmin-data: pgAdminデータの永続化のためのボリューム。

このYAMLファイルは、PostgreSQLデータベースとpgAdminを簡単にセットアップし、データを永続化するための設定を提供します。

Docker Desktopでコンテナを作成

Docker Desktopでコンテナを作成するにはDocker Desktopを起動しておきます。
その次にPowerShellを起動し、compose.yamlファイルを保存したフォルダに移動します。
例:「C:\MyProgram\22_Docker\postgresql」にcompose.yamlがある場合は下のように「cd」コマンドを使てフォルダを移動させます。

cd C:\MyProgram\22_Docker\postgresql

次に「docker compose up -d」と入力します。下の画像を参考にしてください。入力が完了したらエンターを押します。

コンテナが作成されていきます。暫くすると完了します。完了後はPowerShellを閉じても問題ありません。

Docker Desktopに戻るとContainersの中に先ほど作成したpostgresqlが表示されます。Actionの項目で「start」と「stop」がクリックで操作可能になります。

1.PgAdminの接続方法

次に矢印の>をクリックし、その中のpgadminのポートの部分をクリックするとpgadminが立ち上がります。

このようにpgadminの画面になります。usernameとpasswordはyamlで設定した内容を入力します。
Username:admin@admin.com
Password:admin

2.PostgreSQLと接続

PgAdminにログインできたらPostgreSQLに接続できるようにします。Serviceで右クリックをしRegisterを選んでServerを選択します。

Register-Serverのモーダルが起動します。その中のGeneralタブにサーバー名を付けます。ここではtestと入力しています。

Connectionでcompose.yamlで設定した値を入れて行きます。Host nameは「depents_on」はyamlで設定した「postgres」を入力します。「Username」と「Password」はyamlで設定したUsernameとPasswordを入力します。完了したらSaveをクリックします。

3.データベースにテーブルを作成する。

Service(1)を展開していきyamlで設定したDBまで展開します。そこで右クリックしQueryToolを選択します。

下記のSQLデータ(サンプル)を入れる。

-- Create the products table
CREATE TABLE products (
    product_code VARCHAR(10) PRIMARY KEY,
    product_name VARCHAR(100),
    unit_price DECIMAL(10, 2),
    product_category VARCHAR(50)
);

-- Insert sample data for clothing products
INSERT INTO products (product_code, product_name, unit_price, product_category) VALUES
('C001', 'Tシャツ', 1500, 'Clothing'),
('C002', 'ジーンズ', 5099, 'Clothing'),
('C003', 'ジャケット', 8990, 'Clothing'),
('C004', 'セーター', 3999, 'Clothing'),
('C005', 'ワンピース', 5999, 'Clothing'),
('C006', 'スカート', 3599, 'Clothing'),
('C007', 'ショートパンツ', 2599, 'Clothing'),
('C008', 'ブラウス', 2999, 'Clothing'),
('C009', 'コート', 10000, 'Clothing'),
('C010', 'パーカー', 5000, 'Clothing'),
('C011', 'ポロシャツ', 2000, 'Clothing'),
('C012', 'カーディガン', 5000, 'Clothing'),
('C013', 'ジャージ', 6000, 'Clothing'),
('C014', 'レギンス', 2000, 'Clothing'),
('C015', 'タンクトップ', 1300, 'Clothing'),
('C016', '水着', 4500, 'Clothing'),
('C017', '靴下', 1000, 'Clothing'),
('C018', '手袋', 1500, 'Clothing'),
('C019', '帽子', 2500, 'Clothing'),
('C020', 'スカーフ', 2000, 'Clothing');

サンプルのSQLデータを入れ終わったら「▶」マーク又はF5キーを押すとSQLが実行されます。

実行後はデータベース内のスキーマのテーブルに先ほどのSQLデータが作成されています。無い場合はデータベースを更新をします。更新は「F5」キーを押せば更新になります。

以上でDocker Desktopでコンテナを作成後の実行方法とテーブル作成になります。

記事