GolangをDockerコンテナ内で行うためのセットアップ方法について記載していきます。
概要
- docker-composeを利用して、docker-compose upをしたら環境ができあがる。
- port80でLISTENするappサーバで、curl経由で叩くと"Hello world"を出力する。
- 言語はgolangで、フレームワークはechoを使用してみます。
- docker-compose-upするとDockerコンテナ内の/app内にマウントされている状態
行うべきこと
- docker-compose
- Dockerfile
- main.go
ディレクトリ構造
-app
 ├ Dockerfile
 ├ docker-compose.yml 
 ├ main.go
事前準備(Goインスール)
仮にGoがインストール済みの場合は飛ばしてください。
goenvインストール
$ brew install goenv
.bashrc
# 追記
export GOENV_ROOT=$HOME/.goenv
export PATH=$GOENV_ROOT/bin:$PATH
eval "$(goenv init -)"
# 再起動
$ source ~/.bashrc
Golangインストール
# バージョンはお好みでお願いします。
$ goenv install 1.10.0  
$ goenv global 1.10.0 
goバージョン確認
$ go version
go version go1.10 darwin/amd64
$GOPATH指定~.bashrc~
# 追記
export GOPATH="$HOME/go"
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
# 再起動
$ source ~/.bashrc
echo
$ go get github.com/labstack/echo/...
構築作業
以下のGitHubに公開しています。
i35-267-m/docker-go
docker-compose.yml
docker-compose.yml
version: '3'
services:
  api:
    build: .
    command: go run main.go
    volumes:
      - .:/app 
    ports:
      - 1323:1323
Dockerfile
Dockerfile
FROM golang:1.10.0
RUN go get github.com/labstack/echo/...
WORKDIR /app
ADD . /app
CMD ["go", "run", "main.go"]
main.go
main.go
package main
import (
  "net/http"
  "github.com/labstack/echo"
)
func main() {
  e := echo.New()
  e.GET("/ping", func(c echo.Context) error {
    return c.String(http.StatusOK, "Hello, World!")
  })
  e.Logger.Fatal(e.Start(":1323"))
}
引用 :https://qiita.com/shibacow/items/320679971bfd5d834b80
コンテナ生成+起動
-dでバックグランドで起動
$ docker-compose up -d
docker ps, docker imagesで起動しているかを確認してください。
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker-go_api       latest              0819586c7162        5 hours ago         797MB
golang              1.10.0              d632bbfe5767        5 months ago        779MB
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
12db2718a671        docker-go_api       "go run main.go"    5 hours ago         Up 44 seconds       0.0.0.0:1323->1323/tcp   docker-go_api_1
実行イメージ(-dなし)
$ docker-compose up 
docker-go_api_1 is up-to-date
Attaching to docker-go_api_1
api_1  | 
api_1  |    ____    __
api_1  |   / __/___/ /  ___
api_1  |  / _// __/ _ \/ _ \
api_1  | /___/\__/_//_/\___/ v3.3.dev
api_1  | High performance, minimalist Go web framework
api_1  | https://echo.labstack.com
api_1  | ____________________________________O/_______
api_1  |                                     O\
api_1  | ⇨ http server started on [::]:1323
curlで通信してみます。
$ curl http://127.0.0.1:1323/ping
Hello, World!
無事、『Hello, World!』がでたら成功です!