はじめに
今回は、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 >>