こんにちはフロントエンドエンジニアのまさにょんです!
今回は、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 .
コマンドの説明は、次のとおりです。
docker image build
: Dockerfileを元にDocker imageを build(作成)するコマンドです。-t
: ビルドするイメージに名前を付ける(tag
付けする)ためのオプションです。.
: 最後の「 . 」は、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が構築されます。
コマンドの説明は、次のとおりです。
docker container run
:Docker imageからcontainerを作成 & 起動するコマンドです。docker container create
とdocker container start
の機能を組み合わせたコマンド。docker container create
は、新しいコンテナを作成するために使用するコマンド。docker container start
は、既存のコンテナを開始するために使用するコマンド。
--name postgres_db
: コンテナの名前をpostgres_dbに設定します。-e POSTGRES_PASSWORD=postgres
:-e
オプションは環境変数(env)を設定するために使用します。- PostgreSQLのパスワードをpostgresに設定します。
-p 5435:5432
: ホストマシンのポート5435をコンテナのポート5432にマッピングします。- コンテナ内のPostgreSQLデータベースに接続するために、ホストマシンからlocalhost:5435でアクセスできます。
- -p は、portの略です。
-d
: -d は、コンテナをバックグラウンドで実行するためのオプションです。- -dは「デタッチ(detach)モード」を意味します。
- attachは「取り付け」で、detachは「切り離す」という意味。
- 切り離して、バックグラウンドで実行させるような意味合い。
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環境を構築ができました。