■概要
Dockerを使った最もシンプルなgolangアプリケーションの作成について調べつつ書いていきたい。簡単なgolangを記述し、Dockerイメージの作成、コンテナの実行を行う。今回はDockerfileの作成まで。
※Dockerのインストールなどは割愛する。
▼golangアプリの作成
コンソールにログを出すだけの何の価値も生まないアプリケーションを作成する。
まず go.mod ファイルを作成し、モジュールの基点とする。
$ go mod init <モジュール名>
$ go mod init github.com/ArtefactGitHub/Go_T_MinimumDockerSample
main.goに処理を記述する。
package main
import (
"fmt"
"net/http"
)
func main() {
fmt.Println("Hello world")
router := http.NewServeMux()
router.HandleFunc("/", Home)
http.ListenAndServe(":8080", router)
}
func Home(w http.ResponseWriter, r *http.Request) {
fmt.Println("home")
}
上記内容を実行すると、「Hello World」が出力される。
$ go run .
Hello world
Chromeなどブラウザを立ち上げ、URLに「http://localhost:8080」と入力すると、HandleFunc() で渡したハンドラー関数が呼び出され、コンソールに「home」と表示されることが確認できる。
ディレクトリ構成は下記のようなものになる。
├── .dockerignore
├── .gitignore
├── go.mod
├── LICENSE
├── main.go
└── README.md
▼Dockerfileの作成
# syntax=docker/dockerfile:1
FROM golang:1.16-alpine
WORKDIR /app
COPY go.mod ./
# COPY go.sum ./
RUN go mod download
COPY *.go ./
RUN go build -o /main
EXPOSE 8080
CMD [ "/main" ]
(GitHub: minimumブランチ)。
■あとがき
調べつつ書いていたらこの段階で数時間経ってしまったのでここまで。echoも何も入れないとにかく最小限のgolangアプリのサンプルが見当たらなかったので着手してみた。目に見える成果物は無いが、syntax構文やEXPOSEの挙動、CMDの用途などよく分かっていなかったので収穫。