We recommend using the fn cli tool which will handle all of this for you. But if you'd like to dig in and customize your images, look at Option 2.
Packaging a function has two parts:
- Create a Docker image for your function with an ENTRYPOINT
- Push your Docker image to a registry (Docker Hub by default)
Once it's pushed to a registry, you can use the image location when adding a route.
The basic Dockerfile for most languages is along these lines:
# Choose base image
FROM node:alpine
# Set the working directory
WORKDIR /function
# Add your binary or code to the working directory
ADD . /function/
# Set what will run when a container is started for this image
ENTRYPOINT ["node func.js"]
Then build your function image:
fn build
fn push
Now you can use that image when creating or updating routes.