Rumah > pembangunan bahagian belakang > Golang > Buat fail docker untuk aplikasi web golang

Buat fail docker untuk aplikasi web golang

王林
Lepaskan: 2024-02-08 21:57:20
ke hadapan
1014 orang telah melayarinya

为 golang Web 应用程序创建 dockerfile

editor php Yuzi membawakan anda pengenalan untuk mencipta fail docker untuk aplikasi web golang. Apabila teknologi kontena berkembang, menggunakan Docker untuk membina dan menggunakan aplikasi telah menjadi semakin popular. Dalam artikel ini, kami akan mempelajari cara membuat fail docker yang sah untuk aplikasi web golang agar dapat menggunakan dan menjalankan aplikasi anda dengan mudah dalam persekitaran yang berbeza. Sama ada anda seorang pemula atau pembangun yang berpengalaman, artikel ini akan memberikan anda langkah yang jelas dan petua praktikal untuk membantu anda menjalankan kerja pembangunan berlabuh dengan lancar. Mari mulakan!

Kandungan soalan

Saya telah cuba mengikuti tutorial di sana tetapi atas sebab tertentu, disebabkan oleh cara direktori saya disediakan, saya tidak dapat mencipta fail docker untuk mencipta bekas docker untuk aplikasi web saya supaya saya boleh menjalankannya Gunakan docker untuk dijalankan pada berbilang peranti.

Ini adalah struktur projek saya:

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
Salin selepas log masuk

Ini ialah fail docker yang saya gunakan:

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"]
Salin selepas log masuk

Saya mendapat ralat bahawa tiada fail go dalam /build. Ini betul dan ralat itu masuk akal kerana fail go terletak dalam cmd/web/

Namun, saya nampaknya tidak dapat membetulkannya. Saya telah mencuba melakukan ini:

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"]
Salin selepas log masuk

Perbezaan utama di sini ialah saya telah menambah run go build -o app . 替换为 run go build cmd/web/ -o app . tetapi saya mendapat ralat bahawa sum.go dan mod.go saya tidak terdapat dalam direktori dan ini juga benar

Bagaimanakah saya boleh membuat bekas docker untuk aplikasi web saya dan membina bekas di dalamnya dengan fail go saya dalam direktori lain? Selain itu, apabila saya menjalankan aplikasi web saya seperti biasa, saya menggunakan go run cmd/web/*.go di mana semua fail golang dalam direktori cmd/web perlu dijalankan pada masa yang sama. Oleh itu, saya juga memerlukan fail docker saya untuk membina dan menyusun semua fail golang bersama-sama

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

Penyelesaian

Hey @radin khosraviani,

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

Di bawah saya mengubah suai fail docker anda dan menambah 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"]
Salin selepas log masuk

Atas ialah kandungan terperinci Buat fail docker untuk aplikasi web golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan