64 lines
2.8 KiB
Docker
64 lines
2.8 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
# Comments are provided throughout this file to help you get started.
|
|
# If you need more help, visit the Dockerfile reference guide at
|
|
# https://docs.docker.com/go/dockerfile-reference/
|
|
|
|
# Want to help us make this template better? Share your feedback here: https://forms.gle/ybq9Krt8jtBL3iCk7
|
|
|
|
################################################################################
|
|
# Pick a base image to serve as the foundation for the other build stages in
|
|
# this file.
|
|
#
|
|
# For illustrative purposes, the following FROM command
|
|
# is using the alpine image (see https://hub.docker.com/_/alpine).
|
|
# By specifying the "latest" tag, it will also use whatever happens to be the
|
|
# most recent version of that image when you build your Dockerfile.
|
|
# If reproducability is important, consider using a versioned tag
|
|
# (e.g., alpine:3.17.2) or SHA (e.g., alpine@sha256:c41ab5c992deb4fe7e5da09f67a8804a46bd0592bfdf0b1847dde0e0889d2bff).
|
|
FROM alpine:latest as base
|
|
|
|
################################################################################
|
|
# Create a stage for building/compiling the application.
|
|
#
|
|
# The following commands will leverage the "base" stage above to generate
|
|
# a "hello world" script and make it executable, but for a real application, you
|
|
# would issue a RUN command for your application's build process to generate the
|
|
# executable. For language-specific examples, take a look at the Dockerfiles in
|
|
# the Awesome Compose repository: https://github.com/docker/awesome-compose
|
|
FROM base as build
|
|
RUN echo -e '#!/bin/sh\n\
|
|
echo Hello world from $(whoami)! In order to get your application running in a container, take a look at the comments in the Dockerfile to get started.'\
|
|
> /bin/hello.sh
|
|
RUN chmod +x /bin/hello.sh
|
|
|
|
################################################################################
|
|
# Create a final stage for running your application.
|
|
#
|
|
# The following commands copy the output from the "build" stage above and tell
|
|
# the container runtime to execute it when the image is run. Ideally this stage
|
|
# contains the minimal runtime dependencies for the application as to produce
|
|
# the smallest image possible. This often means using a different and smaller
|
|
# image than the one used for building the application, but for illustrative
|
|
# purposes the "base" image is used here.
|
|
FROM base AS final
|
|
|
|
# Create a non-privileged user that the app will run under.
|
|
# See https://docs.docker.com/go/dockerfile-user-best-practices/
|
|
ARG UID=10001
|
|
RUN adduser \
|
|
--disabled-password \
|
|
--gecos "" \
|
|
--home "/nonexistent" \
|
|
--shell "/sbin/nologin" \
|
|
--no-create-home \
|
|
--uid "${UID}" \
|
|
appuser
|
|
USER appuser
|
|
|
|
# Copy the executable from the "build" stage.
|
|
COPY --from=build /bin/hello.sh /bin/
|
|
|
|
# What the container should run when it is started.
|
|
ENTRYPOINT [ "/bin/hello.sh" ]
|