Heim > Backend-Entwicklung > Golang > Die Installation von go in der Docker-Datei nimmt viel Zeit in Anspruch

Die Installation von go in der Docker-Datei nimmt viel Zeit in Anspruch

王林
Freigeben: 2024-02-06 09:50:04
nach vorne
1167 Leute haben es durchsucht

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

Frageninhalt

Ich verwende go-jet 从数据库生成模型,因此我需要在 go build 之前运行 jet。我需要通过 go install 安装它,否则 docker 找不到 jet ausführbare Dateien. Ich bin auf ein Problem gestoßen: Wenn ich meine Anwendung neu erstelle, lädt Docker go-jet jedes Mal neu herunter (dauert 60–80 Sekunden).

Gibt es eine bessere Möglichkeit, die Jet-Bibliothek zu generieren (oder zwischenzuspeichern)? Die Installation dauert zu lange

Ich habe versucht, jet in der Docker-Datei zwischenzuspeichern, aber sie wurde erneut heruntergeladen:

RUN --mount=type=cache,target=/go/pkg/mod/ \
    go install github.com/go-jet/jet/v2/cmd/jet@latest
Nach dem Login kopieren

Meine Docker-Datei:

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

Mein Startup.sh:

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

Und mein Docker-Compose, nur für den Fall:

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


Richtige Antwort


Ich habe eine sehr einfache Lösung gefunden. Ich muss go install 放在 COPY 之前。 .。发生了什么:当 docker 检测到项目中的更改时,它删除了应用程序缓存(行 COPY . . )和所有以下行(包括 go install).

Meine letzte Docker-Datei:

...

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

COPY . .

...
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDie Installation von go in der Docker-Datei nimmt viel Zeit in Anspruch. 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