DockerでPostgreSQL環境を構築する方法(ハンズオン)

Docker_PostgreSQL

こんにちはフロントエンドエンジニアのまさにょんです!

今回は、DockerでPostgreSQL環境を構築する方法について解説していきます。

DockerでPostgreSQL環境を構築する方法(ハンズオン)

現在、参画中のプロジェクトのDBがPostgreSQLで、LocalでSQLのTestをしたかったためDockerで環境を構築してみました。

PostgreSQLを構築するディレクトリを作成する

次のコマンドで、PostgreSQLを構築するディレクトリを作成します。

mkdir PostgreSQL_Test && cd PostgreSQL_Test

Dockerfileを作成する

続いて、Dockerfileを作成します。

touch Dockerfile

Dockerfileファイルを開きます。

open Dockerfile

Dockerfileに、次の内容を記載してください。

FROM postgres:11-alpine

# Time Zone
ENV TZ Asia/Tokyo

# Language
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8

DockerfileからDocker imageを作成する

PostgreSQL_Testの状況は、次のとおりです。

PostgreSQL_Test % ls -al
total 8
drwxr-xr-x   3 suda  staff   96  4 13 10:09 .
drwx------+ 23 suda  staff  736  4 13 10:07 ..
-rw-r--r--@  1 suda  staff  132  4 13 10:09 Dockerfile

次のコマンドで、DockerfileからDocker imageを作成します。

docker image build -t postgres_test .

コマンドの説明は、次のとおりです。

  1. docker image build : Dockerfileを元にDocker imageを build(作成)するコマンドです。
  2. -t : ビルドするイメージに名前を付ける(tag付けする)ためのオプションです。
  3. . : 最後の「 . 」は、DockerfileまでのPathを表します。指定は絶対パス・相対パス、どちらでもOKです。

docker image ls をすると、imageの中に先ほどDockerfileから作成したpostgres_test というDocker imageがあります。

docker image ls
REPOSITORY                         TAG       IMAGE ID       CREATED         SIZE
postgres_test                      latest    0e614b7f2a75   13 days ago     233MB
nginx                              1.21      8f05d7383593   10 months ago   134MB
mailhog/mailhog                    v1.0.1    4de68494cd0d   2 years ago     392MB

DockerでPostgreSQLを立ち上げる

次のコマンドで、PostgreSQLのコンテナを立ち上げます。

docker container run --name postgres_db -e POSTGRES_PASSWORD=postgres -p 5435:5432 -d postgres_test

上記のコマンドで、1つのDockerコンテナ内にPostgreSQLが構築されます。

コマンドの説明は、次のとおりです。

  1. docker container run:Docker imageからcontainerを作成 & 起動するコマンドです。
    • docker container createdocker container startの機能を組み合わせたコマンド。
    • docker container createは、新しいコンテナを作成するために使用するコマンド。
    • docker container start は、既存のコンテナを開始するために使用するコマンド。
  2. --name postgres_db : コンテナの名前をpostgres_dbに設定します。
  3. -e POSTGRES_PASSWORD=postgres : -eオプションは環境変数(env)を設定するために使用します。
    • PostgreSQLのパスワードをpostgresに設定します。
  4. -p 5435:5432 : ホストマシンのポート5435をコンテナのポート5432にマッピングします。
    • コンテナ内のPostgreSQLデータベースに接続するために、ホストマシンからlocalhost:5435でアクセスできます。
    • -p は、portの略です。
  5. -d : -d は、コンテナをバックグラウンドで実行するためのオプションです。
    • -dは「デタッチ(detach)モード」を意味します。
    • attachは「取り付け」で、detachは「切り離す」という意味。
    • 切り離して、バックグラウンドで実行させるような意味合い。
  6. postgres_test : コンテナのベースとなるimage名を指定しています。

docker container ps でコンテナが起動していることを確認します。

イメージ名 postgres_test をベースとした、コンテナ postgres_db が起動していることがわかります。

PostgreSQL_Test % docker container ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                   NAMES
c7a0dcc9fc88   postgres_test  "docker-entrypoint.s…"   5 seconds ago   Up 5 seconds   0.0.0.0:5435->5432/tcp  postgres_db

PostgreSQLにログインする

最後に、PostgreSQLにログインします。

次のような形で、PostgreSQLにログインすることができます。

psql -h ホスト名 -p ポート番号 -U ユーザ名 データベース名

今回の場合は、ホストマシンのポートは5435で、コンテナ内のPostgreSQLポート(5432)と接続しているので、次のような指定になります。

psql -h localhost -p 5435 -U postgres postgres

パスワードを入れて、ログインしたら \l コマンドでDB一覧を確認します。

PostgreSQL_Test % psql -h localhost -p 5435 -U postgres postgres
Password for user postgres: 
psql (12.14, server 11.19)
Type "help" for help.

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 
 template0 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(3 rows)

これで、DockerでPostgreSQL環境を構築ができました。

Dockerの学習・参考書

最近の投稿