どうも、nippa です。
テスト用の PostgreSQL 環境が必要になったのですが、VM で OS からインストールするのは時間がかかる、かつ
直接マシンにインストールすると後始末が面倒だということで、Docker を使うことにしました。
今回は Docker を利用して PostgreSQL サーバの環境を構築したいと思います。
環境
- macOS 10.15
- Docker 20.10
- PostgreSQL 11-alpine
Docker のインストール
Docker のインストールは、公式サイトからインストーラーをダウンロードしてインストールします。
詳しくはこちらの記事を確認ください。
Docker + PostgreSQL の構築
構築の流れは以下の通りです。
- PostgreSQL の Docker のイメージをダウンロード
- Dockerfile の作成
1. Docker のイメージをダウンロード
Docker のコアとなる image をダウンロードします。
docker image pull [image name] #今回は ubuntu 20.04 docker image pull postgres:11-alpine
ダウンロードしたイメージの確認
docker image ls # 結果 REPOSITORY TAG IMAGE ID CREATED SIZE postgres 11-alpine 283664b901ee 2 weeks ago 188MB
2. Dockerfile の作成
Dockerfile を作成します。
設定としては以下の通りです。
- OS: Ubuntu 20.04
- タイムゾーン: TAsia/Tokyo
- 言語: 日本語
- PostgreSQL 11-alpine
ここではファイル名は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
3. Dockerfile からイメージ作成
Docker image をビルドします。
# イメージ名を指定して Docker imageのビルド docker build -t [image name] . # image名を postgres11-ja として作成 docker build -t postgres11-ja .
イメージが作成されていることを確認します。
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
postgres11-ja latest 2fb039802ce9 2 weeks ago 188MB
postgres11-ja
という名でイメージが作成されています。
4. 作成したイメージから container を起動
container name
とimage name
を指定してコンテナを起動します。
起動時のオプションでパスワード、Listen ポートを指定します。
docker run --name postgres -e POSTGRES_PASSWORD=postgres -p 5432:5432 -d postgres
コンテナの起動を確認します。
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fb9bb88dab01 postgres "docker-entrypoint.s…" 6 seconds ago Up 4 seconds 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp postgres
上記の出力がされればコンテナ名:postgres で起動しています。
念の為、ポート状態を確認します。
lsof -i:5432
postgres がポート番号 5432 を利用していることを確認します。
5. PostegreSQL にアクセス
以下のコマンドで psql でデータベースにログインします。
psql -U postgres -d postgres -h localhost
実行するとパスワード起動時にPOSTGRES_PASSWORD
で指定したパスワードでログインが可能となります。
感想
今回は docker で PostgreSQL のコンテナし、作成起動までを行いました。
VM で PosgreSQL を用意するよりはるかに簡単にサーバ環境を用意することができました。
次回は、docker-compose でもう少し便利な使い方をまとめたいと思います。
ではでは、また次回。