I have created a dagger project to build image from dockerfile and upload to gitlab container registry
import { connect, Client, Directory, Secret } from '@dagger.io/dagger'
import Path from 'node:path'
const gitlabRepositoryUrl = '...'
const gitlabRepositoryUsername = '...'
const gitlabRepositoryPassword = '...'
connect(async (client) => {
const jmixPath: string = Path.join(process.cwd(), 'app')
const jmixContextDir: Directory = client.host().directory(jmixPath)
const gitlabRepositoryPasswordSecret: Secret = client.setSecret(
'gitlabRepositoryPassword',
gitlabRepositoryPassword
)
const imageRef: string = await jmixContextDir
.dockerBuild()
.withRegistryAuth(gitlabRepositoryUrl, gitlabRepositoryUsername, gitlabRepositoryPasswordSecret)
.publish(`${gitlabRepositoryUrl}/repo/app:3.0.5`)
console.log(`Published image to: ${imageRef}`)
}, { LogOutput: process.stderr })
And the docker file is
FROM gradle:8.4.0-jdk17 as Builder
WORKDIR /app
COPY . .
RUN ./gradlew -Pvaadin.productionMode=true bootJar
FROM openjdk:17.0.2-jdk-slim
WORKDIR /app
COPY --from=Builder /app/build/libs/knowledge-0.0.1-SNAPSHOT.jar /app/app.jar
CMD java -jar /app/app.jar
When I build the image locally by running ./gradlew -Pvaadin.productionMode=true bootJar it takes 1 minute or less (obviusly, by caches saved on my machine) but when I run from a bash script it takes 5-7 minutes (which is still and acceptable time)
KNOWLEDGE_DOCKER_NAME="registry.gitlab.com/repo/app"
docker build --tag $KNOWLEDGE_DOCKER_NAME:3.0.4 --file dockerfile .
docker push $KNOWLEDGE_DOCKER_NAME:3.0.4
But when I execute from dagger dagger run node --loader ts-node/esm ./src/index.ts it is taking 1h45m and still not finishing 😦
I guess dagger is not using my full hardware to build the image (i don't know), any one knows how can I reduce that execution time?