🐳

DockerのPostgresSQLでSQL文を実行できるようにする。

2022/10/18に公開約2,600字

はじめに

先日、ゼロから始めるデータベース(キリン本)という書籍をやっていました。
この書籍は最初にPostgresSQLの接続を行うのですが、windowsでの手順しか書いておらず、
右往左往してしまいました。
今回はDockerでPostgresSQlの環境をつくるという方法で解決したのでそれを共有しようと思います。

開発環境

  • mac OS
  • PostgreSQL 15.0
  • Docker Engine v20.10.17

今回の読者ターゲット

  • macでpostgresSQLに接続したい人
  • Docker知らないけど、とりあえず仮想環境でSQL文を実行したい人

Dockerをインストールする

まずはDockerhubに登録しましょう。
https://hub.docker.com/
こちらのサイトから作成してください。

  1. DockerID,Email、Passwordなどを入力する。
  2. メールを受け取る
  3. Dockerのアプリケーションをダウンロードして、Applicationにドラック&ドロップする。
    手順を踏んだらできると思います。

わからない人はこちらのサイトのDocker Hubの登録を見てください。詳しく書いています。
https://datawokagaku.com/startdocker/

あと今回はDockerがメインではないので説明は省きます。詳しく知りたい方は下記のUdemy教材がおすすめです。
https://www.udemy.com/course/aidocker/
作成者のかめれおんさんのブログに教材のクーポンがついてるので使用すれば教材が安くなります。
https://datawokagaku.com/docker_lecture/

postgresSQLをdocker hubからイメージを持ってくる

https://hub.docker.com/_/postgres
まずDockerイメージをプルアップするためにダウンロードします。
macのターミナルを開いて

$ docker pull postgres:alpine

docker hubのpostgresSQL(ホスト側から)自分のコンテナへpostgresSQLのイメージ(環境構築の設計書みたいなもの)をdocker hubからとってきます。

$ docker images
REPOSITORY  TAG       IMAGE ID       CREATED         SIZE
postgres    alpine    xxxxxxx   3 days ago      218MB

このように表記されていればダウンロードは完了です。

docker imageをもとに環境構築

このとってきた設計書をもとにdockerで環境構築をpostgresSQLの設定します。

$ docker run --name postgres-01 -e POSTGRES_PASSWORD=password -d -p 5432:5432 postgres:alpine
8169369c853b98fb488e6c5a21e8d077d4f551deb774bd535859bc70f83e7159

--name postgres-01の後ろは作成するコンテナの名前をつけています。(ここではpostgres-01とする)
-e POSTGRES_PASSWORD=passwordは環境設定をしています。今回はパスワードをpasswordとします。(ややこしいですが)
-d -p 5432:5432これをデタッチモードで実行して、ポート番号を指定します。
postgres:alpine 設計書を指定するみたいな感じです。
8169369c853b98fb488e6c5a21e8d077d4f551deb774bd535859bc70f83e7159はコンテナIDです。ここでは説明を省きます。
とりあえず環境構築されました。

実際に実行されているかどうかはdocker psコマンドでわかります。

$ docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS         PORTS                    NAMES
8169369c853b   postgres:alpine   "docker-entrypoint.s…"   3 minutes ago   Up 3 minutes   0.0.0.0:5432->5432/tcp   postgres-01

これで準備が整いました。

下記のコマンドを実行します。

$ docker exec -it postgres-01 bash
bash-5.1# psql -U postgres
psql (15.0)
Type "help" for help.

postgres=# 

bashコマンドで実行したら、コンテナの中に入れます。
あとはpsqlにルートアクセス権を持つユーザー名を渡すだけでpostgresにアクセスできるようになりました。

試しに簡単なSQL文を入れます。

postgres=# SELECT 1;
 ?column? 
----------
        1
(1 row)

これでPostgresSQLでSQL文を実行できるようになりました。

ちなみにPostgresSQLの接続をやめて、もとのターミナルに戻したいときは

postgres=# \q
bash-5.1# exit

上記の通りにやればターミナルに戻れるはずです。
再びpostgresSQLに接続したければdocker exec -it postgres-01 bashをすればいいです。
あとはキリン本の通りに進めればいいかと思います。

Discussion

ログインするとコメントできます