見出し画像

Docker化されたGolangアプリをGoogle Cloud Runにデプロイしよう

クリエイター : Prajwol Kc , 株式会社readytowork ネパール支店 チームマネージャー

この記事では、microframework fiberを使ってシンプルなgolangウェブアプリケーションを作成します。そして、dockerコンテナを使ってローカル・システムで実行する。ローカル・システムで実行した後、Google Cloud PlatformのGoogle Container Registry (GCR)にデプロイします。そして、デプロイされたGCRコンテナをGoogle Cloud Runに接続する。それでは始めよう。

ここでは、シンプルなhello worldのテキストを画面に表示する、fiber web frameworkを使ったシンプルなgolangのWebアプリを作ります。

これはmain.goです。

package main 
import ( 
  "log" 
  "github.com/gofiber/fiber/v2" 
) func main() { 
  app := fiber.New() 
  app.Get("/", func(c *fiber.Ctx) error { 
    return c.SendString("Hello, World!") 
  }) 
  log.Fatal(app.Listen(":8080"))
}

ここでは、基本的にgolangの下でnestjsのようなフレームワークであるfiber web frameworkをインポートしている。GETメソッドを使用して、rootですべての受信リクエストを取得し、hello worldのテキストを表示します。コンテナのポート8080をリッスンしている。

次に、アプリケーションを実際にDocker化するためのDockerfileをルート・ディレクトリに作成する。Dockerfile

FROM golang:1.16-alpine 
WORKDIR /app 
COPY go.mod . 
COPY go.sum . 
RUN go mod download 
COPY . . 
RUN go build -o ./out/dist . 
CMD ./out/dist

コンテナをビルドし、システム・クリで以下を実行すれば、アプリをローカルで実行できる。ここで、golangrunはアプリの名前だ。

docker build --platform linux/amd64 -t golangrun .docker run -p 8888:8080 golangrun

http://localhost:8888/にアクセスすると、Hello Worldが表示される。

次のステップは、同じウェブアプリをGCRにデプロイしてCloud Runで実行することだ。このプロセスを開始するには、コンテナにタグを付けてGCRにプッシュする必要があります。

Google Docker Registry用のコンテナにタグを付け、GCR名をreadytoworkjapanとし、その後にアプリ名を付けてみよう。

docker tag golangrun gcr.io/readytoworkjapan/golangrun

タグ付けされたコンテナをGCRにプッシュし、GCRポータルで確認できるようにしよう。

docker push gcr.io/readytoworkjapan/golangrun


コンテナは私のGCRにある。コンテナは、好みのCloud Run、GKE、GCEにデプロイできる。今回はCloud Runにデプロイする。

プッシュされた最新のコンテナ・タグを選択して、Cloud Run Serviceを作成する。サービス名に一般的な選択名を付ける。ingressは、今のところすべての着信トラフィックとすることができ、認証は未認証の呼び出しとすることができる。

クラウド・ラン・サービスが作成されると、ログを含むすべての詳細を見ることができる。一番上のセクションにあるURLを開くだけだ。これを開くと、Cloud Run上で実行されているdocker化されたgolangが表示される。この場合のURLは https://golangrun-ok-24wnkzib7q-uc.a.run.app/

この記事は氷山の一角に過ぎない。変更や設定が可能なセクションやトピックは他にもたくさんある。
もし何かを変更したい場合、例えばhello worldをhello Golangに変更したい場合、次のコードを変更するだけです。

  1. コンテナのビルド -> docker build --platform linux/amd64 -t golangrun .

  2. コンテナに変更タグを付ける -> docker tag golangrun gcr.io/readytoworkjapan/golangrun

  3. コンテナをプッシュ -> docker push gcr.io/readytoworkjapan/golangrun

  4. 同じCloud Run Serviceに再デプロイし、同じURLで変更を確認する

注意:

docker build --platform linux/amd64 -t golangrun .

この使用例では、mac m1を使用しているため、コンテナ・ビルドは、mac m1でのデフォルトのケースであるarm64ではなく、linux/amd64上で実行されることが期待される。


協業開発及び開発パートナーをお探しのお客様へ

弊社は、ネパールに海外拠点を持ち、生成AI、モバイルアプリ、システム開発を中心に事業を展開する企業です。

自社サービスの開発経験を活かし、クライアント様と共に事業を創造することを重視し、創業以来、スタートアップから中小企業、大手企業、自治体まで、幅広い開発実績があります。プロダクトはユーザーが使いやすいように設計しており、企画から開発、保守運用まで対応しています。開発技術を厳選し限定することで、セキュリティ、プロダクトの品質向上に努めており、事業開発に関する課題を深く理解し、最適なご提案が可能です

お問い合わせはこちらから:
お問い合わせフォーム:https://readytowork.jp/ 

直通番号:080-8940-7169