1
1

More than 3 years have passed since last update.

【Go + Gin】Docker環境を構築してみた

Last updated at Posted at 2020-10-06

はじめに

GoとGinを使用する際のDokcerを用いた開発環境を構築しました。docker-composeを使用しています。
使用するDBはmysqlで、ORマッパーはGormの使用を想定しています。

TL;DR

下記のディレクトリ構成にしています。
Dockerfile、docker-compose.ymlにしています。

ディレクトリ構成

├── docker
│   ├── docker.mysql.env
│   └── go
│       └── Dockerfile
├── docker-compose.yml
└── src
    └── app

docker/go/Dockerfile


FROM golang:1.10.3-alpine3.8

COPY src/app /go/src/app/

WORKDIR /go/src/app/

RUN apk update \
  && apk add --no-cache git \
  && go get github.com/gin-gonic/gin \
  && go get github.com/jinzhu/gorm \
  && go get github.com/go-sql-driver/mysql

EXPOSE 8080

docker/docker.mysql.env

MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=go-gin-app
MYSQL_USER=root
MYSQL_PASSWORD=password

docker-compose.yml



services:
  app:
    container_name: app
    build:
      context: .
      dockerfile: ./docker/go/Dockerfile
    ports:
      - 3000:3000
    links:
      - database
    tty:
      true
    volumes:
      - ./src/app:/go/src/app

  database:
    restart: always
    image: mysql:5.7
    ports:
      - 3308:3306
    volumes:
      - mysql-datavolume:/var/lib/mysql
    env_file:
      - docker/docker.mysql.env

volumes:
  mysql-datavolume:
    driver: local

解説

Dockerfile

今回はGoのDockerfileのみを作成し、mysqlはベースイメージを使用するようにdocker-compose.ymlで指定します。


FROM golang:1.10.3-alpine3.8

COPY src/app /go/src/app/

WORKDIR /go/src/app/

RUN apk update \
  && apk add --no-cache git \
  && go get github.com/gin-gonic/gin \
  && go get github.com/jinzhu/gorm \
  && go get github.com/go-sql-driver/mysql

EXPOSE 8080

src/app直下のファイルをボリュームに指定しています。

また、aliphineのベースイメージを指定しているので、apkでGin、Gorm関連のパッケージをインストールしています。

docker-compose.yml

services:
  app:
    container_name: app
    build:
      context: .
      dockerfile: ./docker/go/Dockerfile
    ports:
      - 3000:3000
    links:
      - database
    tty:
      true
    volumes:
      - ./src/app:/go/src/app

  database:
    restart: always
    image: mysql:5.7
    ports:
      - 3307:3306
    volumes:
      - mysql-datavolume:/var/lib/mysql
    env_file:
      - docker/docker.mysql.env

volumes:
  mysql-datavolume:
    driver: local

mysqlのenvファイルを別で作成したので、env_fileで指定します。
ポート 3306はローカルのmysqlでよく使用するので、3307を指定しています。

動作確認

src/app直下にmain.goを作成し、おなじみのhello worldを出力するようにコードを記述します。

package main

import "fmt"

func main() {
        fmt.Println("Hello, world")
}

そして、下記コマンドでhello worldを出力させます。

docker-compose exec app go run main.go

hello worldが出力されたでしょうか。

終わりに

意外と簡単にGo+Ginの環境構築を行うことができました。

やはりDockerを使用すると環境構築が楽になりますね、!

1
1
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
1
1