【Docker】PostgreSQLをコンテナイメージで起動(CentOS8)

CentOS8の環境下でDockerをインストールし、データベース「PostgreSQL」のイメージの起動までをまとめました。

コンテナ起動からアクセスログインまですぐにできるので簡単です。

「CentOS8」環境下でDockerコンテナでPostgreSQLを起動する手順

公式ページではDockerイメージとコンテナの起動手順、設定コマンドを確認できます。
参照は以下のページを確認してください。

https://hub.docker.com/_/postgres/

CentOS8でのPostgresSQLの起動手順は以下となります。

Dockerで「PostgresSQL」のコンテナを起動

起動は公式ページの内容に従いとりあえずそのまま利用します。

  • コンテナ名:some-postgres
  • パスワード:mysecretpassword

バージョンは最新をインストールするためバージョン指定なしで起動します。

最新のイメージで起動

$ docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres

バージョン指定でイメージを起動する場合

特定のバージョンでPostgresSQLを起動したい場合は以下のコマンドを実行します。
※以下はバージョン11.7で起動

~ $ docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres:11.7

PostgreSQLの起動確認

上記で起動が成功した後は以下で確認を実施します。

PostgreSQLのイメージがダウンロードされていることが確認できます。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
postgres            latest              73119b8892f9        12 days ago         314MB
nginx               latest              6678c7c2e56c        12 days ago         127MB
centos              7                   5e35e350aded        4 months ago        203MB
$

「docker ps」コマンドで「PostgreSQL」のコンテナが起動していることを確認します。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
b38c4c589c59        postgres            "docker-entrypoint.s…"   45 seconds ago      Up 42 seconds       5432/tcp                 db_db_1
36e8918065fc        adminer             "entrypoint.sh docke…"   45 seconds ago      Up 43 seconds       0.0.0.0:8000->8080/tcp   db_adminer_1
66e513d88655        postgres            "docker-entrypoint.s…"   9 hours ago         Up 9 hours          5432/tcp                 some-postgres
$

Docker Composeの設定ファイルの作成

Docker Composeの設定ファイルを作成し、データベースを起動します。

PostgreSQLデータベースを起動させるための「stack.yml」を作成します。
今回はテストとして、「/docker/db」配下に「stack.yml」というファイルを作成します。

フォルダは「mkdir」で事前に作成しておきます。

$ pwd
/docker/db

「touch」コマンドで「stack.yml」ファイルを作成します。

$ touch stack.yml

ファイル作成後、「vim」コマンドで編集をします。

$ vim stack.yml

※stack.yml

# Use postgres/example user/password credentials
version: '3.1'

services:

  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: example

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

上記で設定した内容は以下となります。

  • アクセス先URL: localhost:8080
  • サーバ: db
  • ユーザー名: postgres
  • パスワード: example

「docker-compose」でファイル名を指定して「PostgreSQL」を実行

作成したファイルの階層で「docker-compose」コマンドを実行します。

$ docker-compose -f stack.yml up

「commnd not found」エラーが発生した場合

問題なく実行できれば成功ですが、以下のようにエラーが発生する場合は「docker-compose」のインストールが必要となります。

$ docker-compose -f stack.yml up
-bash: docker-compose: command not found
$

インストールはpythonをインストールしていれば「pip」コマンドで簡単にインストールすることが可能です。

$ pip install docker-compose

バックグラウンドで「PostgreSQL」を起動

PostgreSQLをバックグラウンドで実行する場合は以下のコマンドを実行します

$ docker-compose -f stack.yml up -d

Dockerコンテナで起動した「PostgreSQL」へアクセス

上記で「PostgreSQL」が起動したら「http://localhost:8080」へアクセスします。

「CentOS8」でPostgreSQLへアクセス・ログイン

今回構築したPosgreSQLにアクセスする場合は以下コマンドを実行します。
「some-postgres」という名前で構築しているので、「some-postgres」へアクセスします。

$ docker exec -ti some-postgres bash
root@66e513d88655:/# 

ログインに成功したら以下でバージョンを確認します。

root@66e513d88655:/# psql --version
psql (PostgreSQL) 12.2 (Debian 12.2-2.pgdg100+1)
root@66e513d88655:/#

以下コマンドでスーパーユーザでPostgreSQLにログインをします。

root@66e513d88655:/# psql -U postgres
psql (12.2 (Debian 12.2-2.pgdg100+1))
Type "help" for help.

postgres=#

データベース「sample」を作成

新しいデータベースを作成します。
以下ように入力し実行します。

postgres=# create database sample;
CREATE DATABASE
postgres-#

成功するとSQLコマンドがサーバへ送信されて処理されます。

ログアウト

ログアウトは以下コマンドを実行します。

postgres-# \q
root@66e513d88655:/# exit
exit
$ 

CentOS8のDockerコンテナで「PostgreSQL」の起動と動作確認は以上となります。




エンジニアのオンライン学習

ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。

おすすめオンライン教材
自宅で学習ができるオンラインスクール

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUT US
げんき☆ひろき
インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!