この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:1
ページ更新者:T
更新日時:2023-11-19 10:48:51

タイトル: Docker + Go言語 + gRPC で簡単なWebアプリケーションを作る
SEOタイトル: Docker + Go言語 + gRPC で簡単なWebアプリケーションを作る

※前提

Windows OS

Mac、Linux OSの場合は一部コマンドが異なりますので、その際は適宜変更してください。

 

1. Dockerのインストール:

  1. Docker Desktop for WindowsからDocker Desktopをダウンロードしてインストールします。

2. Go言語のインストール:

  1. Goの公式ウェブサイト からGoをダウンロードしてインストールします。

  2. PowerShellまたはコマンドプロンプトを開き、以下のコマンドでGoのモジュールを初期化します。

go get -u google.golang.org/grpc

go get -u google.golang.org/protobuf/cmd/protoc-gen-go

 

3. Protocol Buffersのインストール:

  1. Protocol Buffersのリリースページから protoc-win64.zip をダウンロードして解凍します。

  2. protoc コマンドのパスを通します。解凍したフォルダ内の bin ディレクトリのパスを環境変数に追加します。

  3. PowerShellまたはコマンドプロンプトを再起動して、以下のコマンドでGoのプロトコルバッファ用パッケージをインストールします。

go get -u google.golang.org/grpc
go get -u github.com/golang/protobuf/protoc-gen-go

 

4. サンプルアプリケーションの作成:

PowerShellまたはコマンドプロンプトを開き、プロジェクトのルートディレクトリに移動します。

cd \path\to\my-web-app

 

以下のディレクトリ構造を作成します。

my-web-app
├── main.go
├── pb
│   └── greeter.proto
└── Dockerfile

 

main.go ファイルに以下のコードを追加します。

// main.go

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, this is a simple HTTP server!")
    })

    log.Fatal(http.ListenAndServe(":8080", nil))
}

 

 

pb/greeter.proto ファイルに以下のProtocol Buffersの定義を追加します。

// pb/greeter.proto

syntax = "proto3";

package pb;

message HelloRequest {
    string name = 1;
}

message HelloResponse {
    string message = 1;
}

service Greeter {
    rpc SayHello (HelloRequest) returns (HelloResponse);
}

 

 

Dockerfile ファイルに以下のコードを追加します。

# Dockerfile

FROM golang:latest

WORKDIR /app

COPY . .

RUN go build -o main .

EXPOSE 8080

CMD ["./main"]
 

 

5. アプリケーションのビルドと実行:

PowerShellまたはコマンドプロンプトで以下のコマンドを実行します。

docker build -t my-web-app .
docker run -p 8080:8080 my-web-app

ブラウザで http://localhost:8080 にアクセスして、"Hello, this is a simple HTTP server!"と表示されれば成功です。

これで、Windows環境で完全な手順を実行できるかと思います。お手数おかけしましたが、問題があればお知らせください。