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

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)文章

  • Docker基礎(chǔ)教程之Dockerfile語法詳解

    Docker基礎(chǔ)教程之Dockerfile語法詳解

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

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

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

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

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

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

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

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

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

    Docker部署Zookeeper官方鏡像的保姆級(jí)教程

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

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

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

    詳解docker容器的層的概念

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

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

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

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

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

最新評(píng)論

河北区| 红桥区| 五原县| 莎车县| 砀山县| 巫溪县| 扬州市| 伊金霍洛旗| 新巴尔虎右旗| 衡南县| 广安市| 屏东县| 长顺县| 黔西| 巴青县| 临西县| 乌拉特后旗| 营山县| 晋江市| 中山市| 康马县| 衡山县| 阳原县| 望城县| 育儿| 清新县| 栾城县| 台江县| 古丈县| 乌拉特前旗| 南汇区| 苗栗县| 含山县| 赫章县| 鄂州市| 五峰| 额尔古纳市| 邛崃市| 麟游县| 东阳市| 寿光市|