Skip to content

ARM fork of Bitwalker's alpine image with Erlang installed, intended for RPi docker releases

License

Notifications You must be signed in to change notification settings

matthewoden/alpine-erlang

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Erlang on Alpine Linux (for arm32v6)

This Dockerfile provides a full installation of Erlang on Alpine (ARMv6 architecture), intended for running Erlang releases on RPi instances, so it has no build tools installed. The Erlang installation is provided so one can avoid cross-compiling releases. The caveat of course is if one has NIFs which require a native compilation toolchain, but that is left as an exercise for the reader.

NOTE: This image is primarily intended to either be used as-is, or as the base for an image which is embellished with additional dependencies. It is also intended to be forked and tweaked as needed for those applications which require different build configurations of OTP. If the default configuration does not work for you, you will need to take one of the approaches described under Extending for your own application.

Usage

NOTE: This image sets up a default user, with home set to /opt/app and owned by that user. The working directory is also set to $HOME. It is highly recommended that you add a USER default instruction to the end of your Dockerfile so that your app runs in a non-elevated context.

To boot straight to a prompt in the image (versioning info is stripped here, but this is just to give you a general idea of what to expect):

$ docker run --rm -it --user=root matthewoden/alpine-arm32v6-erlang erl
Erlang/OTP XX [erts-X.X] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]

Eshell VX.X  (abort with ^G)
1>
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
       (v)ersion (k)ill (D)b-tables (d)istribution
a

Extending for your own application

Building erlang for ARM with docker generally requires running ARM on the host. Docker for mac's emulator will fail on syscalls, as will RPi0, and RPi0w, and RPi1 devices. For device errors, see moby/#38175. You can also use github actions to build an image - see .github/workflows for examples.

NOTE: The dependency requirements for your own application may need additional system packages installed via APK, or additional OTP applications from the standard library which are not built by default in order to save space. In the former case, you need to build your own image based on alpine-arm32v6-erlang which installs those extra packages. If you need additional OTP applications from the standard library, you will need to fork alpine-arm32v6-erlang and tweak the config flags for the build so that those applications are present.

FROM matthewoden/alpine-arm32v6-erlang:latest

# Set exposed ports
EXPOSE 5000
ENV PORT=5000

ENV MIX_ENV=prod

ADD yourapp.tar.gz ./

USER default

ENTRYPOINT ["./bin/yourapp"]
CMD ["foreground"]

License

MIT

About

ARM fork of Bitwalker's alpine image with Erlang installed, intended for RPi docker releases

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Dockerfile 74.6%
  • Makefile 25.4%