Maison  >  Article  >  développement back-end  >  Créer un fichier docker pour l'application Web Golang

Créer un fichier docker pour l'application Web Golang

王林
王林avant
2024-02-08 21:57:20964parcourir

为 golang Web 应用程序创建 dockerfile

l'éditeur php Yuzi vous propose une introduction à la création de fichiers docker pour les applications Web Golang. À mesure que la technologie de conteneurisation se développe, l'utilisation de Docker pour créer et déployer des applications est devenue de plus en plus populaire. Dans cet article, nous apprendrons comment créer un fichier docker valide pour une application Web Golang afin de pouvoir déployer et exécuter facilement votre application dans différents environnements. Que vous soyez débutant ou développeur expérimenté, cet article vous fournira des étapes claires et des conseils pratiques pour vous aider à réaliser en douceur les travaux de développement dockerisé. Commençons!

Contenu de la question

J'ai essayé de suivre les didacticiels mais pour une raison quelconque, en raison de la façon dont mon répertoire est configuré, je n'arrive pas à créer le fichier docker pour créer un conteneur docker pour mon application Web afin que je peut l'exécuter. Utilisez Docker pour l'exécuter sur plusieurs appareils.

Voici la structure de mon projet :

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

Voici le fichier docker que j'utilise :

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"]

J'obtiens l'erreur indiquant qu'il n'y a pas de fichiers go dans /build. C'est correct et l'erreur est logique puisque les fichiers go se trouvent dans cmd/web/

Cependant, je n'arrive pas à le réparer. J'ai essayé de faire ceci :

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"]

La principale différence ici est que j'ai ajouté run go build -o app . 替换为 run go build cmd/web/ -o app . mais j'obtiens l'erreur indiquant que mes sum.go et mod.go ne sont pas présents dans le répertoire et c'est également vrai

Comment puis-je créer un conteneur Docker pour mon application Web et créer le conteneur à l'intérieur avec mes fichiers Go dans un répertoire différent ? De plus, lorsque j'exécute normalement mon application Web, j'utilise go run cmd/web/*.go où tous les fichiers Golang du répertoire cmd/web doivent s'exécuter en même temps. Par conséquent, j'ai également besoin de mon dockerfile pour construire et compiler tous les fichiers Golang ensemble

================================================= = p>

Solution

Hey @radin khosraviani,

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

Ci-dessous, j'ai modifié votre fichier docker et ajouté 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"]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer