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!』がでたら成功です!