Purpose / Feature
Steps
Dockerfile
. # Create an image from the 'Dockerfile' present i current directory.
docker build --debug -t srvivek/hello-world-docker:v1 .
9000
to container port 5000
. # List images
docker image ls
docker images
# List contaiers (including inactive one's)
docker container ls -a
# Create and run container using image name and tag
docker run -d -p 9000:5000 srvivek/hello-world-docker:v1
# Create and run container using image id.
docker run -d -p 9000:5000 da6e304ee5d9
# check logs of container
docker container logs 6c29fd75b10a
# login to docker
docker login
docker login -u $USERNAME
# publish image on docker hub
docker image push srvivek/hello-world-docker:v1
# Delete image from local
docker rmi srvivek/hello-world-docker:v1
# docker logout
docker logout
Docker hub useful links
Action | Resource link |
---|---|
List repositories | https://hub.docker.com/repositories/srvivek |
Create repository | https://hub.docker.com/repository/create?namespace=srvivek |
Maven / External dependency
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Code / Config changes
@RestController
public class HelloWorldController {
@GetMapping("/")
public String helloWorld() {
return "{\"message\":\"Hello wolrd Sboot + docker v1.\"}";
}
}
server.port=5000
Docker compose: Dockerfile
FROM openjdk:17
COPY ./target/*.jar app.jar
EXPOSE 5000
ENTRYPOINT [ "java", "-jar", "/app.jar" ]
References:
v2
. # Stage 1
# AS build - names the stage as 'build'
FROM maven:3.8.5-openjdk-17 AS build
# Set workdir dir
WORKDIR /home/app
# copy java-maven project contents to given path
COPY . /home/app/
# build and package content as jar
RUN mvn -f /home/app/pom.xml clean package
# Stage 2
FROM openjdk:17
COPY --from=build /home/app/target/*.jar app.jar
EXPOSE 5000
ENTRYPOINT [ "sh", "-c", "java -jar /app.jar" ]
Note: For
ENTRYPOINT
we can also provide link to.sh
file.
C3SbDockerHelloWorldApplication.java
. # Stage 1 - build and cache resources expecting less frequent changes
# AS build - names the stage as 'build'
FROM maven:3.8.5-openjdk-17 AS build
# Set workdir dir
WORKDIR /home/app
# copy pom.xml and main app class.
COPY ./src/main/java/com/srvivek/sboot/mservices/docker/C3SbDockerHelloWorldApplication.java \
/home/app/src/main/java/com/srvivek/sboot/mservices/docker/C3SbDockerHelloWorldApplication.java
COPY ./pom.xml /home/app/pom.xml
# build and store layer with mvn downloads and basic app
RUN mvn -f /home/app/pom.xml clean package
# Stage 2 : Now copy other resources which can changed frequesntly
# copy java-maven project contents to given path
COPY . /home/app/
# build and package content as jar
RUN mvn -f /home/app/pom.xml clean package
# Stage 3
FROM openjdk:17
COPY --from=build /home/app/target/*.jar app.jar
EXPOSE 5000
ENTRYPOINT [ "sh", "-c", "java -jar /app.jar" ]
Note: For
ENTRYPOINT
we can also provide link to.sh
file.
Dockerfile
whlile using spring-boot-maven-plugin tobuild image.spring-boot-maven-plugin
to customize docker image.OCI
format to build image, docker is compatible with OCI
.
paketobuildpacks
to create docker image. <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<name>srvivek/${project.artifactId}:${project.version}</name>
</image>
<pullPolicy>IF_NOT_PRESENT</pullPolicy>
</configuration>
</plugin>
</plugins>
</build>
# Stage 1 - build and cache resources expecting less frequent changes
# AS build - names the stage as 'build'
FROM maven:3.8.5-openjdk-17 AS build
# Set workdir dir
WORKDIR /home/app
# copy pom.xml and main app class.
COPY ./src/main/java/com/srvivek/sboot/mservices/docker/C3SbDockerHelloWorldApplication.java \
/home/app/src/main/java/com/srvivek/sboot/mservices/docker/C3SbDockerHelloWorldApplication.java
COPY ./pom.xml /home/app/pom.xml
# build and store layer with mvn downloads and basic app
RUN mvn -f /home/app/pom.xml clean package
# Stage 2 : Now copy other resources which can changed frequesntly
# copy java-maven project contents to given path
COPY . /home/app/
# build and package content as jar
RUN mvn -f /home/app/pom.xml clean package
# Stage 3
FROM openjdk:17
COPY --from=build /home/app/target/*.jar app.jar
EXPOSE 5000
ENTRYPOINT [ "sh", "-c", "java -jar /app.jar" ]
Note: For
ENTRYPOINT
we can also provide link to.sh
file.