Non limité à cette fois, allez-vous monter sur l'épaule du géant et rendre le forfait pratique? Dernière fois Commencez à partir de l'endroit où vous avez créé le package. Encore une fois, il y a Code source. Veuillez lire de temps en temps (README est dur, mais pardonnez-moi s'il vous plaît).
Cette fois, nous utiliserons celui développé par Palantir Technologies (industrie de l'analyse de données) aux États-Unis. Ce sont des plugins docker. "Tachi" est dû au fait qu'il existe des plug-ins indépendants pour docker, docker-run et docker-compose. https://github.com/palantir/gradle-docker Je me demande si la composition est bonne cette fois ... Pour le moment, nous nous occuperons de tout, du gradle au démarrage du conteneur.
Eh bien, cela ne fonctionnera pas sans cela ... C'est ce que j'ai fait cette fois.
Dockerfile
FROM amazonlinux:latest
RUN yum update -y &&\
yum upgrade -y &&\
yum install java-11-amazon-corretto-headless -y
COPY ./build/libs/gradle-docker.jar /tmp/app.jar
ENTRYPOINT ["java", "-jar", "/tmp/app.jar"]
Je suppose qu'Amazon ECS / Fargate / EKS est un environnement cloud, il s'agit donc d'Amazon Linux (pensant abandonné). Si la taille de l'image est importante, ubuntu et alpin sont plus probables. Il n'y a rien que vous ne puissiez faire pour précipiter corretto dans les Alpes ... Je suis reconnaissant que Java soit 11 et que LTS puisse être utilisé gratuitement. Quoi qu'il en soit, commencez par commenter COPY et ENTRY POINT et vérifiez si cela fonctionne correctement.
C'est un endroit difficile. Tout d'abord, remplissez le plug-in.
build.gradle
plugins {
id 'java'
id 'application'
id 'idea'
id 'eclipse'
id 'com.palantir.docker' version '0.25.0'
id 'com.palantir.docker-run' version '0.25.0'
}
Ensuite, nous ajouterons différentes options à la tâche: docker que possède le plug-in. Le téléchargement de copySpec est difficile à comprendre, donc je l'expliquerai plus tard.
build.gradle
docker {
// name:Ce sera le nom de l'image du conteneur construit.
//Le côté droit séparé par deux points est reconnu comme une balise.
name "${project.name}:${project.version}"
//Inutile de dire qu'il s'agit d'un Dockerfile.
//Le chemin est.\Cela fonctionne avec ou sans lui.
dockerfile file('Dockerfile')
//Utilisez les spécifications de copie de Gradle pour amener les matériaux construits à la destination du plugin.
copySpec.from('build/libs').into('build/libs')
//utilisation du cache de construction du docker
noCache true
//Définition de la dépendance: après le docker gradle, la construction gradle s'exécute avant cela
dependsOn tasks.build
}
Maintenant, si vous dites "gradle docker" sur la ligne de commande de base, il devrait s'exécuter.
Eh bien, puisque c'est un gros problème, voulez-vous aller démarrer le conteneur? Le plug-in est déjà inclus, il vous suffit donc d'ajouter des options de tâche. Étant donné que les options de démarrage du conteneur sont différentes pour chaque personne, Veuillez lire attentivement la Documentation.
build.gradle
dockerRun {
//Le nom du conteneur.
name project.name
//Image pour démarrer(Le gars que j'ai fait avec la tâche de docker)
image "${project.name}:${project.version}"
//Démarrer le conteneur en tant que démon? : Exécution de Docker"-d" <-ce mec
daemonize false //Non, je manifeste
//Êtes-vous un thon?(arrêter puis terminer automatiquement)
clean true //C'est un thon.
}
Et maintenant, si vous appuyez sur la commande suivante, cela devrait l'être pour le moment.
$ ./gradlew docker
$ ./gradlew dockerRun
Hello World.
Cependant, il reste encore du travail à faire.
Actuellement, il n'y a pas de bibliothèque donc ça marche bien, Lorsque je fouille dans la bibliothèque de cadres, cela échoue avec classNotFound. La seule façon de s'en débarrasser est de mettre le fichier jar de la bibliothèque dans le fichier jar à construire (mais pas facile). C'est également facile si vous utilisez un plugin. ShadowJar, utilisons ceci cette fois. Ajoutez d'abord un plug,
build.gradle
plugins {
id 'java'
id 'application'
id 'idea'
id 'eclipse'
id 'com.palantir.docker' version '0.25.0'
id 'com.palantir.docker-run' version '0.25.0'
id 'com.github.johnrengelman.shadow' version '6.1.0' // <-ce mec
}
Ajoutez ensuite les options de tâche. Il dit finalisé par l'intérieur. Je ne vous l'ai pas dit lorsque j'ai ajouté la tâche docker, C'est un moyen explicite de passer à la tâche suivante une fois que cette tâche est correctement terminée. En d'autres termes, dans ce cas, vous souhaitez effectuer la tâche docker après avoir créé le fichier jar avec la tâche shadowJar. En ajoutant dependOn pour les tâches suivantes, il sera certainement exécuté avec shadowJar-> docker. Cependant, il n'y a aucune garantie que shadowJar se terminera avant l'exécution de la tâche docker. Pour être honnête, je suis un peu coincé ... dépendant de la tâche ...
build.gradle
shadowJar {
//Comme il ne fait pas référence à la tâche jar, spécifiez également le fichier d'archive ici
archiveFileName = "${project.name}.jar"
//Dépendances
finalizedBy tasks.docker
}
Et vous auriez dû pouvoir créer et démarrer l'image correctement avec la commande gradle docker / docker Run mentionnée ci-dessus.
Quant au plug-in docker, la clé est un fichier qui plonge dans l'image.
Le plug-in stocke les matériaux (y compris Dockerfile) sous
build.gradle
docker {
name "${project.name}:${project.version}"
dockerfile file('Dockerfile')
files shadowJar.archiveFile.get()
copySpec.into('build/libs')
noCache true
dependsOn tasks.shadowJar
}
En pré-remplissant l'option files, elle sera également répertoriée dans copySpec. Vous pouvez l'utiliser pour creuser dans l'image même si vous avez un autre fichier d'environnement que vous n'emballez pas dans le pot.
Cela peut être une prédication à Shaka, Nous vous recommandons de réécrire le Dockerfile pour le développement. Je construis une image avec le docker gradle à chaque fois, mais si je laisse tomber jdk et insuko, il se fanera. Créez une image qui a même créé un environnement java, Après cela, il est extrêmement rentable de commenter cette partie et de la diriger vers l'image qui a créé le FROM.
Cependant, ce groupe de plug-ins est génial, il y a beaucoup de choses à faire. Vous pouvez faire diverses choses telles que l'utilisation de l'image push et de la composition. J'ai toujours le sentiment que je suis ingénieur car il y a de telles choses et je peux les utiliser.
D'ailleurs, pour changer l'histoire, «monter sur les épaules d'un géant» n'est pas une métaphore, mais un géant. Il s'agit de SF. Turian est gentil.
De plus, comme c'est un peu gênant, je vais également créer un docker rmi avec la tâche gradle. Une chose que j'attends d'un plug-in est que je ne peux rien faire.
Recommended Posts