美文网首页
docker 发布一个完整golang后端服务

docker 发布一个完整golang后端服务

作者: 申_9a33 | 来源:发表于2022-02-16 10:05 被阅读0次

    写在前面,由于docker学了好久没有用,忘得差不多了,发布花了两天多,主要的坑是使用了golang:1.16-alpine这个镜像,单独使用dockerfile打包没有问题;使用多阶段打包,会报错找不到文件或者路径

    • 解决方式1: alpine上应该使用网络编译go,需要增加 -tags netgo。GOOS=linux GOARCH=amd64 go build -tags netgo -o rollingupdate${TAG} main.go
    • 解决方式2: 使用 golang:1.16镜像,去掉alpine

    我的golang项目目录

    捕获.PNG

    1.创建 Dockersfile文件,用来编译项目,打包

    ##
    ## Build
    ##
    FROM golang:1.16 AS build
    
    WORKDIR /app
    
    RUN go env -w GOPROXY=https://goproxy.cn,direct
    
    COPY . .
    
    RUN go mod download
    
    RUN GOOS=linux CGO_ENABLED=1 GOARCH=amd64 go build -o /gin-admin
    
    ##
    ## Deploy
    ##
    
    FROM fssq/distroless_base-debian10
    # FROM scratch
    
    WORKDIR /
    
    # 复制编译后的程序
    COPY --from=build /gin-admin /gin-admin
    # 复制配置文件
    COPY configs /configs
    
    EXPOSE 8080
    
    ENTRYPOINT ["/gin-admin"]
    
    • 1.1分为两个阶段 BuildDeploy ;
    • 1.2引入cgo ,需要 CGO_ENABLED=1

    2.创建docker-compose.yml 将多个关联引用整合在一起,主要用到数据库redis

    version: "3.7"
    services:
      app:
        build: .
        ports:
          - "8080:8080"
        links:
          - postgres
          - redis
    
      postgres:
        image: "postgres:alpine"
        environment:
          POSTGRES_DB: "gin-admin"
          POSTGRES_PASSWORD: 123456
        volumes:
          - pgdata:/var/lib/postgresql/data
    
      redis:
        image: "redis:alpine"
        volumes:
          - rddata:/data
    
    volumes:
      pgdata:
      rddata:
    
    
    
    • 2.1 app 是自己的应用 ,build 会执行Dockersfile
    • 2.2 postgres sql数据库
    • 2.3 redis
    • 2.4 访问同一容器其他服务网络,可以使用 networkslinks
      将三个应用整合成一个服务,后续直接部署

    3. 打包镜像

    3.1 打包并运行

    docker-compose up -d
    

    3.2 只打包

    docker-compose build
    

    相关文章

      网友评论

          本文标题:docker 发布一个完整golang后端服务

          本文链接:https://www.haomeiwen.com/subject/zqgawltx.html