欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker Compose之Sidecar模式詳解

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

什么是Docker Compose

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

但是我以前還是有個(gè)疑惑,誰會(huì)用Compose在一臺(tái)服務(wù)器上部署多個(gè)服務(wù)呢?干脆直接用單體服務(wù)就行了!直到我遇到了以下的一個(gè)需求,讓我明白了在一臺(tái)服務(wù)器上不得不用多個(gè)服務(wù)的時(shí)候,Compose可以通過sidecar的模式,讓服務(wù)很簡(jiǎn)單的通過127.0.0.1調(diào)用另一個(gè)服務(wù)

需求遇到不合適的語言

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

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

實(shí)現(xiàn)方案

1.通過excel定義一個(gè)一樣的模板

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

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.最關(guān)鍵的一步,把excel轉(zhuǎn)成pdf返給前端,供其展示或者打印

我在github了沒找到golang把excel轉(zhuǎn)成pdf的庫(有推薦可以留言),于是想到了.net里的FreeSpire.Xls庫可以很方便實(shí)現(xiàn)excel轉(zhuǎn)pdf的功能,所以需要有個(gè).net api把go生產(chǎn)并填好的excel轉(zhuǎn)成pdf,于是我新建了一個(gè).net webapi,項(xiàng)目名定義成pdfprocessor,其中定一個(gè)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項(xiàng)目與.net項(xiàng)目,使go語言調(diào)用.net api實(shí)現(xiàn)excel轉(zhuǎn)化pdf

因?yàn)檫@是一個(gè)很小的單體項(xiàng)目,那么如何使這個(gè)部署與調(diào)用相對(duì)簡(jiǎn)單就是我需要考慮的問題了,這時(shí)候我想到了Docker Compose。

我可以通過docker-compose同時(shí)啟動(dòng)go api和.net api,最重要的還是可以讓go與.net項(xiàng)目使用同一個(gè)network的方式,使go api通過127.0.0.1:port來調(diào)用.net api,拓?fù)淙缦?/p>

5.go api通過127.0.0.1調(diào)用 .net api,這樣.net api就成了go api的一個(gè)sidecar,為其服務(wù)

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使用同一個(gè)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啟動(dòng)服務(wù),查看pdf展示效果

最后想說docker-compose真香!

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

相關(guān)文章

  • Windows10系統(tǒng)下docker安裝指南以及踩坑解決

    Windows10系統(tǒng)下docker安裝指南以及踩坑解決

    這篇文章主要給大家介紹了關(guān)于Windows10系統(tǒng)下docker安裝指南以及踩坑解決的相關(guān)資料,相信大家都知道Docker有很多種安裝的選擇,其中支持最好的是Ubuntu系統(tǒng),而且docker如果想在windows上運(yùn)行必須借助docker-machine,需要的朋友可以參考下
    2023-08-08
  • 解決docker拉取mysql鏡像太慢的情況

    解決docker拉取mysql鏡像太慢的情況

    這篇文章主要介紹了解決docker拉取mysql鏡像太慢的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Docker拉鏡像報(bào)錯(cuò)error pulling image configuration: unknown blob

    Docker拉鏡像報(bào)錯(cuò)error pulling image configuration:

    這篇文章主要介紹了Docker拉鏡像報(bào)錯(cuò)error pulling image configuration: unknown blob的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • docker中Dockerfile方式建立鏡像HelloWorld

    docker中Dockerfile方式建立鏡像HelloWorld

    這篇文章主要介紹了docker中Dockerfile方式建立鏡像HelloWorld,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • docker搭建Zookeeper集群的方法步驟

    docker搭建Zookeeper集群的方法步驟

    本文主要介紹了docker搭建Zookeeper集群的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • docker數(shù)據(jù)卷容器掛載不上的解決方法

    docker數(shù)據(jù)卷容器掛載不上的解決方法

    docker容器之間可以通過相互掛載實(shí)現(xiàn)數(shù)據(jù)共享,本文主要介紹了docker數(shù)據(jù)卷容器掛載不上的解決方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Docker利用DockerFile創(chuàng)建部署NVIDIA+PyTorch容器的詳細(xì)過程

    Docker利用DockerFile創(chuàng)建部署NVIDIA+PyTorch容器的詳細(xì)過程

    這篇文章主要介紹了Docker利用DockerFile創(chuàng)建部署NVIDIA+PyTorch容器的詳細(xì)過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • 基于docker啟動(dòng)nginxssl配置

    基于docker啟動(dòng)nginxssl配置

    這篇文章主要介紹了基于docker啟動(dòng)nginxssl配置,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Docker核心組件之聯(lián)合文件系統(tǒng)詳解

    Docker核心組件之聯(lián)合文件系統(tǒng)詳解

    這篇文章主要為大家介紹了Docker核心組件之聯(lián)合文件系統(tǒng)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • docker+gitlab+jenkins從零搭建自動(dòng)化部署

    docker+gitlab+jenkins從零搭建自動(dòng)化部署

    通過幾天的學(xué)習(xí)和自己的理解,整理了下Docker+Jenkins的自動(dòng)部署教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評(píng)論