Goプログラミング実践入門 第2章の環境構築(Docker+Go+Postgresql)

書籍で使うサンプルの動作環境を構築する

ディレクト

./
┝chitchat
┝docker-compose.yml
┗Dockerfile

docker-compose.yml

version: "3.7"
services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8080:8080
    working_dir: /chitchat
    volumes:
      - ./chitchat:/chitchat
    depends_on:
      - db
    # いろいろ試しやすいようにrealizeを入れておく(毎回 go build するのは面倒)
    command: realize start --run --no-config
  db: # goプログラムでのDB接続時のhost名に設定する
    image: postgres:alpine
    ports:
      - 5432:5432
    environment:
      POSTGRES_DB: postgres
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: example
    volumes:
      - data:/var/lib/postgresql/data
volumes:
  data:

Dockerfile

FROM golang:1.14.4-alpine3.12
COPY ./chitchat /chitchat
WORKDIR /chitchat
RUN apk update && \
apk add --no-cache git && \
go get -u github.com/oxequa/realize && \
go build
CMD [ "./chitchat" ]

DB準備

dbのコンテナに入って、./chitchat/data/setup.sqlの内容をコピペしておく。

# コンテナ起動
docker-compose up

# コンテナに入る
docker-compose exec db sh

# docker-compose.ymlで環境変数に設定したユーザー名:postgresを使って接続
psql -U postgres

# DB作成
createdb chitchat

# DB選択
\c chitchat

# ./chitchat/data/setup.sqlの内容をコピペして、テーブル作成

data.goの接続情報を編集

./chitchat/data/data.go

# コンテナのDBを使用するように修正(hostは docker-compose.yml に記載したサービス名)
Db, err = sql.Open("postgres", "host=db port=5432 user=postgres password=example dbname=chitchat sslmode=disable")

その他修正箇所

修正したローカル環境のdataパッケージを使用するので、
importする
"github.com/sausheong/gwp/Chapter_2_Go_ChitChat/chitchat/data"
"./data"に変えておく。

(変更せずに試したため、DB接続できず、ハマった。)

役立ちそうな情報