LoginSignup
4
4

More than 5 years have passed since last update.

gRPCのサーバー&クライアントをdockerとgoで動かしてみる

Last updated at Posted at 2017-07-01

dockerを使って環境構築の手間を省いてすぐにgolangでgRPCを動かせるものを作った。

サーバーサイド、クライアントサイドのどちらかだけを作成しても、gRPCの仕様上 curl を叩いて動作の確認ができず、デバッグのやりにくさがある。

なので今回は1レポジトリにサーバーサイド、クライアントサイド両方のコードを収め、簡単にサーバーサイドとクライアントサイドの動きがわかるようにした。

動機

LTで何かgolangネタをやろうと思い立ったのと、gRPCをとりあえず使ってみたかった。

gRPCは初めて触ってみたが, そもそも動かす段階に持っていくまでに苦労しそう?な気がしたので、dockerを立ち上げて server.goclient.go を起動すればdockerコンテナ内のローカルネットワークを使用してサーバーサイドとクライアントサイドの両方を動かせるようにした。

まだgRPC自体を触って半日だが、jsonのAPIアプリケーションを作るよりも便利そうな気がしている。

ソースコード

ここに置いてあります
https://github.com/yoshi42662/go-grpc

とりあえず最低限動く形にして書いてあるだけなので、使いやすさや可読性、ソースコードの品質はこれから上げていきたい。

使い方

Quick Start

  • Get repository
    $ git clone git@github.com:yoshi42662/go-grpc.git

  • Build compose containers
    $ docker-compose build

  • Get into server container and run server.go
    $ docker-compose run server bash
    (server-container) $ go run server/server.go

  • Get into server container from different console and run client.go

  • List all running containers
    $ docker ps

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    a69220a48eda gogrpc_server "bash" 20 minutes ago Up 20 minutes 8080/tcp gogrpc_server_run_1

  • Get into same gogrpc_server container with container ID.
    $ docker exec -it a69220a48eda bash

  • Run client.go inside container
    (server-container) $ go run client/client.go

protocコマンドを使う

.proto ファイルから .go ファイルを生成するときに使用。

  • dockerコンテナの中に入って実行。

$ docker-compose run server bash

(server-container) $ protoc --go_out=plugins=grpc:. pb/*.proto

所感

つまるところgRPCはネットワークでやりとりされるデータがJSONからバイナリになって、ルーティングやエンコーディング、デコーディングもgRPC側で勝手にやってくれるものっぽい。

実際触ってみるとドキュメント読む前でもなんとなく分かった。

gRPCはよい。便利。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4