Phusion Passenger Standalone running on Alpine Linux in Docker.
Available on Docker Hub: https://registry.hub.docker.com/u/lincheney/alpine-passenger/
Super simple Rack example
Shamelessly copy the example on the rack website ...
# config.ru
run Proc.new { |env| ['200', {'Content-Type' => 'text/html'}, ['get rack\'d']] }
... add a Dockerfile ...
# Dockerfile
FROM lincheney/alpine-passenger
RUN apk add --update ruby-rack && rm -rf /var/cache/apk/*
COPY config.ru /usr/src/app/
... build the image and then run it!
> docker build -t rack-example .
> docker run -d -p 80:3000 --name rack-app rack-example
> curl 'http://localhost'
get rack'd
We can also get the Passenger status:
> docker exec rack-app passenger status
Phusion Passenger Standalone is running on PID 37, according to PID file /usr/src/app/passenger.3000.pid
The image based on Alpine Linux 3.2 running the Phusion Passenger Standalone runtime 5.0.21 with native support compiled for Ruby 2.2.3.
The standalone runtime runs on Nginx. Those interested should take a look at the docs provided by the Phusion team, especially command line options and Nginx configuration
By default, the image runs with passenger start --no-install-runtime --no-compile-runtime --no-download
plus the additional arguments supplied to docker run
.
Passenger runs on port 3000 by default and this port has been exposed.
Passenger requires packages only available in the testing repository of Alpine Linux edge: libexecinfo and libexecinfo-dev.
You can use this image to build the Nginx or Apache modules for Phusion Passenger.
Take care that you will need to compile from source! Pre-compiled binaries that the Phusion team
provide (probably) won't work since Alpine Linux uses musl
instead of glibc
.
Have a look at the alpine-passenger
Dockerfile to see how the standalone runtime was compiled.