carlossg/docker-maven

Official Docker image with Maven

DockerfilePowerShellShellJava
This is stars and forks stats for /carlossg/docker-maven repository. As of 27 Apr, 2024 this repository has 486 stars and 420 forks.

docker-maven Supported tags and respective Dockerfile links Images are published under: csanchez/maven maven (linux and extending Docker official images only) ghcr.io/carlossg/maven (linux only) Linux Based Images See Docker Hub or GitHub Container Registry for an updated list of tags openjdk-8 (deprecated) openjdk-8-slim (deprecated) openjdk-11 (deprecated) openjdk-11-slim (deprecated) openjdk-17 (deprecated) openjdk-17-slim (deprecated) openjdk-18 (deprecated) openjdk-18-slim (deprecated) eclipse-temurin-8 eclipse-temurin-8-alpine eclipse-temurin-8-focal eclipse-temurin-11 eclipse-temurin-11-alpine eclipse-temurin-11-focal eclipse-temurin-16 eclipse-temurin-16-alpine eclipse-temurin-17 eclipse-temurin-17-alpine eclipse-temurin-17-focal eclipse-temurin-20 eclipse-temurin-20-alpine ibm-semeru-11-focal ibm-semeru-17-focal ibmjava-8 amazoncorretto-8 amazoncorretto-8-al2023 amazoncorretto-8-debian amazoncorretto-11 amazoncorretto-11-al2023 amazoncorretto-11-debian amazoncorretto-17 amazoncorretto-17-al2023 amazoncorretto-17-debian amazoncorretto-20 amazoncorretto-20-al2023 amazoncorretto-20-debian amazoncorretto-21 amazoncorretto-21-al2023 amazoncorretto-21-debian sapmachine-11 sapmachine-17 sapmachine-21 Only under csanchez/maven and ghcr.io/carlossg/maven: azulzulu-11 azulzulu-11-alpine azulzulu-17 azulzulu-17-alpine azulzulu-21 azulzulu-21-alpine libericaopenjdk-11 libericaopenjdk-11-alpine libericaopenjdk-17 libericaopenjdk-17-alpine libericaopenjdk-8 libericaopenjdk-8-alpine microsoft-openjdk-11-ubuntu microsoft-openjdk-16-ubuntu microsoft-openjdk-17-ubuntu Windows Based Images See Docker Hub csanchez/maven for an updated list of tags openjdk-8-windowsservercore-1809 (deprecated) openjdk-8-nanoserver (deprecated) openjdk-11-windowsservercore-1809 (deprecated) openjdk-11-nanoserver (deprecated) amazoncorretto-8-windowsservercore-1809 amazoncorretto-11-windowsservercore-1809 amazoncorretto-15-windowsservercore-1809 azulzulu-11-windowsservercore-1809 What is Maven? Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. How to use this image You can run a Maven project by using the Maven Docker image directly, passing a Maven command to docker run: Linux docker run -it --rm --name my-maven-project -v "$(pwd)":/usr/src/mymaven -w /usr/src/mymaven maven:3.3-jdk-8 mvn verify Windows docker run -it --rm --name my-maven-project -v "$(Get-Location)":C:/Src -w C:/Src csanchez/maven:3.3-jdk-8-windows mvn verify Windows docker run -it --rm --name my-maven-project -v "$(Get-Location)":C:/Src -w C:/Src maven:3.3-jdk-8-windows mvn clean install Building local Docker image (optional) This is a base image that you can extend, so it has the bare minimum packages needed. If you add custom package(s) to the Dockerfile, then you can build your local Docker image like this: docker build --tag my_local_maven:3.9.4-jdk-8 . Multi-stage Builds You can build your application with Maven and package it in an image that does not include Maven using multi-stage builds. # build FROM maven WORKDIR /usr/src/app COPY pom.xml . RUN mvn -B -e -C -T 1C org.apache.maven.plugins:maven-dependency-plugin:3.1.2:go-offline COPY . . RUN mvn -B -e -o -T 1C verify # package without maven FROM openjdk COPY --from=0 /usr/src/app/target/*.jar ./ Reusing the Maven local repository The local Maven repository can be reused across containers by creating a volume and mounting it in /root/.m2. docker volume create --name maven-repo docker run -it -v maven-repo:/root/.m2 maven mvn archetype:generate # will download artifacts docker run -it -v maven-repo:/root/.m2 maven mvn archetype:generate # will reuse downloaded artifacts Or you can just use your home .m2 cache directory that you share e.g. with your Eclipse/IDEA: docker run -it --rm -v "$PWD":/usr/src/mymaven -v "$HOME/.m2":/root/.m2 -v "$PWD/target:/usr/src/mymaven/target" -w /usr/src/mymaven maven mvn package Packaging a local repository with the image The $MAVEN_CONFIG dir (default to /root/.m2 or C:\Users\ContainerUser\.m2) could be configured as a volume so anything copied there in a Dockerfile at build time is lost. For that reason the dir /usr/share/maven/ref/ (or C:\ProgramData\Maven\Reference) exists, and anything in that directory will be copied on container startup to $MAVEN_CONFIG. To create a pre-packaged repository, create a pom.xml with the dependencies you need and use this in your Dockerfile. /usr/share/maven/ref/settings-docker.xml (C:\ProgramData\Maven\Reference\settings-docker.xml) is a settings file that changes the local repository to /usr/share/maven/ref/repository (C:\Programdata\Maven\Reference\repository), but you can use your own settings file as long as it uses /usr/share/maven/ref/repository (C:\ProgramData\Maven\Reference\repository) as local repo. COPY pom.xml /tmp/pom.xml RUN mvn -B -f /tmp/pom.xml -s /usr/share/maven/ref/settings-docker.xml dependency:resolve To add your custom settings.xml file to the image use COPY settings.xml /usr/share/maven/ref/ For an example, check the tests dir Running as non-root (not supported on Windows) Maven needs the user home to download artifacts to, and if the user does not exist in the image an extra user.home Java property needs to be set. For example, to run as the current user (instead of root), mounting the host Maven repo (at ~/.m2) docker run -v ~/.m2:/var/maven/.m2 -it --rm -u $(id -u) -e MAVEN_CONFIG=/var/maven/.m2 maven mvn -Duser.home=/var/maven archetype:generate Image Variants The maven images come in many flavors, each designed for a specific use case. maven:<version> This is the defacto image. If you are unsure about what your needs are, you probably want to use this one. It is designed to be used both as a throw away container (mount your source code and start the container to start your app), as well as the base to build other images off of. Installed Packages The following packages are currently installed in each variant. Some come from the parent images and some are installed in this image for backwards compatibility. git curl tar bash which gzip procps gpg ssh amazoncorretto-8 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ amazoncorretto-8-al2023 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ amazoncorretto-8-debian ✔️ ✔️ ✔️ ✔️ amazoncorretto-11 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ amazoncorretto-11-al2023 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ amazoncorretto-11-debian ✔️ ✔️ ✔️ ✔️ amazoncorretto-17 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ amazoncorretto-17-al2023 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ amazoncorretto-17-debian ✔️ ✔️ ✔️ ✔️ amazoncorretto-20 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ amazoncorretto-20-al2023 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ amazoncorretto-20-debian ✔️ ✔️ ✔️ ✔️ amazoncorretto-21 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ amazoncorretto-21-al2023 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ amazoncorretto-21-debian ✔️ ✔️ ✔️ ✔️ azulzulu-11 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ azulzulu-11-alpine ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ azulzulu-17 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ azulzulu-17-alpine ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ azulzulu-21 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ azulzulu-21-alpine ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ eclipse-temurin-8 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ eclipse-temurin-8-alpine ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ eclipse-temurin-8-focal ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ eclipse-temurin-11 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ eclipse-temurin-11-alpine ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ eclipse-temurin-11-focal ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ eclipse-temurin-17 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ eclipse-temurin-17-alpine ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ eclipse-temurin-17-focal ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ eclipse-temurin-20 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ eclipse-temurin-20-alpine ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ibm-semeru-11-focal ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ibm-semeru-17-focal ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ibmjava-8 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ libericaopenjdk-8 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ libericaopenjdk-8-alpine ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ libericaopenjdk-8-debian ✔️ ✔️ ✔️ ✔️ ✔️ libericaopenjdk-11 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ libericaopenjdk-11-alpine ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ libericaopenjdk-11-debian ✔️ ✔️ ✔️ ✔️ ✔️ libericaopenjdk-17 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ libericaopenjdk-17-alpine ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ libericaopenjdk-17-debian ✔️ ✔️ ✔️ ✔️ ✔️ microsoft-openjdk-11-ubuntu ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ microsoft-openjdk-16-ubuntu ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ microsoft-openjdk-17-ubuntu ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ sapmachine-11 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ sapmachine-17 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ sapmachine-21 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ Image Verification Images under csanchez/maven and ghcr.io/carlossg/maven are signed with sigstore/cosign using GitHub OIDC Verification can be done with cosign verify Example: COSIGN_EXPERIMENTAL=true cosign verify csanchez/maven:3-eclipse-temurin-17 Building Build with the usual docker build -t maven . Tests are written using bats for Linux images and pester for Windows images (requires Pester 4.x) under the tests dir. Use the env var TAG to choose what image to run tests against. Linux TAG=eclipse-temurin-17 bats tests Windows $env:TAG="openjdk-11" ; Invoke-Pester -Path tests or run all the tests with Linux for dir in $(/bin/ls -1 -d */ | grep -v 'tests\|windows'); do TAG=$(basename $dir) bats tests; done Windows Get-ChildItem -File -Include "*windows*" | ForEach-Object { Push-Location ; $env:TAG=$_.Name ; Invoke-Pester -Path tests ; Pop-Location } Bats can be easily installed with brew install bats-core on OS X. Note that you may first need to: git submodule init git submodule update Pester comes with most modern Windows (Windows 10 and Windows Server 2019), but is an older version than required. You may need to follow this tutorial on upgrading Pester to 4.x. Adding New Images Copy an existing dir (other than eclipse-temurin-11) to the new name and update Dockerfile as needed. Update README.md to include the new image and table with packages installed in that image. Run github-action-generation.sh to generate new GitHub Actions for the new image When adding a new JDK then it also needs to be added to the beginning of common.sh When a parent image changes the latest tag to a new JDK version it can be updated in common.sh Publishing to Docker Hub In order to publish the images a PR needs to be opened against docker-library/official-images For that we use publish.sh that runs generate-stackbrew-library.sh License View license information for the software contained in this image. User Feedback Issues If you have any problems with or questions about this image, please contact us through a GitHub issue. You can also reach many of the official image maintainers via the #docker-library IRC channel on Freenode. Contributing You are invited to contribute new features, fixes, or updates, large or small; we are always thrilled to receive pull requests, and do our best to process them as fast as we can. Before you start to code, we recommend discussing your plans through a GitHub issue, especially for more ambitious contributions. This gives other contributors a chance to point you in the right direction, give you feedback on your design, and help you find out if someone else is working on the same thing.
Read on GithubGithub Stats Page
repotechsstarsweeklyforksweekly
LinkedInLearning/gitops-foundations-env-2892009HCLShell2805050
hmcts/aks-sds-deployHCLShellTypeScript2060
openjdk/jmhJavaOther1.7k02610
dromara/dynamic-tpJavaCC++2.9k06430
tobychui/arozosJavaScriptCSSHTML1.4k01220
TherionRO/YouTubeiVancedLogosObjective-CMakefile130030
Strazil001/Dotfiles-AwesomeWMLuaShell47040
AOSPA/android_vendor_aospaMakefilePythonC++1001370
ppooll-dev/ppoollMaxJavaScript61030
TheAlienDrew/OS-ScriptsPowerShellShellBatchfile370150