Skip to content

Commit

Permalink
Docker build - Just for fun (drtshock#203)
Browse files Browse the repository at this point in the history
* Adding files to run in docker

* Updating build and run scripts with usage

* Updating build and run scripts to check for docker

* Fixing commented code

* Added docker compose file and added instructions
  • Loading branch information
saylesc authored Aug 5, 2024
1 parent 586205e commit 3edd9bd
Show file tree
Hide file tree
Showing 6 changed files with 131 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# .dockerignore
.git
README.md
LICENSE
2 changes: 2 additions & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Change this to --vegan if you want a vegan potato
VEGAN="--nonvegan"
27 changes: 27 additions & 0 deletions Dockerfile.spud
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
########### Phase 1 - Compile ###########
FROM maven:3.9.8-eclipse-temurin-8-alpine AS potato-builder

# Set the working directory and copy src
WORKDIR /usr/src/Potato
COPY . /usr/src/Potato/

# Build with Maven
RUN mvn clean install;

########### Phase 2 - Package ###########
FROM eclipse-temurin:21

# Can be overridden with `docker run -e VEGAN="--vegan"`
ENV VEGAN=""

# Make am appropriate user name
RUN useradd -u 500 mrpotatohead
USER mrpotatohead

WORKDIR /home/mrpotatohead

# Cook this potato right every time
COPY --from=potato-builder /usr/src/Potato/target /home/mrpotatohead/target

# Allow user to pass in an argument when running the container
CMD ["sh","-c","java -jar target/Potato.jar ${VEGAN}"]
24 changes: 24 additions & 0 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# HOW TO BUILD & RUN THE POTATO IMAGE
# 1. Run the potato-build.sh script and pass in an optional tag for the container
# e.g. ./potato-build.sh 1.0.0
# 1a. Run the potato-run.sh script and pass in an optional prepare type argument
# e.g. ./potato-run.sh "--vegan"
# 2. You can run using docker compose run
# e.g. docker compose run --build potato (Builds image before running)
# e.g. docker compose run potato (if you already built it)
# e.g. docker compose run potato --rm (removes the container upon exit)
# 2a. To pass in an argument, either edit the .env file,
# or set a local environment variable: e.g. export VEGAN="--vegan"
# 3. You can run using docker compose up.
# e.g. docker compose up
# 3a. Make sure to clean up containers since compose up doesn't have a --rm option
# e.g. docker container rm potato-potato-1

services:
potato:
build:
context: .
dockerfile: ./Dockerfile.spud
environment:
- VEGAN=${VEGAN}

34 changes: 34 additions & 0 deletions potato-build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/bin/bash

# HOW TO BUILD THE POTATO IMAGE
# 1. Run this script and pass in an optional tag for the container
# e.g. ./potato-build.sh 1.0.0
# 2. Alternatively, you can can run using docker compose
# e.g. docker compose run --build potato
# 2a. To pass in an argument, either edit the .env file,
# or set a local environment variable: e.g. export VEGAN="--vegan"

# Tag for the built container
TAG=latest

if ! [ -z $1 ]; then
if [[ $1 == "-h" || $1 == "?" ]]; then
# Print usage
echo "Usage: $0 <tag>"
echo "Example: $0 1.0.0"
exit 0
else
TAG=$1
fi
fi

# Check if Docker is installed
if ! [ -x "$(command -v docker)" ]; then
echo "You need to install Docker."
exit 1
else
echo "Using tag: '$TAG'"
fi

# Perform the build
docker build -t potato:$TAG -f Dockerfile.spud .
40 changes: 40 additions & 0 deletions potato-run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#!/bin/bash

# HOW TO RUN THE POTATO IMAGE
# 1. Run this script and pass in an optional prepare type argument
# e.g. ./potato-run.sh "--vegan"
# 2. You can run using docker compose run
# e.g. docker compose run --build potato (builds the container before running)
# e.g. docker compose run potato (if you already built it)
# e.g. docker compose run potato --rm (removes the container upon exit)
# 2a. To pass in an argument, either edit the .env file,
# or set a local environment variable: e.g. export VEGAN="--vegan"
# 3. You can run using docker compose up and passing in the --build arg
# e.g. docker compose up --build
# 3a. Make sure to clean up containers since compose up doesn't have a --rm option
# e.g. docker container rm potato-potato-1


# Preparation type for the built potato container
PREPARE_TYPE="--nonvegan"

if ! [ -z $1 ]; then
if [[ $1 == "-h" || $1 == "?" ]]; then
# Print usage
echo "Usage: $0 <prepare type>"
echo "Example: $0 --vegan"
exit 0
else
PREPARE_TYPE=$1
fi
fi
# Check if Docker is installed
if ! [ -x "$(command -v docker)" ]; then
echo "You need to install Docker."
exit 1
else
echo "Running Potato with argument: \"$PREPARE_TYPE\""
fi

# Perform the build
docker run -it --name potato-in-a-container --rm -e VEGAN=${PREPARE_TYPE} potato:latest

0 comments on commit 3edd9bd

Please sign in to comment.