Heim > Backend-Entwicklung > Golang > Erstellen Sie eine Docker-Datei für die Golang-Webanwendung

Erstellen Sie eine Docker-Datei für die Golang-Webanwendung

王林
Freigeben: 2024-02-08 21:57:20
nach vorne
998 Leute haben es durchsucht

为 golang Web 应用程序创建 dockerfile

php-Editor Yuzi bietet Ihnen eine Einführung in die Erstellung von Docker-Dateien für Golang-Webanwendungen. Mit der Entwicklung der Containerisierungstechnologie wird die Verwendung von Docker zum Erstellen und Bereitstellen von Anwendungen immer beliebter. In diesem Artikel erfahren Sie, wie Sie eine gültige Docker-Datei für die Golang-Webanwendung erstellen, um Ihre Anwendung problemlos in verschiedenen Umgebungen bereitstellen und ausführen zu können. Unabhängig davon, ob Sie Anfänger oder erfahrener Entwickler sind, bietet Ihnen dieser Artikel klare Schritte und praktische Tipps, die Ihnen dabei helfen, die Docker-Entwicklungsarbeit reibungslos durchzuführen. Lass uns anfangen!

Frageninhalt

Ich habe versucht, den dortigen Tutorials zu folgen, aber aus irgendeinem Grund kann ich aufgrund der Art und Weise, wie mein Verzeichnis eingerichtet ist, anscheinend keine Docker-Datei erstellen, um einen Docker-Container für meine Web-App zu erstellen, damit ich kann es ausführen. Verwenden Sie Docker, um es auf mehreren Geräten auszuführen.

Das ist meine Projektstruktur:

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
Nach dem Login kopieren

Dies ist die Docker-Datei, die ich verwende:

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"]
Nach dem Login kopieren

Ich erhalte die Fehlermeldung, dass in /build keine Go-Dateien vorhanden sind. Das ist richtig und der Fehler macht Sinn, da sich die go-Dateien in cmd/web/

befinden

Allerdings kann ich es scheinbar nicht reparieren. Ich habe Folgendes versucht:

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"]
Nach dem Login kopieren

Der Hauptunterschied besteht darin, dass ich run go build -o app . 替换为 run go build cmd/web/ -o app . hinzugefügt habe, aber ich erhalte die Fehlermeldung, dass meine sum.go und mod.go nicht im Verzeichnis vorhanden sind, und das stimmt auch

Wie erstelle ich einen Docker-Container für meine Webanwendung und erstelle den darin enthaltenen Container mit meinen Go-Dateien in einem anderen Verzeichnis? Wenn ich meine Webanwendung normal ausführe, verwende ich außerdem go run cmd/web/*.go, wobei alle Golang-Dateien im Verzeichnis cmd/web gleichzeitig ausgeführt werden müssen. Daher benötige ich auch meine Docker-Datei, um alle Golang-Dateien zusammen zu erstellen und zu kompilieren

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

Lösung

Hey @radin khosraviani,

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

Unten habe ich Ihre Docker-Datei geändert und copy go.mod . copy go.sum . run go mod download

hinzugefügt
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"]
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonErstellen Sie eine Docker-Datei für die Golang-Webanwendung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage