はじめに
ほとんどの 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
ここで:
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 で実行を確認した後、ダウンロードされたファイルを表示します。
次のコードを使用して Go アプリケーションを初期化します:
go mod init my-go-app
次に、次のコマンドでプロジェクト フォルダーを作成する必要があります。
mkdir
次に、コマンド:
で現在のディレクトリを変更します。
cd
したがって、実行は次のようになります:
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
これは、サーバーのメモリに保存されているアイテムのスライスです。
import ( "encoding/json" "log" "net/http" "github.com/gorilla/mux" "os" )
type Item struct { ID int `json:"id"` Name string `json:"name"` }
var items []Item
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
コードを貼り付けます:
次に、ctrl x、次に y (ファイルを保存するため) を押してキーボードからファイルを終了し、enter
をクリックします。Dockerfile:
ユーザーが画像を組み立てるためにコマンドラインで呼び出すことができるすべてのコマンドを含むテキストドキュメントです。
Dockerfile は、Dockerfile から命令を読み取ることでイメージを自動的に構築できます。
Dockerfile を作成します:
Docker でコンテナー イメージをビルドするには、ビルド手順を含む Dockerfile が必要です。
Dockerfile を作成し、nano Dockerfile:
Dockerfile コマンドの詳細は、docker docs ホームページ https://docs.docker.com/guides/golang/build-images/
でご覧いただけます。Dockerfile を準備したので、次は Go アプリケーション用の Docker イメージを構築します。イメージは、次の公式 Docker イメージから作成できます。
docker build -t my-go-app .
イメージは正常にビルドされました。次のコマンドを使用してビルドを確認します:
ドッカーイメージ
イメージを構築した後にコンテナを実行するには、以下を使用します:
docker run -p 8080:8080 my-go-app
ここで、8080 は Web サーバーのポートであるため、実行実行は次のようになります。
アプリケーションのテスト
-curl コマンドで Go アプリケーションをテストします
curl コマンドを使用して Go アプリケーションが適切に動作するかどうかをテストするには:
カール http://localhost:8080/items
または
curl http://:8080/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
つまり、追加の実行:
別のアイテムを追加できます:
- Web ページで Go アプリケーションをテストします
Web ページを通じて Go アプリケーションが適切に動作するかどうかをテストするには、次の手順を実行します。
Web ページは動作しており、ページ上の 項目 を押すと、curl コマンドによって追加された項目が取得されます。
または、Pretty-print のチェックボックスを押すこともできます:
参考文献:
以上がAWS 上の Docker を使用した Go アプリケーションの構築: 項目の追加と取得のための RESTful インターフェイスの作成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。