PostgreSQLをコンテナで立てる

PostgreSQLの環境構築

ゼロからはじめるデータベース操作を進めるためにPostgreSQLの環境構築を進めた。本の中ではWindowsの説明があったけど、せっかくなのでさくらVPSで立てたサーバで環境を構築してみました。

最近はDockerで環境構築するのがめっちゃ楽と思っているので、debianサーバにDockerを入れて、コンテナとしてPostgreSQLの環境構築をしました。

Docker Engine インストール(Debian 向け)

公式を参考に、Dockerをインストールする。

  1. リポジトリのセットアップ

    1. HTTPS経由でリポジトリにアクセスしパッケージをインストールできるようにする

      sudo apt-get update
      sudo apt-get install \
      ca-certificates \
      curl \
      gnupg \
      lsb-release
      
    2. Docker の公式 GPG 鍵を追加

      curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
      
    3. 安定版(stable)リポジトリをセットアップ

      echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
      
  2. Docker Engine のインストール

    1. 最新版の Docker Engine、containerd、Docker Compose をインストール

      sudo apt-get update
      sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
      
    2. Docker Engine が正しくインストールされているかの確認

      sudo docker run hello-world
      

Docker Composeを入れる

Docker Composeでコンテナを作るためにdocker-composeを使えるようにする。

  1. Docker Compose 最新版をダウンロード

     sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    
  2. 実行権限を付与

     sudo chmod +x /usr/local/bin/docker-compose
    
  3. インストールを確認

     docker-compose --version
    

コンテナを立てる

【Docker】postgresqlの構築を参考に、下記のようにdocker-compose.ymlを記述。

version: '3'

services:
  db:
    image: postgres:latest
    container_name: postgres
    ports:
      - 5432:5432
    volumes:
      - db-store:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=password
volumes:
  db-store:

コンテナを立てる。

sudo docker-compose up -d

コンテナを起動して、接続確認をする。

sudo docker exec -it postgres bash #コンテナへ接続
psql -h localhost -U postgres #psqlで接続確認