Docker公式イメージを使って、PostgreSQL11のコンテナ環境を構築する手順
はじめに
本記事では、Docker公式イメージを使って、
PostgreSQL11のコンテナ環境を構築する手順を紹介します。
本記事の前提
- Dockerをインストールしている
- docker-composeをインストールしている
構築の流れ
以下の流れで構築を進めます。
- PostgreSQLイメージ用のdockerfileを作成する
- PostgreSQLの初期化用シェルスクリプトを作成する
- docker-composeファイルを作成する
- docker-composeでイメージとコンテナを作る
- コンテナの中に入る
- データベースが作成されているか確認する
1. PostgreSQLイメージ用のdockerfileを作成する
dockerfile
FROM postgres:11
ENV POSTGRES_USER="postgres" \
POSTGRES_PASSWORD="postgres" \
POSTGRES_INITDB_ARGS="--encoding=UTF-8 --locale=C"
COPY init.sh /docker-entrypoint-initdb.d/
FROM postgres:11
ENV POSTGRES_USER="postgres" \
POSTGRES_PASSWORD="postgres" \
POSTGRES_INITDB_ARGS="--encoding=UTF-8 --locale=C"
COPY init.sh /docker-entrypoint-initdb.d/
dockerfileの解説をします。
1行目の「FROM postgres:11」でDocker Hubから
PostgreSQL11の公式イメージを取得します。
3行目の「ENV POSTGRES_USER="postgres"」で
PostgreSQLで使用するスーパーユーザ名を作成します。
※ユーザ名は任意ですが、慣習的にpostgresを使うようです。
4行目の「POSTGRES_PASSWORD="postgres"」で
スーパーユーザ名のパスワードを作成します。
※パスワードは任意です
5行目の「POSTGRES_INITDB_ARGS="--encoding=UTF-8 --locale=C"」で
コンテナ生成時に自動で作成されるデータベースクラスタのエンコードとロケール
を指定します。
7行目の「COPY init.sh /docker-entrypoint-initdb.d/」で
コンテナ生成時に実行したい初期化用シェルスクリプトをローカルから
コンテナ内の「/docker-entrypoint-initdb.d/」にアップロードします。
※「/docker-entrypoint-initdb.d/」にshやsqlの拡張子で終わるファイルを置くと、
コンテナ生成時に自動で実行されます。
2. PostgreSQLの初期化用シェルスクリプトを作成する
init.sh
#!/bin/bash
set -x
psql -U postgres << EOSQL
CREATE DATABASE testdb;
EOSQL
#!/bin/bash
set -x
psql -U postgres << EOSQL
CREATE DATABASE testdb;
EOSQL
1行目の「#!/bin/bash」で、
dockerfile実行時にシェルスクリプトを実行できるようにします、
※「#!/bin/bash」をシェバングと言います。
3行目の「set -x」で、dockerイメージをbuildする際に、コマンドが出力されるようになり、buildの途中経過がわかるようになります。書かなくても構いませんが、何かbuildに失敗したときに原因の分析がしやすくなります。
5〜7行目で、psqlコマンドを実行し、データベースを作成しています。
ここでは、testdbとしていますが、任意で構いません。
3. docker-composeファイルを作成する
docker-compose.yml
version: '3.7'
services:
postgres:
build: ./
image: test_image
container_name: test_container
tty: true
version: '3.7'
services:
postgres:
build: ./
image: test_image
container_name: test_container
tty: true
1行目の「verion:3.7」で使用するdockerエンジンのバージョンと合った、
docker-composeのファイルフォーマットのバージョンを指定しています。
こちらのdocker公式サイトに対応表が載っていますで、ご自身のdocekr環境に合わせて、バージョンを選んでください。
dockrエンジンのバージョンは以下のコマンドで確認できます。
docker -v
筆者の環境だと、「docker version 19.03.4」でしたので、対応表と見比べて、
「3.7」としています。
2〜3行目でサービス名を「postgres」と定義しています。
このサービス名は起動するコンテナ名と考えてください。
4行目の「build: ./」でdocker-compose.ymlがある場所から見たdokcerfileの位置を記載しています。本記事では、docker-compose.ymlとdockerfileは同一の場所に配置しているため、「./」としています。
5行目の「image: test_image」で、イメージ名を定義しています。
イメージ名は任意です。
6行目の「container_name: test_container」で、コンテナ名を定義しています。
コンテナ名は任意です。
7行目の「tty: true」で、コンテナ作成後にコンテナが停止しないようにしています。
4. docker-composeでイメージとコンテナを作る
場所はどこでも構いませんので、「dockerfile」と「init.sh」と「docker-compose.yml」を同じ場所に配置してください。
その後、「docker-compose.yml」がある場所に移動してください。
ちなみに筆者は、「docker-test」というディレクトリを作り、そこに各ファイルを配置しています。
docker-compose build . -t postgresql-test
docker-compose up -d
5. コンテナの中に入る
docker-compose exec postgres bash
docker-compose exec postgres bash
「docker-compose exec XXXX bash」のXXXXのところに
docker-compose.ymlで指定したサービス名を入れると、コンテナの中に入ることができます。
今回の場合だと、docker-compose.ymlの3行目で指定した「postgres」がサービス名となります。
6. データベースが作成されているか確認する
psql -U postgres
psql -U postgres
上記のコマンドでpsqlに入ることができます。
※psqlとは、postgreSQLを操作するためのクライアント向けのツールです。
\l
上記のコマンドを打った後、「testdb」が表示されていれば成功です。
\d
上記のコマンドでpsqlを抜けることができます。
他
もし、何かうまくいかない場合は、以下の手順を実施して、
作成したコンテナとイメージを削除して、最初からやり直してください
docker-compose down
docker rmi test-image
Author And Source
この問題について(Docker公式イメージを使って、PostgreSQL11のコンテナ環境を構築する手順), 我々は、より多くの情報をここで見つけました https://qiita.com/t-shmp/items/704b55d67e0e45fd51f7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .