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