AWS 上の Docker を使用した Go アプリケーションの構築: 項目の追加と取得のための RESTful インターフェイスの作成

Mary-Kate Olsen
リリース: 2024-10-28 07:51:02
オリジナル
270 人が閲覧しました

はじめに

ほとんどの Go アプリケーションは単一のバイナリ ファイルにコンパイルされますが、Web アプリケーションにはテンプレート、アセット、構成ファイルも付属しています。これらは同期が取れなくなり、誤ったデプロイメントが発生する可能性があります。
Docker を使用すると、アプリケーションの実行に必要なものすべてを備えたスタンドアロン イメージを作成できます。この記事では、インスタンスにインストールされた Docker を使用して Go Web アプリケーションをデプロイする方法と、Docker が開発ワークフローとデプロイ プロセスの改善にどのように役立つかを学びます。

必要な手順は次のとおりです:

- インスタンス (自分のマシン) を起動して Docker を構築し、
を実行します アプリケーション

- インスタンスに Docker をインストールします
- インスタンスへの Go のインストール
- Go アプリケーションのコード ファイルを作成します
- アプリケーションのテスト

インスタンス (自分のマシン) を起動して Docker を構築し、実行します
アプリケーション

記事で説明されているインスタンスの起動と接続の同じ手順を確認できます。

https://dev.to/zahraajawad/building-a-jupyter-notebook-environment-in-docker-for-data-analysis-on-aws-ec2-376i

注: セキュリティ グループを必ず選択してください:

  • SSH ポート 22: SSH を使用してインスタンスにアクセスし、接続するには
    システムをリモートで管理するためのプロトコル。

  • HTTP ポート 8080: このポート (8080) で Go アプリケーションを実行し、インターネットまたはローカル ネットワークからアクセスするには、このポートが開いている必要があります。

- インスタンスに Docker をインストールします

これから作成する特定のワークフロー アーキテクチャでは、Docker を使用して統合ワークフロー環境を提供します。
したがって、SSH 経由でインスタンスに接続し、root 権限を取得した後、次のコマンド自動化を使用して Docker をインストールします。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) 安定版" && sudo apt-get update && apt-キャッシュ ポリシー docker-ce

Docker のエクスペリエンス: 簡単なテスト コマンド docker -v を実行して、Docker が適切に動作していることを確認し、Docker のバージョンを確認します:

Go をインストールしています

Go をインストールするには、Go の公式 Web サイト https://go.dev/dl/
からダウンロードします。 wget https://golang.org/dl/go1.20.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.20.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bash_profile
ソース ~/.bash_profile

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items
ここで:
wget https://golang.org/dl/go1.20.linux-amd64.tar.gz は Go バイナリをダウンロードするためのものです。


sudo tar -C /usr/local -xzf go1.20.linux-amd64.tar.gz は、tarball を /usr/local に抽出します。
そして
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bash_profile で PATH 環境変数を更新します。
そして、 ~/.bash_profile をソースにして、プロファイルに加えられた変更を適用します

コマンドを実行し、コマンド ls で実行を確認した後、ダウンロードされたファイルを表示します。

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items
次のコードを使用して Go アプリケーションを初期化します:
go mod init my-go-app
Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items

次に、次のコマンドでプロジェクト フォルダーを作成する必要があります。
mkdir
次に、コマンド:
で現在のディレクトリを変更します。 cd
したがって、実行は次のようになります:

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items

Go アプリケーションのコード ファイルを作成します

main.go ファイル

main.go という名前の新しいファイルを作成します。このファイルには、後で詳しく説明する次の関数とコードが含まれています。その後、すべてのコードを main.go ファイルに入れます。

  • 必要なパッケージをインポートするには、次のコードを使用します。
import (
    "encoding/json"
    "log"
    "net/http"
    "github.com/gorilla/mux"
    "os"
)
ログイン後にコピー
ログイン後にコピー
  • データ構造項目の場合:
type Item struct {
    ID   int    `json:"id"`
    Name string `json:"name"`
}
ログイン後にコピー
ログイン後にコピー

ここで、 item は識別子 (ID) と名前 (Name) を含むデータ構造です。これらのフィールドは、タグ (json:"id" および json:"name".

) を使用して JSON 形式に変換されます。
  • 項目変数
var items []Item
ログイン後にコピー
ログイン後にコピー

これは、サーバーのメモリに保存されているアイテムのスライスです。

  • main 関数を通じて、新しい要素の取得や追加、単純な HTML ページの表示などのさまざまなリクエストを指示することに加えて、ポート (ここではポート 8080 になります) を読み取ることによって構造が整理されます。
import (
    "encoding/json"
    "log"
    "net/http"
    "github.com/gorilla/mux"
    "os"
)
ログイン後にコピー
ログイン後にコピー
  • 関数 getItems は、項目のリストを JSON 形式で返します。ヘッダーのコンテンツ タイプは application/json に設定されます。
type Item struct {
    ID   int    `json:"id"`
    Name string `json:"name"`
}
ログイン後にコピー
ログイン後にコピー
  • createItem 関数は、項目リストに新しい項目を追加します。データはリクエストボディから JSON 形式で読み取られ、既存のアイテムの数に基づいてアイテムに ID が割り当てられ、追加されたアイテムが JSON として返されます。
var items []Item
ログイン後にコピー
ログイン後にコピー
  • serveHome 関数は、ウェルカム メッセージ (Go アプリへようこそ) とデータにアクセスするためのリンクを含む単純な HTML ページを表示します。
func main() {
    port := os.Getenv("PORT")
    if port == "" {
        port = "8080"
    }

    router := mux.NewRouter()
    router.HandleFunc("/items", getItems).Methods("GET")
    router.HandleFunc("/items", createItem).Methods("POST")
    router.HandleFunc("/", serveHome).Methods("GET")

    log.Printf("Server is running on port %s...\n", port)
    log.Fatal(http.ListenAndServe(":"+port, router))
}
ログイン後にコピー

main.go ファイル全体は次のようになります:

func getItems(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(items)
}
ログイン後にコピー

ここで、vim または nano コマンドを使用して main.go ファイルを作成し、上記のコードをファイルに追加します。ここではコマンド nano を使用します。

nano main.go

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items
コードを貼り付けます:

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items

次に、ctrl x、次に y (ファイルを保存するため) を押してキーボードからファイルを終了し、enter

をクリックします。

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items

Dockerfile:

ユーザーが画像を組み立てるためにコマンドラインで呼び出すことができるすべてのコマンドを含むテキストドキュメントです。
Dockerfile は、Dockerfile から命令を読み取ることでイメージを自動的に構築できます。

Dockerfile を作成します:

Docker でコンテナー イメージをビルドするには、ビルド手順を含む Dockerfile が必要です。
Dockerfile を作成し、nano Dockerfile:

コマンドを使用して以前と同じ方法で次のコードを追加します。

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items

Dockerfile コマンドの詳細は、docker docs ホームページ https://docs.docker.com/guides/golang/build-images/

でご覧いただけます。

Dockerfile を準備したので、次は Go アプリケーション用の Docker イメージを構築します。イメージは、次の公式 Docker イメージから作成できます。

docker build -t my-go-app .

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items
イメージは正常にビルドされました。次のコマンドを使用してビルドを確認します:
ドッカーイメージ

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items

イメージを構築した後にコンテナを実行するには、以下を使用します:

docker run -p 8080:8080 my-go-app

ここで、8080 は Web サーバーのポートであるため、実行実行は次のようになります。

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items

アプリケーションのテスト

-curl コマンドで Go アプリケーションをテストします

curl コマンドを使用して Go アプリケーションが適切に動作するかどうかをテストするには:

カール http://localhost:8080/items

または

curl http://:8080/items

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items

実行は null です。これは、アプリケーションは動作していますが、データがまだないことを意味します。

項目を追加するには、次のコマンドを使用します:

curl -X POST -H "Content-Type: application/json" -d '{"name": "item"}' http://localhost:8080/items

または

curl -X POST -H "Content-Type: application/json" -d '{"name": "item"}' http://<インスタンスのパブリック IPv4 アドレス>:8080/items

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items

つまり、追加の実行:

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items

別のアイテムを追加できます:

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items

- Web ページで Go アプリケーションをテストします

Web ページを通じて Go アプリケーションが適切に動作するかどうかをテストするには、次の手順を実行します。

  • インスタンスに戻り、チェックボックスで選択します。
  • 詳細に移動し、パブリック IPv4 アドレスをコピーします。
  • ポート 8080 のパブリック IPv4 アドレスをブラウザに貼り付けて、 を押します。
  • と入力してください。

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items

Web ページは動作しており、ページ上の 項目 を押すと、curl コマンドによって追加された項目が取得されます。

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items

または、Pretty-print のチェックボックスを押すこともできます:

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items

Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items

参考文献:

  • https://dev.to/zahraajawad/building-a-jupyter-notebook-environment-in-docker-for-data-analysis-on-aws-ec2-376i
  • https://semaphoreci.com/community/tutorials/how-to-deploy-a-go-web-application-with-docker
  • https://hub.docker.com/_/golang
  • https://docs.docker.com/guides/golang/build-images/
  • https://github.com/gorilla/mux

以上がAWS 上の Docker を使用した Go アプリケーションの構築: 項目の追加と取得のための RESTful インターフェイスの作成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート