Docker Composeとはマイクロサービスが普及している今日の世界では、Compose は通常、コンテナの統合された起動とシャットダウンのためのオーケストレーション ツールとして定義されます。 しかし、まだ疑問が残っています。Compose を使用して単一のサーバーに複数のサービスをデプロイするのは誰でしょうか?たった一つのサービスだけをご利用ください!次の要件に遭遇するまで、サーバー上で複数のサービスを使用する必要がある場合、Compose はサイドカー モードを使用して、サービスが 127.0.0.1 を介して別のサービスを簡単に呼び出すことができることに気付きました。 要件に不適切な言語が使用されているGolangで開発されたプロジェクトは、学生情報に基づいて学生のステータスを印刷することを望んでいます。学生ステータステーブルの一部は次のとおりです。 Go には単語を操作するためのライブラリがないわけではありませんが、それでもこのような複雑な単語を操作して情報を埋め込むのは非常に困難です。そこで私たちは解決策を思いつきました。 実装1. Excelで同じテンプレートを定義する 2. GolangはExcelの指定されたセルに値を入力します。これはWordに値を入力するよりもはるかに簡単です。コードの一部 xlsx.SetCellValue("Sheet1", "C3", 学生.専攻.名前) xlsx.SetCellValue("Sheet1", "F3", student.ClassInfo.Name) xlsx.SetCellValue("Sheet1", "J3", student.SchoolSystem) xlsx.SetCellValue("Sheet1", "B4", 学生.名前) xlsx.SetCellValue("Sheet1", "D4", 学生.BeforName) xlsx.SetCellValue("Sheet1", "F4", 学生.性別) xlsx.SetCellValue("Sheet1", "H4", student.Nation) xlsx.SetCellValue("Sheet1", "B5", 学生.IdCardNo) xlsx.SetCellValue("Sheet1", "F5", student.HomePlace) xlsx.SetCellValue("Sheet1", "B6", student.Birthday.Format("20060102")) xlsx.SetCellValue("Sheet1", "D6", student.EntranceTime.Format("20060102")) xlsx.SetCellValue("Sheet1", "F6", student.JoinTeamTime) xlsx.SetCellValue("Sheet1", "B7", student.FamilyAddress) xlsx.SetCellValue("Sheet1", "F7", student.HealthStatus) 3. 最も重要なステップは、ExcelをPDFに変換し、それをフロントエンドに返して表示または印刷することです。 githubでExcelをPDFに変換するためのGolangライブラリが見つからなかったので(何かおすすめがあればメッセージを残してください)、.netのFreeSpire.Xlsライブラリを考えました。これはExcelをPDFに変換する機能を簡単に実現できます。そこで、生成され記入されたExcelをPDFに変換するための.net APIが必要なので、.net WebAPIを作成し、プロジェクト名をpdfprocessorとして定義し、コントローラーを定義しました。 [ルート("[コントローラー]")] パブリッククラス PDFController:ControllerBase { プライベート読み取り専用 ILogger<PDFController> _logger; パブリック PDFController(ILogger<PDFController> ロガー) { _logger = ロガー; } [HttpPost] パブリック非同期タスク<IActionResult> HttpPostAsync() { 試す { ストリーム stream = Request.Body; byte[] バッファ = 新しい byte[Request.ContentLength.Value]; ストリームの位置 = 0L; stream.ReadAsync(バッファ、0、バッファの長さ); ワークブック wb = new Workbook(); ストリームからロードします。 ワークシート ws = wb.Worksheets[0]; var streamReturn = 新しい MemoryStream(); ws.SaveToPdfStream(ストリーム戻り値); File(streamReturn, "application/octet-stream") を返します。 } catch (例外例) { _logger.LogError("", 例); BadRequest(ex.Message) を返します。 } } } 4. Goプロジェクトと.NETプロジェクトをデプロイし、Go言語が.NET APIを呼び出してExcelをPDFに変換できるようにします。 小規模な単一プロジェクトなので、デプロイと呼び出しをいかにシンプルにするかを考える必要があります。このとき、Docker Compose を思いつきました。 docker-compose を通じて、Go API と .net API を同時に起動できます。最も重要なことは、Go プロジェクトと .net プロジェクトが同じネットワークを使用できるため、Go API は 127.0.0.1:port を介して .net API を呼び出すことができることです。トポロジーは次のとおりです。 5. Go APIは127.0.0.1を介して.NET APIを呼び出すため、.NET APIはGo APIのサイドカーとなり、それを提供する。 応答、エラー:= http.Post("http://127.0.0.1:6081/PDF", "multipart/form-data;boundary="+multipart.NewWriter(bytes.NewBufferString("")).Boundary(), bytes.NewReader(byteA)) err != nil の場合 { c.Bad(err.Error()) 戻る } 応答を延期する。Body.Close() レスポンスのステータスコードが200の場合{ データ、_ := ioutil.ReadAll(response.Body) c.Bad(文字列(データ)) 戻る } pdfFilePth := fmt.Sprintf("./templates/tmp/%s.pdf", uuid.New()) f, エラー:= os.Create(pdfFilePth) err != nil の場合 { c.Bad(err.Error()) 戻る } io.Copy(f, レスポンス本文) c.Ctx.Output.Download(pdfFilePth, "data.xlsx") 6. docker-compose デプロイメント Go 用の Dockerfile の作成 ライブラリ/golangから ワークディレクトリ /app go env -w GO111MODULE=onを実行します go env -w GOPROXY=https://goproxy.cn,direct を実行します。 api/ /app を追加する cd /app を実行 実行 go mod tidy go build main.go を実行します。 エントリポイント ["/app/main"] エクスポーズ6080 .net Dockerfile の作成 # Visual Studio がこの Dockerfile を使用してイメージを構築し、デバッグを高速化する方法を理解するには、https://aka.ms/containerfastmode を参照してください。 mcr.microsoft.com/dotnet/aspnet:6.0 AS ベースから apt-get updateを実行する apt-get install -y --no-install-recommends libgdiplus libc6-dev を実行します。 apt-get install -y fontconfig xfonts-utilsを実行します。 /pdfprocessor/fonts/ /usr/share/fonts/ をコピーします mkfontscaleを実行する mkfontdirを実行する fc-cache -fv を実行します。 ワークディレクトリ /app エクスポーズ6081 mcr.microsoft.com/dotnet/sdk:6.0 ASビルドから ワークディレクトリ /src コピー ["pdfprocessor/pdfprocessor.csproj", "pdfprocessor/"] dotnet restore "pdfprocessor/pdfprocessor.csproj" を実行します。 コピー 。 。 ワークディレクトリ "/src/pdfprocessor" dotnet build "pdfprocessor.csproj" -c Release -o /app/build を実行します。 ビルドからパブリッシュへ dotnet publish "pdfprocessor.csproj" -c Release -o /app/publish を実行します。 ベースから最終へ ワークディレクトリ /app --from=publish /app/publish にコピーします。 エントリポイント ["dotnet", "pdfprocessor.dll"] docker-compose.yaml を記述して、goapi と .net api が同じネットワークを使用できるようにします。 バージョン: '3.4' サービス: pdfプロセッサ: 画像: pdfprocessor 建てる: コンテクスト: 。 dockerfile: pdfprocessor/Dockerfile 依存: - 教育管理者 ネットワークモード: "サービス:eduadmin" 教育管理者: 画像: eduadmin 建てる: コンテクスト: 。 dockerfile: api/Dockerfile ポート: - 「6080:6080」 - 「6088:6088」 7. docker-compose up -dでサービスを開始し、PDFの表示効果を確認します。 最後に、docker-compose は本当に素晴らしいと言いたいです。 Docker Compose の Sidecar モードに関する記事はこれで終わりです。Docker Compose の Sidecar モードについてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
次のコマンドを実行します: glxinfo | grep レンダリング結果が「はい」の場合、グラフィ...
前提条件Compose は、Docker コンテナをオーケストレーションするためのツールです。Doc...
興味深い発見:合計 1000 件のレコードを含むテーブルがあります。クエリ ステートメントは次のよう...
開発中に、非常に単純なテキストバブル効果に遭遇しました。これは、おおよそ次のようになります。 うーん...
(1)サーバー構成: [root@localhost ~]# cd /usr/local/src/ ...
Docker はプロセスを中核としてシステムリソースを分離する管理ツールです。分離は、オペレーティン...
目次序文:特定の操作ステップ1: プレハブを準備するステップ2: オブジェクトプールを初期化するステ...
MySQL における一般的な utf8mb4 ソート規則は次のとおりです。 utf8mb4_0900...
必要とする本文の下のdivは垂直方向に中央揃えになっていますdiv 内のテキストを垂直中央に配置する...
多くのプロジェクトでは、中央に灰色の分割線があり、両側に分割線がないグリッド表示の機能を実装する必要...
目次MySQL テーブルの断片化の原因行の断片化行内断片化空き領域の断片化MySQL で極度に断片化...
1. 一般的に、CentOS では mariadb がデフォルトでインストールされているため、まず ...
2日前に新しい会社に入社しました。その会社ではIntelli Ideaを使っています。Eclipse...
この記事の例では、計算機機能を実装するためのjsの具体的なコードを参考までに共有しています。具体的な...
最初はブラウザのスクロールバーのスタイルを変更して効果を実現したいと思っていましたが、情報を調べてみ...