最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker Compose之Sidecar模式詳解

 更新時間:2021年12月08日 10:45:52   作者:chester·chen  
這篇文章主要介紹了Docker Compose之Sidecar模式,本文通過圖文實例代碼相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

什么是Docker Compose

在微服務盛行的今天,我們通常是這么定義Compose的:對容器的統(tǒng)一啟動和關閉的編排工具。

但是我以前還是有個疑惑,誰會用Compose在一臺服務器上部署多個服務呢?干脆直接用單體服務就行了!直到我遇到了以下的一個需求,讓我明白了在一臺服務器上不得不用多個服務的時候,Compose可以通過sidecar的模式,讓服務很簡單的通過127.0.0.1調用另一個服務

需求遇到不合適的語言

一個用golang開發(fā)的某個項目,希望根據(jù)學生信息打印學籍,學籍表其中一部分如下

go中并不是沒有操作word的庫,但是操作這樣一個復雜的word,并且填好信息還是有很大難度。所以我們想到了一個實現(xiàn)方案。

實現(xiàn)方案

1.通過excel定義一個一樣的模板

2.golang往excel的指定cell里填值,這樣相對往word里填值就簡單很多,其中一部分代碼

xlsx.SetCellValue("Sheet1", "C3", student.Major.Name)
xlsx.SetCellValue("Sheet1", "F3", student.ClassInfo.Name)
xlsx.SetCellValue("Sheet1", "J3", student.SchoolSystem)
 
xlsx.SetCellValue("Sheet1", "B4", student.Name)
xlsx.SetCellValue("Sheet1", "D4", student.BeforName)
xlsx.SetCellValue("Sheet1", "F4", student.Gender)
xlsx.SetCellValue("Sheet1", "H4", student.Nation)
 
xlsx.SetCellValue("Sheet1", "B5", student.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了沒找到golang把excel轉成pdf的庫(有推薦可以留言),于是想到了.net里的FreeSpire.Xls庫可以很方便實現(xiàn)excel轉pdf的功能,所以需要有個.net api把go生產(chǎn)并填好的excel轉成pdf,于是我新建了一個.net webapi,項目名定義成pdfprocessor,其中定一個Controller

[Route("[controller]")]
    public class PDFController : ControllerBase
    {
        private readonly ILogger<PDFController> _logger;
        public PDFController(ILogger<PDFController> logger)
        {
            _logger = logger;
        }

        [HttpPost]
        public async Task<IActionResult> HttpPostAsync()
        {
            try
            {
                Stream stream = Request.Body;
                byte[] buffer = new byte[Request.ContentLength.Value];
                stream.Position = 0L;
                stream.ReadAsync(buffer, 0, buffer.Length);
                Workbook wb = new Workbook();
                wb.LoadFromStream(stream);
                Worksheet ws = wb.Worksheets[0];
                var streamReturn = new MemoryStream();

                ws.SaveToPdfStream(streamReturn);
                return File(streamReturn, "application/octet-stream");
            }
            catch (Exception ex)
            {
                _logger.LogError("", ex);
                return BadRequest(ex.Message);
            }
        }
    }

4.部署go項目與.net項目,使go語言調用.net api實現(xiàn)excel轉化pdf

因為這是一個很小的單體項目,那么如何使這個部署與調用相對簡單就是我需要考慮的問題了,這時候我想到了Docker Compose。

我可以通過docker-compose同時啟動go api和.net api,最重要的還是可以讓go與.net項目使用同一個network的方式,使go api通過127.0.0.1:port來調用.net api,拓撲如下

5.go api通過127.0.0.1調用 .net api,這樣.net api就成了go api的一個sidecar,為其服務

response, err := http.Post("http://127.0.0.1:6081/PDF", "multipart/form-data;boundary="+multipart.NewWriter(bytes.NewBufferString("")).Boundary(), bytes.NewReader(byteA))
if err != nil {
    c.Bad(err.Error())
    return
}
defer response.Body.Close()
if response.StatusCode != 200 {
    data, _ := ioutil.ReadAll(response.Body)
    c.Bad(string(data))
    return
}
 
pdfFilePth := fmt.Sprintf("./templates/tmp/%s.pdf", uuid.New())
f, err := os.Create(pdfFilePth)
if err != nil {
    c.Bad(err.Error())
    return
}
io.Copy(f, response.Body)
c.Ctx.Output.Download(pdfFilePth, "data.xlsx")

6.docker-compose部署

編寫go的dockerfile

FROM library/golang
 
WORKDIR /app
RUN go env -w GO111MODULE=on
RUN go env -w GOPROXY=https://goproxy.cn,direct
ADD api/ /app
RUN cd /app
RUN go mod tidy
RUN go build main.go
ENTRYPOINT ["/app/main"]
EXPOSE 6080

編寫.net的dockerfile

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
RUN apt-get update
RUN apt-get install -y --no-install-recommends libgdiplus libc6-dev 
RUN apt-get install -y fontconfig xfonts-utils
COPY /pdfprocessor/fonts/  /usr/share/fonts/
RUN mkfontscale
RUN mkfontdir
RUN fc-cache -fv

WORKDIR /app
EXPOSE 6081

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["pdfprocessor/pdfprocessor.csproj", "pdfprocessor/"]
RUN dotnet restore "pdfprocessor/pdfprocessor.csproj"
COPY . .
WORKDIR "/src/pdfprocessor"
RUN dotnet build "pdfprocessor.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "pdfprocessor.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "pdfprocessor.dll"]

編寫docker-compose.yaml,讓goapi與.net api使用同一個network

version: '3.4'

services:
  pdfprocessor:
    image: pdfprocessor
    build:
      context: .
      dockerfile: pdfprocessor/Dockerfile
    depends_on:
      - eduadmin
    network_mode: "service:eduadmin"
  eduadmin:
    image: eduadmin
    build:
      context: .
      dockerfile: api/Dockerfile
    ports:
      - "6080:6080"
      - "6088:6088"

7.通過docker-compose up -d啟動服務,查看pdf展示效果

最后想說docker-compose真香!

到此這篇關于Docker Compose之Sidecar模式的文章就介紹到這了,更多相關Docker Compose Sidecar模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Docker基礎教程之Dockerfile語法詳解

    Docker基礎教程之Dockerfile語法詳解

    這篇文章主要給大家介紹了關于Docker基礎教程之Dockerfile語法的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Docker具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-07-07
  • docker創(chuàng)建mongodb容器存儲數(shù)據(jù)步驟詳解

    docker創(chuàng)建mongodb容器存儲數(shù)據(jù)步驟詳解

    這篇文章主要為大家介紹了docker創(chuàng)建mongodb容器存儲數(shù)據(jù)步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 常用的Docker基本命令及用法匯總

    常用的Docker基本命令及用法匯總

    Docker是一個用了一種新穎方式實現(xiàn)的超輕量虛擬機,在實現(xiàn)的原理和應用上還是和VM有巨大差別,專業(yè)的叫法是應用容器(Application Container)。今天給大家匯總介紹15個常用的docker命令以及用法
    2016-11-11
  • VSCode連接遠程docker環(huán)境操作步驟

    VSCode連接遠程docker環(huán)境操作步驟

    這篇文章主要介紹了如何在容器內(nèi)部署和配置,包括查看Docker版本、管理容器和鏡像、構建容器、配置容器內(nèi)部環(huán)境、安裝和配置VSCode以及遠程連接和配置遠程Docker容器環(huán)境,需要的朋友可以參考下
    2025-03-03
  • 使用Docker部署Nginx并掛載目錄詳解

    使用Docker部署Nginx并掛載目錄詳解

    這篇文章主要為大家詳細介紹了使用Docker部署Nginx并掛載目錄的相關方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-04-04
  • Docker部署Zookeeper官方鏡像的保姆級教程

    Docker部署Zookeeper官方鏡像的保姆級教程

    這篇文章介紹了如何使用Docker和Docker Compose部署Zookeeper官方鏡像,包括安裝Docker及可視化工具、創(chuàng)建掛載目錄、運行Zookeeper容器、查看運行狀態(tài)以及驗證是否正常運行,需要的朋友可以參考下
    2025-02-02
  • 用Docker作為PaaS的替代方案是否完美無缺

    用Docker作為PaaS的替代方案是否完美無缺

    Docker的出現(xiàn)似乎又帶來了一種新的選擇,而且對于開發(fā)者來說更加靈活、便捷、易用。既然用戶可以直接在Docker上運行,PaaS是否還有應用場景?面對企業(yè)繁雜的應用環(huán)境,用Docker作為PaaS的替代方案是否完美無缺
    2016-11-11
  • 詳解docker容器的層的概念

    詳解docker容器的層的概念

    這篇文章主要介紹了詳解docker容器的層的概念,幫助大家更好的理解和學習使用docker容器,感興趣的朋友可以了解下
    2021-04-04
  • docker容器環(huán)境安裝及鏡像基礎操作

    docker容器環(huán)境安裝及鏡像基礎操作

    容器是一種輕量級虛擬化技術,能夠快速構建業(yè)務環(huán)境并便于業(yè)務遷移,解決兼容性問題,這篇文章主要介紹了docker容器環(huán)境安裝及鏡像基礎操作,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-09-09
  • Linux如何使用Docker部署DashDot訪問本地服務器面板

    Linux如何使用Docker部署DashDot訪問本地服務器面板

    DashDot是一款簡單、實用的開源現(xiàn)代服務器儀表盤,主要應用于小型?VPS?和私人的服務器(比如說NAS),它是一個界面非常漂亮的監(jiān)控服務器面板,這篇文章給大家介紹Linux使用Docker部署DashDot訪問本地服務器面板的相關知識,感興趣的朋友跟隨小編一起看看吧
    2024-04-04

最新評論

常熟市| 鄂伦春自治旗| 安宁市| 阿瓦提县| 栖霞市| 麦盖提县| 长顺县| 潮州市| 抚顺县| 广德县| 鹤岗市| 吉安县| 大新县| 卓尼县| 大丰市| 城步| 寿阳县| 垣曲县| 苏尼特左旗| 安泽县| 山西省| 涞源县| 钟山县| 剑河县| 大理市| 开封县| 江西省| 淳安县| 甘洛县| 无为县| 玉环县| 乌鲁木齐县| 孟村| 大厂| 南召县| 长兴县| 祁阳县| 长武县| 汝州市| 镇江市| 彰武县|