はじめに
ほとんどの 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
これは、サーバーのメモリに保存されているアイテムのスライスです。
- 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
コードを貼り付けます:
次に、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://:8080/items
つまり、追加の実行:
別のアイテムを追加できます:
- Web ページで Go アプリケーションをテストします
Web ページを通じて Go アプリケーションが適切に動作するかどうかをテストするには、次の手順を実行します。
- インスタンスに戻り、チェックボックスで選択します。
- 詳細に移動し、パブリック IPv4 アドレスをコピーします。
- ポート 8080 のパブリック IPv4 アドレスをブラウザに貼り付けて、 を押します。 と入力してください。
Web ページは動作しており、ページ上の 項目 を押すと、curl コマンドによって追加された項目が取得されます。
または、Pretty-print のチェックボックスを押すこともできます:
参考文献:
- 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 サイトの他の関連記事を参照してください。

Cは、ハードウェアリソースと高性能の最適化が必要なシナリオにより適していますが、Golangは迅速な開発と高い並行性処理が必要なシナリオにより適しています。 1.Cの利点は、ハードウェア特性と高い最適化機能に近いものにあります。これは、ゲーム開発などの高性能ニーズに適しています。 2.Golangの利点は、その簡潔な構文と自然な並行性サポートにあり、これは高い並行性サービス開発に適しています。

Golangは実際のアプリケーションに優れており、そのシンプルさ、効率性、並行性で知られています。 1)同時プログラミングはゴルチンとチャネルを通じて実装されます。2)柔軟なコードは、インターフェイスと多型を使用して記述されます。3)ネット/HTTPパッケージを使用したネットワークプログラミングを簡素化、4)効率的な同時クローラーを構築する、5)ツールと最高の実践を通じてデバッグと最適化。

GOのコア機能には、ガベージコレクション、静的リンク、並行性サポートが含まれます。 1. GO言語の並行性モデルは、GoroutineとChannelを通じて効率的な同時プログラミングを実現します。 2.インターフェイスと多型は、インターフェイスメソッドを介して実装されているため、異なるタイプを統一された方法で処理できます。 3.基本的な使用法は、関数定義と呼び出しの効率を示しています。 4。高度な使用法では、スライスは動的なサイズ変更の強力な機能を提供します。 5.人種条件などの一般的なエラーは、Getest Raceを通じて検出および解決できます。 6.パフォーマンス最適化Sync.Poolを通じてオブジェクトを再利用して、ゴミ収集圧力を軽減します。

GO言語は、効率的でスケーラブルなシステムの構築においてうまく機能します。その利点には次のものがあります。1。高性能:マシンコードにコンパイルされ、速度速度が速い。 2。同時プログラミング:ゴルチンとチャネルを介してマルチタスクを簡素化します。 3。シンプルさ:簡潔な構文、学習コストとメンテナンスコストの削減。 4。クロスプラットフォーム:クロスプラットフォームのコンパイル、簡単な展開をサポートします。

SQLクエリの結果の並べ替えについて混乱しています。 SQLを学習する過程で、しばしば混乱する問題に遭遇します。最近、著者は「Mick-SQL Basics」を読んでいます...

テクノロジースタックの収束とテクノロジーの選択の関係ソフトウェア開発におけるテクノロジーの選択、テクノロジースタックの選択と管理は非常に重要な問題です。最近、一部の読者が提案しています...

ゴーラン...

GO言語で3つの構造を比較および処理する方法。 GOプログラミングでは、2つの構造の違いを比較し、これらの違いを...


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

WebStorm Mac版
便利なJavaScript開発ツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。
