卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章34371本站已运行393

为 golang Web 应用程序创建 dockerfile

为 golang web 应用程序创建 dockerfile

php小编柚子为您带来了关于创建golang Web应用程序的dockerfile的介绍。随着容器化技术的发展,使用Docker来构建和部署应用程序变得越来越流行。在这篇文章中,我们将学习如何为golang Web应用程序创建一个有效的dockerfile,以便能够轻松地在不同的环境中部署和运行您的应用。无论您是初学者还是有经验的开发人员,本文都将为您提供清晰的步骤和实用的技巧,帮助您顺利进行docker化的开发工作。让我们一起开始吧!

问题内容

我已经尝试按照那里的教程进行操作,但由于某种原因,由于我的目录设置方式,我似乎无法创建 dockerfile 来为我的 web 应用程序创建 docker 容器,以便我可以运行它使用 docker 在多个设备上运行。

这是我的项目结构:

myapp
    /cmd
        /web
            - main.go
            - middleware.go
            - routes.go
    /pkg
        /somepackage
            - somegolangfile.go 
        /anotherpackageiuse
            - somegolangfile.go
    /templates
        -html files 
    go.mod
    go.sum
    .gitignore 
    dockerfile

这是我正在使用的 dockerfile:

from golang:latest as build

workdir /build
copy . .
run go build  -o app .
 
from alpine:latest as run
workdir /app
copy --from=build /build/app .
entrypoint ["/app/app"]

我收到错误消息,/build 中没有 go 文件。这是正确的,并且错误是有道理的,因为 go 文件位于 cmd/web/

但是,我似乎无法修复它。我尝试过这样做:

FROM golang:latest as build

WORKDIR /build
COPY . .
RUN go build  cmd/web/ -o app .
 
FROM alpine:latest as run
WORKDIR /app
COPY --from=build /build/app .
ENTRYPOINT ["/app/app"]

这里的主要区别是我已经将 run go build -o app . 替换为 run go build cmd/web/ -o app .,但我收到了错误,我的 sum.go 和 mod.go 是不存在于目录中,这也是如此

如何为我的 web 应用程序创建一个 docker 容器,并在其中构建我的 go 文件位于不同目录中的容器?另外,当我正常运行我的web应用程序时,我使用了 go run cmd/web/*.go 其中cmd/web目录中的所有golang文件需要同时运行。因此,我还需要我的 dockerfile 来一起构建和编译所有 golang 文件

================================================

解决方法

嘿@radin khosraviani,

copy 。 .只会复制源代码。您还需要复制 go 模块文件

下面我修改了您的docker文件并添加了 copy go.mod . copy go.sum . run go mod download

FROM golang:latest as build

WORKDIR /app

# Copy the Go module files
COPY go.mod .
COPY go.sum .

# Download the Go module dependencies
RUN go mod download

COPY . .

RUN go build -o /myapp ./cmd/web
 
FROM alpine:latest as run

# Copy the application executable from the build image
COPY --from=build /myapp /myapp

WORKDIR /app
EXPOSE 8080
CMD ["/myapp"]
卓越飞翔博客
上一篇: golang更新切片值没有反映在容器对象中
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏