Skip to content

Instantly share code, notes, and snippets.

@liemle3893
Last active November 3, 2023 14:52
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save liemle3893/025624fc02dbecc0e8fd99a40a4ae94c to your computer and use it in GitHub Desktop.
Save liemle3893/025624fc02dbecc0e8fd99a40a4ae94c to your computer and use it in GitHub Desktop.
Docker Multistage + Spring Boot = Smaller Container Sized

docker-multi-stage

Spring Boot + Docker Multistage = Smaller container size

Use can use prebuild version by using:

$ docker run -d -p 8080:8080 saboteurkid/smaller-spring:1.0

Wait for docker to pull and up. Then jump to step #6

1. Clone example project from Spring Boot repository

$ git clone https://github.com/spring-guides/gs-spring-boot.git
$ cd gs-spring-boot/complete

2. Create Dockerfile

$ wget https://gist.githubusercontent.com/liemle3893/025624fc02dbecc0e8fd99a40a4ae94c/raw/7d5ed6c21fc981ce347bff5fcbea472fab988b26/Dockerfile

3. Build the image

$ docker build -t saboteurkid/smaller-spring:1.0 .

4. Check the images

$ docker images

You will see something like this:

saboteurkid/smaller-spring   1.0                 f880454cde3e        23 minutes ago      99.4MB

5. Create new container that run the newly created image

$ docker run -d -p 8080:8080 saboteurkid/smaller-spring:1.0

6. Test the result

$ curl localhost:8080

You will received: Greetings from Spring Boot!

FROM gradle:4.6-jdk8-alpine as compile
COPY . /home/source/java
WORKDIR /home/source/java
# Default gradle user is `gradle`. We need to add permission on working directory for gradle to build.
USER root
RUN chown -R gradle /home/source/java
USER gradle
RUN gradle clean build
FROM openjdk:8-jre-alpine
WORKDIR /home/application/java
COPY --from=compile "/home/source/java/build/libs/gs-spring-boot-0.1.0.jar" .
EXPOSE 8080
ENTRYPOINT [ "java", "-jar", "/home/application/java/gs-spring-boot-0.1.0.jar"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment