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に変更したい場合、次のコードを変更するだけです。
コンテナのビルド -> docker build --platform linux/amd64 -t golangrun .
コンテナに変更タグを付ける -> docker tag golangrun gcr.io/readytoworkjapan/golangrun
コンテナをプッシュ -> docker push gcr.io/readytoworkjapan/golangrun
同じ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