This is used as docker base image for Erlang OTP. The goal is to provide images for a few last erlang releases (currently 20 / 19 / 18), in close to full feature Erlang OTP, and relatively slim images. Support to 17, R16 and R15 are provided in this repo on a best-effort basis, and not part of official-image effort in docker-library/official-images#1075 .
here is providing the latest Erlang 20 image; you may pull from official-images or build it locally:
$ docker build -t erlang:20.0 ./20
[...]
➸ docker run -it --rm erlang:20.0
Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V9.0 (abort with ^G)
1> erlang:system_info(otp_release).
"20"
2> os:getenv().
["PWD=/","REBAR3_VERSION=3.4.1",
"ROOTDIR=/usr/local/lib/erlang","LANG=C.UTF-8",
"PATH=/usr/local/lib/erlang/erts-9.0/bin:/usr/local/lib/erlang/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"REBAR_VERSION=2.6.4","TERM=xterm",
"BINDIR=/usr/local/lib/erlang/erts-9.0/bin","PROGNAME=erl",
"EMU=beam","OTP_VERSION=20.0","HOME=/root",
"HOSTNAME=9b1e7f4d7206"]
3> 'hello_юникод_世界'. % Erlang20 now support unicode in atom
'hello_юникод_世界'
4> io:format("~tp~n", [{'hello_юникод', <<"Hello, 世界; юникод"/utf8>>, "Hello, 世界; юникод"}]).
{'hello_юникод',<<"Hello, 世界; юникод"/utf8>>,"Hello, 世界; юникод"}
ok
5>
- observer is a wx widget application, the GUI may require different protocol for different OSes, for Linux it requires X11 protocol be properly setup this wiki has setup for Linux desktop for observer use in elixir, which also applies to Erlang https://github.com/c0b/docker-elixir/wiki/use-observer
- dirty scheduler is enabled since Erlang 19 images;
Read from https://github.com/erlang/otp/releases for each tag description as release annoucement.
- the standard variant
erlang:20
,erlang:19
,erlang:18
, builds from source code, based onbuildpack-deps:jessie
; it covered gcc compiler and some popular -dev packages, for those erlang port drivers written in C; while it doesn't have java compiler so jinterface doesn't compile, assuming demand to write java code for erlang applications is low; - the
-onbuild
variant is deprecated; for more details, see docker-library/official-images#2076. - the slim version is built from
debian:jessie
install building tools (compilers & -dev packages) on the fly and uninstall after compilation finished, to shrink image size; - the alpine version is built from last alpine stable image, install building tools (compilers & -dev packages) on the fly and uninstall after compilation finished, also removed src/*.erl include/*.hrl / all docs (include man info) / examples / static archives / build and unittest tools, and strip the ELF binaries, to get a really slim image, ideally smaller than 20MB;
- rebar and rebar3 tool is bundled in
erlang:20
,erlang:19
anderlang:18
image;
$ docker images --filter=reference='erlang:*'
REPOSITORY TAG IMAGE ID CREATED SIZE
erlang 20.0-rc1 84eea457a726 2 seconds ago 809.7 MB
erlang 20.0-rc1-alpine dd870a4a2424 9 minutes ago 18.9 MB
erlang 20.0-rc1-slim 50391255ea5a 14 minutes ago 362.2 MB
erlang 19.3 2216344f0c70 32 hours ago 821.4 MB
erlang 19.3-slim 11724662809a 31 hours ago 374.9 MB
erlang 18.3 9f92145c1fac 10 days ago 754.3 MB
erlang 18.3-slim 6d15a17b95d4 11 days ago 284.5 MB
$ docker run -it --rm erlang:20.0-rc1 /bin/bash
root@11ecefc83eb5:/# ls /usr/local/lib/erlang/lib/
asn1-5.0 dialyzer-3.2 kernel-5.3 sasl-3.0.4
common_test-1.15 diameter-1.12.3 megaco-3.18.2 snmp-5.2.5
compiler-7.1 edoc-0.9 mnesia-4.15 ssh-4.5
cosEvent-2.2.1 eldap-1.2.2 observer-2.4 ssl-8.2
cosEventDomain-1.2.1 erl_docgen-0.7 odbc-2.12 stdlib-3.4
cosFileTransfer-1.2.1 erl_interface-3.10 orber-3.8.3 syntax_tools-2.1.2
cosNotification-1.2.2 erts-9.0 os_mon-2.4.2 tools-2.10
cosProperty-1.2.2 et-1.6 otp_mibs-1.1.1 wx-1.8.1
cosTime-1.2.2 eunit-2.3.3 parsetools-2.1.5 xmerl-1.3.14
cosTransactions-1.3.2 hipe-3.16 public_key-1.4.1
crypto-4.0 ic-4.4.2 reltool-0.7.3
debugger-4.2.2 inets-6.3.9 runtime_tools-1.12
root@11ecefc83eb5:/# ls /usr/local/lib/erlang/lib/ | wc -l
45
The official release 20 https://github.com/erlang/otp/tree/maint-20/lib has 45 libs, while here by default it provided 44 of them (plus erts-9.0 from erlang itself), except jinterface, because to build that one would pull all jdk dependencies and make the image too fat; if you really need that to write code in java and interface into erlang code, you may create an issue here to ask for it.