docker-composeでGoのWebサーバーを起動する


ミニマムにやっておかないと忘れがちなのでメモ

サンプル用Goサーバを作成する

package main
import (
"encoding/json"
"net/http"
)
type User struct {
FirstName string `json:"firstName"`
LastName  string `json:"lastName"`
}
func users(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Content-Type", "application/json")
user := User{
FirstName: "John",
LastName: "Doe",
}
var users []User
users = append(users, user)
json.NewEncoder(w).Encode(users)
}
func main() {
http.HandleFunc("/users", users)
http.ListenAndServe(":8002", nil)
}

普通に起動して動作確認をします。

$ go run main.go

http://localhost:8002/usersにアクセスするとJSON結果が出力されます。

[
{
"firstName": "John",
"lastName": "Doe"
}
]

Dockerfile

FROM golang:1.14
#FROM golang:1.14-alpine
# コンテナログイン時のディレクトリ指定
WORKDIR /opt/sandbox-docker-compose-go
# ホストのファイルをコンテナの作業ディレクトリにコピー
COPY . .
# ADD . .
# ビルド
RUN go build -o app main.go
# 起動
CMD ["/opt/sandbox-docker-compose-go/app"]

docker-compose.ymlファイル

version: '3'
services:
# service名
app:
# コンテナ名
container_name: sandbox-docker-compose
# イメージ名
image: sandbox-docker-compose
# ビルドに使用するDockerfileがあるディレクトリ指定
build: .
# マウントディレクトリ指定
volumes:
- .:/go/src/github.com/taisa831/sandbox-docker-compose-go
ports:
- "8002:8002"

構成

.
├── Dockerfile
├── docker-compose.yml
└── main.go

コンテナ作成&起動

$ docker-compose up
# or
$ docker-compose up -d

イメージを確認する

$ docker-compose images
Container                Repository          Tag       Image Id       Size
----------------------------------------------------------------------------------
sandbox-docker-compose   sandbox-docker-compose   latest   c799d3b27ac6   817.3 MB

プロセスを確認する

$ docker-compose ps
Name                       Command               State           Ports
----------------------------------------------------------------------------------------
sandbox-docker-compose   /opt/sandbox-docker-compos ...   Up      0.0.0.0:8002->8002/tcp

コンテナに入る

$ docker-compose exec app bash
root@0564c76f39e8:/opt/sandbox-docker-compose-go#

ログを確認する

$ docker-compose logs app

停止

$ docker-compose stop

起動

$ docker-compose start

再起動

$ docker-compose restart

停止&コンテナ削除

$ docker-compose down

docker-composeで作ったコンテナ、イメージ、ボリューム、ネットワークを一括で完全消去する場合

docker-compose down --rmi all --volumes
<!-- /wp:enlighter/codeblock -->

カテゴリー: Go

関連記事