Rumah > pembangunan bahagian belakang > Golang > go install mengambil banyak masa dalam dockerfile

go install mengambil banyak masa dalam dockerfile

王林
Lepaskan: 2024-02-06 09:50:04
ke hadapan
1234 orang telah melayarinya

go install 在 dockerfile 中需要花费很多时间

Kandungan soalan

Saya menggunakan go-jet 从数据库生成模型,因此我需要在 go build 之前运行 jet。我需要通过 go install 安装它,否则 docker 找不到 jet boleh laku. Saya telah menghadapi masalah: Apabila saya membina semula aplikasi saya, docker memuat turun semula go-jet setiap kali (mengambil masa 60-80 saat).

Adakah terdapat cara yang lebih baik untuk menjana (atau cache perpustakaan jet)? Pemasangan mengambil masa terlalu lama

Saya cuba caching jet dalam Dockerfile, tetapi ia dimuat turun semula semula:

RUN --mount=type=cache,target=/go/pkg/mod/ \
    go install github.com/go-jet/jet/v2/cmd/jet@latest
Salin selepas log masuk

Fail Docker Saya:

FROM golang:latest

WORKDIR /app

COPY go.mod .
COPY go.sum .

RUN go mod download

COPY . .

RUN go install github.com/go-jet/jet/v2/cmd/jet@latest

CMD sh deployments/startup.sh
Salin selepas log masuk

Permulaan.sh saya:

jet -dsn="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}?sslmode=disable" -schema=public -path=.gen
cd cmd/app
go build
./app
Salin selepas log masuk

Dan karang buruh pelabuhan saya, untuk berjaga-jaga:

version: '3.9'

x-common-variables: &database-credentials
  POSTGRES_DB: ${POSTGRES_DB}
  POSTGRES_USER: ${POSTGRES_USER}
  POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
  POSTGRES_HOST: ${POSTGRES_HOST}
  POSTGRES_PORT: ${POSTGRES_PORT}

services:
  cache:
    image: redis:latest
    restart: always
    ports:
      - "6379:6379"
    command: redis-server
    environment:
      - REDIS_PORT=6379

  database:
    image: postgres:latest
    container_name: db
    environment:
      <<: *database-credentials
    ports:
      - "5433:5432"
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -U postgres" ]
      interval: 5s
      timeout: 5s
      retries: 10

  migrate:
    image: migrate/migrate
    volumes:
      - ../internal/app/storage/postgres/migrations:/migrations
    command: -path /migrations -database "postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:${POSTGRES_PORT}/${POSTGRES_DB}?sslmode=disable" up
    depends_on:
      database:
        condition: service_healthy

  webapi:
    image: webapi
    build: ../
    ports:
      - "8080:8080"
    depends_on:
      - migrate
    environment:
      <<: *database-credentials
Salin selepas log masuk


Jawapan Betul


Menemui penyelesaian yang sangat mudah. Saya perlu go install 放在 COPY 之前。 .。发生了什么:当 docker 检测到项目中的更改时,它删除了应用程序缓存(行 COPY . . )和所有以下行(包括 go install).

Fail Docker terakhir saya:

...

RUN go install github.com/go-jet/jet/v2/cmd/jet@latest

COPY . .

...
Salin selepas log masuk

Atas ialah kandungan terperinci go install mengambil banyak masa dalam dockerfile. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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