docker+golang+mysql環境を作成する。

docker


今回はdockerにgolangとmysqlコンテナを作成します。
golangのフレームワークとしてはecho/gorm/sql-migrateを選択します。

ファイル構成は下記になります。

.
├── backend
|     └── api
├── containers
|     ├── go 
|     |    └── Dockerfile
|     └── mysql
|          └── my.cnf
└── docker-compose.yml

docker-compose.yml

version: '3'

services:
  api:
    container_name: api
    build: ./containers/go/
    ports:
      - 10080:8080
    links:
      - db
    tty:
      true
    volumes:
      - ./backend/api:/go/src/api

  db:
    image: mysql:8.0
    volumes:
      - db-store:/var/lib/mysql
      - ./containers/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    environment:
      - MYSQL_DATABASE=go_db
      - MYSQL_USER=gouser
      - MYSQL_PASSWORD=gopass
      - MYSQL_ROOT_PASSWORD=gopass
      - TZ=Asia/Tokyo
    ports:
      - "3306:3306"
volumes:
  db-store:

Dockerfile

FROM golang:1.14-alpine

WORKDIR /go/src/api/

RUN apk update \
  && apk add --no-cache git \
  && go get -u github.com/labstack/echo \
  && go get github.com/jinzhu/gorm \
  && go get -u github.com/go-sql-driver/mysql \
  && go get github.com/rubenv/sql-migrate

EXPOSE 8080

my.cnf

[mysqld]
# character set / collation
character_set_server = utf8mb4
collation_server = utf8mb4_0900_ai_ci

# timezone
default-time-zone = SYSTEM
log_timestamps = SYSTEM

# Error Log
log-error = mysql-error.log

# Slow Query Log
slow_query_log = 1
slow_query_log_file = mysql-slow.log
long_query_time = 1.0
log_queries_not_using_indexes = 0

# General Log
general_log = 1
general_log_file = mysql-general.log

[mysql]
default-character-set = utf8mb4

[client]
default-character-set = utf8mb4

上記のファイルを配置した後

docker-compose up -d

で起動します。

backend/api配下に実行するgo言語のプログラムを配置します。

今回はhello_world.goを作成して実行してみます。

package main

import "fmt"

func main() {
  fmt.Printf("Hello world\n")
}

上記をbackend/api/hello_world.goとして保存したら

docker-compose exec api go run hello_world.go

上記で実行し、 Hello world がコマンドラインに表示できたら成功です。

まあこのテストですと、mysqlに接続テストまではできてませんが・・・
mysqlの接続テストまでは次に記載します。