ゆう’s blog

のんびり色々、アプリ、Web開発やら日常やら。

Docker for MacでPostgreSQL

いまさらDockerをはじめてみます。
本当はがっつり開発環境まるごと構築したいけど、
いきなりは難しそうなので、まずはDBだけでもdocker使います!

構築する環境

PostgreSQL バージョン 11.1

Dockerインストール

公式サイトからDocker for Macをダウンロードしてインストールします。
※初めての場合は、docker hub のアカウント作成が必要

公式サイトからダウンロードします。
docs.docker.com

ダウンロードした「Docker.dmg」でインストールします。
f:id:Hatter-Zuzu:20181231123123p:plain

Dockerを起動すると、以下の画面が表示され流ので、「Next」をクリックします。
f:id:Hatter-Zuzu:20181231123843p:plain

次の画面では、「OK」をクリックします。
端末のパスワードを入力する画面が現れるので、入力します。
f:id:Hatter-Zuzu:20181231123935p:plain

上から画面が伸びてきます。docker hub のアカウントでログインします。
f:id:Hatter-Zuzu:20181231124246p:plain

上のバーに、Dockerアイコンが現れ、クリックでメニューが表示されたら起動完了です。

正しくインストールされているか確認します。

docker --version
Docker version 18.09.0, build 4d60db4

docker-compose --version
docker-compose version 1.23.2, build 1110ad01

docker-machine --version
docker-machine version 0.16.0, build 702c267f

Dockerfileの準備

ディレクトリを作成し、その中に以下のように記述したDockerfileを配置します。
デフォルトではサーバロケールがen_US.utf8になっているため、
ja_JP.utf8になるように、Dockerfileを作成します。

FROM postgres:11.1
RUN localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
ENV LANG ja_JP.utf8

今回は、PostgreSQLのバージョン11.1のイメージを指定しています。
使えるイメージは、Docker Hubと呼ばれる公開リポジトリから確認できます。

PostgreSQLを起動する

Dockerfileをビルドし、起動します。

docker build -t dev-postgres -f Dockerfile .
docker run -it --name=my-db -p 5432:5432 -e POSTGRES_USER=dev -e POSTGRES_PASSWORD=secret -d dev-postgres
オプション 意味
--name my-db コンテナ名
-p 5432:5432 ホストのポート:コンテナのポート
-e POSTGRES_USER スーパユーザ名(省略時は"postgres")
-e POSTGRES_PASSWORD スーパユーザのパスワード(省略時はパスワードなしでログイン可)

確認

起動しているコンテナの一覧はdocker psで確認できます。

docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
d16c5781d3ed        dev-postgres        "docker-entrypoint.s…"   4 minutes ago       Up 4 minutes        5432/tcp            my-db

docker imagesコマンドでイメージの一覧を確認できます。

docker images

接続

以下のコマンドで、DBに接続できます。

docker exec -it my-db psql -U dev

また、posticoなどのツールでも普通に接続できます。
Host: localhost
Port:5432

コンテナの停止

docker stop my-db(コンテナ名)

コンテナの起動

docker start my-db(コンテナ名)

コンテナにログイン

docker exec -it my-db(コンテナ名) bash

コンテナの削除

docker rm -f my-db(コンテナ名)