taisablog.com

taisa's engineer blog

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 -->