はじめに
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を使用すると環境構築が楽になりますね、!