dockerにGo + Redis環境を構築して接続する

dockerにRedisを積んで簡単な更新処理を作ります。

Dockerfile

FROM golang:latest
RUN go get github.com/gomodule/redigo/redis

EXPOSE 8080

docker-compose.yaml

version: '3'
services:
  app:
    build: .
    container_name: go_container
    tty: true
    volumes:
      - ./:/app
    working_dir: /app
    ports:
      - "8080:8080"
    depends_on:
      - redis
  redis:
    image: "redis:latest"
    container_name: go_redis
    ports:
      - "6379:6379"
    command: redis-server --requirepass password # redis authのパスワード
    volumes:
      - "./data/redis:/data"

続いてmain.goを記述
main.go

package main

import (
  "fmt"
  "github.com/gomodule/redigo/redis"
)
// Redis 接続
// Redisに値を書き込み
func main() {
    conn, err := redis.Dial("tcp", "redis:6379")
    if err != nil {
        panic(err)
    }
    response, err := conn.Do("AUTH", "password")
    if err != nil {
        panic(err)
    }
    fmt.Println("Connected! ", response)
    defer conn.Close()

    // 値の書き込み
    r, err := conn.Do("SET", "test", "10")
    if err != nil {
        panic(err)
    }
    fmt.Println(r) // OK

    // 値の読み出し
    s, err := redis.String(conn.Do("GET", "test"))
    if err != nil {
        panic(err)
    }
    fmt.Println(s) // 10

    // 値の削除
        // redisにデータが入っているか確認したい場合
        // 以下の行はコメントアウトしてください
    d, err := conn.Do("DEL", "test")
    if err != nil {
        panic(err)
    }
    fmt.Println(d) // 1
}

main.goを実行する

$ docker-compose up -d
$ docker-compose exec app bash
$ go run main.go

Redisコンテナを操作する

$ docker-compose exec redis bash
$ redis-cli
$ auth password
$ keys *

関連記事