LoginSignup
0
3

More than 3 years have passed since last update.

【Docker】GolangからMySqlへ接続してみた

Posted at

やりたいこと

GolangコンテナからMySqlコンテナに接続したい!

環境

docker 19.03.8
docker-compose 1.25.5

リポジトリ

フォルダ階層

root /
 ├ app /
 | └ main.go
 ├ docker /
 | └ Dockerfile
 └ docker-compose.yaml

main.go作成

今回はgormというORMライブラリを使って接続していく。
https://gorm.io/

/app/main.go
package main

import (
    "fmt"
    "net/http"

    _ "github.com/go-sql-driver/mysql"
    "github.com/jinzhu/gorm"
)

func main() {
    http.HandleFunc("/", index)
    http.ListenAndServe(":80", nil)
}

// mysqlconnectionが確認できれば「DB接続成功」が表示される
// 接続に失敗時はエラーメッセージを吐く
func index(w http.ResponseWriter, r *http.Request) {
    _, err := sqlConnect()
    if err != nil {
        fmt.Fprintf(w, err.Error())
    } else {
        fmt.Fprintf(w, "DB接続成功")
    }
}

// connetion確認func
func sqlConnect() (database *gorm.DB, err error) {
    DBMS := "mysql"
    USER := "root"
    PASS := "golang"
    PROTOCOL := "tcp(mysql:3306)"
    DBNAME := "mysql"

    CONNECT := USER + ":" + PASS + "@" + PROTOCOL + "/" + DBNAME + "?charset=utf8&parseTime=true&loc=Asia%2FTokyo"
    return gorm.Open(DBMS, CONNECT)
}

Dockerfile作成

今回使用するgormとmysqlのdriverをインストールしている。
なんかgitがないと動かないっぽい。あとRunコマンドは少なくした方がいいが良い。
多分もっと良い方法があるはず....

/docker/Dockerfile
FROM golang:alpine
# フォルダ作成
RUN mkdir /app
# 作成したフォルダ内にmain.goを配置
COPY ./app /app
# 作業場所を/appに設定(main.goがある場所)
WORKDIR /app
# 必要ライブラリをインストール
RUN apk add --no-cache git
RUN go get "github.com/go-sql-driver/mysql"
RUN go get -u github.com/jinzhu/gorm
# main.goをbuild
RUN go build -o main . 
# port開放
EXPOSE 80
# app開始
CMD ["/app/main"]

docker-compose.yaml作成

golangとmysqlを動かすためのdocker-compose。特に説明することない。

/docker-compose.yaml
version: '3'

services:
  golang:
    build: 
      context: .
      dockerfile: ./docker/Dockerfile
    ports:
    - "80:80"
    container_name: go-sample
    depends_on:
    - mysql
  mysql:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: golang
      MYSQL_USER: golang
      MYSQL_PASSWORD: golang
      MYSQL_DATABASE: golang
    container_name: mysql

実行し、DBの接続確認を行う

zsh
# docker-compose.yamlのある階層で実行
$docker-compose up -d
....
# 立ち上がったよ!メッセージが出たらOK
Creating mysql ... done
Creating go-sample ... done

localhostに接続すると、「DB接続成功」が出るはず...

スクリーンショット 2020-05-17 17.48.01.png

接続成功!!!!
意外と簡単に接続できた...さすがGoだな...

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3