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接続できず、ハマった。)
役立ちそうな情報
VSCodeとDockerでMacにGolangの開発環境を作成する | Developers.IO
Remote-Containersを使うとVSCodeのGo拡張機能がDockerコンテナ内で使えて良さそう。