ミニマムにやっておかないと忘れがちなのでメモ
サンプル用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