Docker

DockerにPostgreSQL環境を構築する

はじめに

今回は、Windows環境のDocker DesktopにPostgreSQL環境を作成します。以下記載するコマンドは何れもPowershellにて実行しています。

今回環境構築用のフォルダを作成
docker >> pwd

Path
----
D:\docker

docker >>
docker >> mkdir post153
docker >> cd post153
Dockerファイルの作成

今回は必要最低限の記載です。Dockerファイルのファイル名は必ずしもDockerfileでなくともよいですが、可読性の事を考慮するとデフォルトのまま運用する事をお勧めします。

post153 >> vim .\Dockerfile
post153 >> cat .\Dockerfile
FROM postgres:15.3
post153 >> ls


    ディレクトリ: D:\docker\post153


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2023/06/06     23:45            194 Dockerfile

post153 >>

postgreSQLのdockerイメージを取得(image pull)

このコマンドはDockerイメージをリモートリポジトリから取得するものです。以下はDocker HUBからオフィシャルのイメージを取得(docker pull)します。(当資料の前作業でDockerファイルを作成していますが、このimage pullコマンドでは使用しません)

docker image pull
docker image pull postgres:15.3
docker image pull 実行例
post153 >> docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
post153 >> docker image pull postgres:15.3
15.3: Pulling from library/postgres
f03b40093957: Pull complete
9d674c93414d: Pull complete
de781e8e259a: Pull complete
5ea6efaf51f6: Pull complete
b078d5f4ac82: Pull complete
97f84fb2a918: Pull complete
5a6bf2f43fb8: Pull complete
f1a40e88fea4: Pull complete
4be673794a1a: Pull complete
9d72f84fb861: Pull complete
5d52569da92e: Pull complete
5d48fbe991ff: Pull complete
4ae692d11ad3: Pull complete
Digest: sha256:31c9342603866f29206a06b77c8fed48b3c3f70d710a4be4e8216b134f92d0df
Status: Downloaded newer image for postgres:15.3
docker.io/library/postgres:15.3
post153 >> docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
postgres     15.3      0c88fbae765e   2 weeks ago   379MB
post153 >>
docker image pull について少し補足しています

Dockerイメージの作成(image build)

-t オプションで指定しているのはビルドするイメージ名で、 最後に指定している「.」はカレントに存在するDockerファイル(上記作成済)に基づいて作成する事を示しています。上記の通り今回、Dockerfileには「FROM postgres:15.3」と記載していますので、postgres:15.3 が今回作成イメージのベースイメージです。このイメージ名をまずローカルから探し存在しなければDocker HUBまで探しにいきます。

イメージのビルドコマンド
docker image build -t myposgreimage .
docker image buildの実行例
post153 >> docker image build -t myposgreimage .
[+] Building 0.4s (5/5) FINISHED
 => [internal] load build definition from Dockerfile                                                               0.0s
 => => transferring dockerfile: 262B                                                                               0.0s
 => [internal] load .dockerignore                                                                                  0.0s
 => => transferring context: 2B                                                                                    0.0s
 => [internal] load metadata for docker.io/library/postgres:15.3                                                   0.0s
 => [1/1] FROM docker.io/library/postgres:15.3                                                                     0.3s
 => exporting to image                                                                                             0.0s
 => => exporting layers                                                                                            0.0s
 => => writing image sha256:edcee230e3bd942bd8627a8d30308ff7d46e255e7aedd9b1aa8ecb6865765dca                       0.0s
 => => naming to docker.io/library/myposgreimage                                                                   0.0s
post153 >> 
docker image build について少し補足しています
イメージの確認
docker images
post153 >> docker images
REPOSITORY      TAG       IMAGE ID       CREATED       SIZE
postgres        15.3      0c88fbae765e   2 weeks ago   379MB
myposgreimage   latest    edcee230e3bd   2 weeks ago   379MB
post153 >>

Dockerコンテナの作成(container create)

簡単にPostgreSQLの動作を確認するだけなら不要ですが、PostgreSQLのコンテナを作成する場合データや各種設定ファイルが保存される/var/lib/postgresql/data は永続化をする必要があります。今回はバインドマウント方式にて永続化します。

docker container create --name pos153cont `
-v D:\docker\post153\pgdata:/var/lib/postgresql/data `
-e POSTGRES_DB=udondb `
-e POSTGRES_USER=postgres `
-e POSTGRES_PASSWORD=pospass `
-p 5432:5432 `
myposgreimage
docker container create について少し補足しています
作成したコンテナの確認
コンテナ一覧(停止しているコンテナも含む)
docker ps -a
post153 >> docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED       STATUS    PORTS     NAMES
1982ccf4285c   myposgreimage   "docker-entrypoint.s…"   2 hours ago   Created             pos153cont
post153 >>

コンテナの起動(container start )

コンテナ起動
docker container start pos153cont
post153 >> docker start pos153cont
pos153cont
post153 >> docker ps
CONTAINER ID   IMAGE           COMMAND                  CREATED       STATUS              PORTS                    NAMES
1982ccf4285c   myposgreimage   "docker-entrypoint.s…"   2 hours ago   Up About a minute   0.0.0.0:5432->5432/tcp   pos153cont
post153 >>

PostgreSQLへ接続

--
-- コンテナを作成する際、データベース名、ユーザ名、パスワードを指定していますので
-- それらを指定し以下接続します
--
PS D:\docker\post153> psql -h localhost -d udondb -U postgres
ユーザー postgres のパスワード:
psql (14.7、サーバー 15.3 (Debian 15.3-1.pgdg120+1))
警告: psql のメジャーバージョンは 14 ですが、サーバーのメジャーバージョンは 15 です。
         psql の機能の中で、動作しないものがあるかもしれません。
"help"でヘルプを表示します。

udondb=#

-- 無事接続せきました。当方の環境ではクライアントのバージョンが14なので
-- 上記のような警告出ていますがこれは問題なしです
-- 次に接続情報を確認してみます
-- 参考) https://oha-yo.com/postgresql/connect_info/
--
udondb=# select 1 as item_no,'current_database' as item_name,cast(current_database() as text) as item_value
udondb-# union select 2 as item_no,'version' as item_name,substring(version() from 'PostgreSQL [0-9|.]*') as item_value
udondb-# union select 3 as item_no,'inet_server_addr' as item_name,cast(inet_server_addr() as text) as item_value
udondb-# union select 4 as item_no,'inet_server_port' as item_name,cast(inet_server_port() as text) as item_value
udondb-# union select 5 as item_no,'current_user' as item_name,cast(current_user as text) as item_value
udondb-# union select 6 as item_no,'current_schema' as item_name,cast(current_schema() as text) as item_value
udondb-# union select 7 as item_no,'inet_client_addr' as item_name,cast(inet_client_addr() as text) as item_value
udondb-# order by item_no
udondb-# ;
 item_no |    item_name     |   item_value
---------+------------------+-----------------
       1 | current_database | udondb
       2 | version          | PostgreSQL 15.3
       3 | inet_server_addr | 172.19.0.2/32
       4 | inet_server_port | 5432
       5 | current_user     | postgres
       6 | current_schema   | public
       7 | inet_client_addr | 172.19.0.1/32
(7 行)


udondb=#

コンテナの停止

コンテナ停止コマンド
docker stop pos153cont
-- コンテナ名を指定して停止
--
post153 >> docker stop pos153cont
pos153cont
--
-- 停止したのでpsで出力されません
--
post153 >> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
--
-- -a オプションで見れます
--
post153 >> docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED       STATUS                      PORTS     NAMES
1982ccf4285c   myposgreimage   "docker-entrypoint.s…"   2 hours ago   Exited (0) 11 seconds ago             pos153cont
post153 >>

コンテナの削除

コンテナ削除コマンド
docker container rm pos153cont
-- 
-- コンテナ名を指定して削除
--          
post153 >> docker container rm pos153cont
pos153cont
post153 >>

--
-- -aオプションでも出力されなくなりました
--
post153 >> docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
post153 >>

IPアドレス指定でアクセスしたい場合はこちら

スポンサーリンク
コピペで使う