LoginSignup
0
0

More than 3 years have passed since last update.

docker-composeを用いた複数コンテナのapi(Golang)にgo modulesを導入する

Last updated at Posted at 2019-09-12

概要

docker-composeを用いた複数コンテナを利用していました。
このうちの1つがgolangで作成したapiだったのですが、このapiにgo modulesを導入しようとして少しハマったので解決策を共有します。

そもそもgo moduleとは

一応前提の話をしますと、go modulesを使うことによって$GOPATHを気にすることなくpackageをimportすることができるようになります。
package mainだけで完結している軽いアプリケーションなら不要ですが、packageを分割したい際にはgo moduleを導入するといいかもしれません。

スタック

フォルダ構成

article
  ├ client
  ├ api
  │  ├ main.go
  │  ├ // 省略
  │  ├ go.mod 
  │  ├ go.sum
  │  └ Dockerfile
  ├ nginx
  └ docker-compose.yml
go.mod
module article/api
  • apiディレクトリ上でgo mod init article/apiを叩いてgo.modを作成しています。

Dockerfile

apiディレクトリ以下のDocekrfileは以下のようになります

Dockerfile
FROM golang:latest
ENV GO111MODULE=on
WORKDIR /app
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . .
RUN go build
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
ENTRYPOINT ["/app/api"]

docker-compose.yml

最後にdocker-compose.ymlは以下のようになります

docker-compose.yml
version: '3'
services:
  api:
    build:
      dockerfile: Dockerfile
      context: ./api
    volumes:
      - ./api:/go/src/github.com/jpskgc/article/app
    depends_on:
      - db
    tty: true
    environment:
      - AWS_ACCESS_KEY_ID
      - AWS_SECRET_ACCESS_KEY
      - MYSQL_USER
      - MYSQL_PASSWORD
      - MYSQL_HOST
      - GO111MODULE

  //他コンテナの記述は省略

Docekrfiledocker-compose.ymlの設定がうまくいかなくて悪戦苦闘していた記憶があります。
一応このサンプルの全ソースコードは以下にあります
https://github.com/jpskgc/article

何か参考になりましたら幸いです。

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