<div dir="ltr"><div>Hi derek,</div><div><br></div><div>I'm the maintainer of both, the erlang packages at <a href="http://dl-4.alpinelinux.org/alpine/edge/main/x86_64/">http://dl-4.alpinelinux.org/alpine/edge/main/x86_64/</a></div><div>and the docker images you've mentioned at <a href="https://hub.docker.com/u/msaraiva/">https://hub.docker.com/u/msaraiva/</a></div><div><br></div><div>Having minimal containers is something that I take seriously and I think it makes the whole docker experience much more pleasant. The only reason I wouldn't recommend using Alpine Linux for the official image is that there's no "official" support from the OTP team. As far as I know, they don't build/test Erlang/OTP on any Linux distribution based on musl libc and I have no idea if they have any interest in doing that. So, since the official image is intended to reach a broader audience, I guess you'd better stick with the larger images.</div><div><br></div><div>In case you need more info about Erlang for Alpine Linux, take a look at:</div><div><a href="https://github.com/msaraiva/alpine-erlang">https://github.com/msaraiva/alpine-erlang</a></div><div>It also contains information about building Erlang/OTP against musl libc. So, if you want to give it a try,</div><div>you can easily create an image containing a full Erlang/OTP of any version and with as many erlang libs as you want.</div><div><br></div><div><br></div><div>Cheers,</div><div><br></div><div>--</div><div>Marlus Saraiva</div><div><a href="https://github.com/msaraiva">https://github.com/msaraiva</a></div><div><a href="https://twitter.com/MarlusSaraiva">https://twitter.com/MarlusSaraiva</a></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2015-09-30 0:42 GMT-03:00 derek <span dir="ltr"><<a href="mailto:denc716@gmail.com" target="_blank">denc716@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi to Erlang users,<br>
<br>
this is effort trying to make official docker images for erlang otp<br>
community, please comment if you like to run it with docker:<br>
<br>
<a href="https://github.com/docker-library/official-images/pull/1075" rel="noreferrer" target="_blank">https://github.com/docker-library/official-images/pull/1075</a><br>
<br>
Nowadays, docker is the popular way to run many applications, have a<br>
look on docker hub, many popular programming languages and<br>
applications have an official image there, beginners can easily pull a<br>
docker image to start playing without hassling their host Linux,<br>
<br>
<a href="https://hub.docker.com/_/python/" rel="noreferrer" target="_blank">https://hub.docker.com/_/python/</a><br>
<a href="https://hub.docker.com/_/golang/" rel="noreferrer" target="_blank">https://hub.docker.com/_/golang/</a><br>
<a href="https://hub.docker.com/_/ruby/" rel="noreferrer" target="_blank">https://hub.docker.com/_/ruby/</a><br>
...<br>
<br>
But there is no official one for erlang yet, let's try to make it happen,<br>
<a href="https://hub.docker.com/_/erlang/" rel="noreferrer" target="_blank">https://hub.docker.com/_/erlang/</a><br>
<br>
I have researched some existing effort like these, looks like many<br>
ones are already on this way just haven't communicated thru<br>
@<a href="http://erlang.org" rel="noreferrer" target="_blank">erlang.org</a> yet<br>
<br>
- <a href="https://hub.docker.com/r/correl/erlang/" rel="noreferrer" target="_blank">https://hub.docker.com/r/correl/erlang/</a><br>
   this might be the earliest currently have the most stars by `docker<br>
search erlang`, provided erlang-otp-17.5 and rebar and relx in a<br>
single image, and compiling each one from source code, I haven't tried<br>
it, but presumably would be close to 1GB image;<br>
- <a href="https://hub.docker.com/r/unbalancedparentheses/erlang" rel="noreferrer" target="_blank">https://hub.docker.com/r/unbalancedparentheses/erlang</a><br>
   this one support all versions of erlang R6B-0, R7, R8, ... R16, up to 17.4<br>
   from <a href="https://github.com/unbalancedparentheses/docker-erlang/blob/master/17.4/install.sh" rel="noreferrer" target="_blank">https://github.com/unbalancedparentheses/docker-erlang/blob/master/17.4/install.sh</a><br>
it also provided erlang & rebar & relx all compiled from source code<br>
- <a href="https://hub.docker.com/r/msaraiva/erlang/" rel="noreferrer" target="_blank">https://hub.docker.com/r/msaraiva/erlang/</a><br>
   this one is providing erlang-17.5 and 18, on top of Alpine Linux<br>
docker image, it's very slim, as small as 16.78 MB, while erlang lib<br>
is broken into very small packages, like most OS distro does, broken<br>
into erlang-compiler, erlang-dialyzer, erlang-otp, erlang-snmp, and<br>
etc. its base erlang:18 image has 5 packages under<br>
/usr/lib/erlang/lib/... (compared a full erlang-otp has 52 lib<br>
packages)<br>
  <a href="http://dl-4.alpinelinux.org/alpine/edge/main/x86_64/" rel="noreferrer" target="_blank">http://dl-4.alpinelinux.org/alpine/edge/main/x86_64/</a> (search erlang)<br>
   this one also provided elixir images in different Dockerfile,<br>
presumably also slim<br>
- <a href="https://hub.docker.com/r/voidlock/erlang" rel="noreferrer" target="_blank">https://hub.docker.com/r/voidlock/erlang</a><br>
    is very similar to my way, support erlang R16 thru 18.1; I would<br>
not start my project if I know this earlier, but it installed<br>
update-locale for UTF-8 I'm not sure for what, is that required by<br>
erlang runtime ?<br>
- <a href="https://github.com/synctree/docker-erlang/blob/master/R17/Dockerfile" rel="noreferrer" target="_blank">https://github.com/synctree/docker-erlang/blob/master/R17/Dockerfile</a><br>
  this one installs erlang solutions precompiled deb on top of<br>
debian:8 (or debian:jessie) image.<br>
<br>
$ docker search erlang<br>
NAME                           DESCRIPTION<br>
        STARS     OFFICIAL   AUTOMATED<br>
correl/erlang                  Erlang/OTP for Docker<br>
        14                   [OK]<br>
...<br>
<br>
While I just started from scratch, before above PR to official images<br>
got merged, you can try it with cloning this repo, and build images<br>
locally,<br>
<br>
<a href="https://github.com/c0b/docker-erlang-otp" rel="noreferrer" target="_blank">https://github.com/c0b/docker-erlang-otp</a><br>
<br>
So there are two ways to make images:<br>
1) build from source code, from standard debian:8 image, start with<br>
apt-get install build-essential and gcc and some lib...-dev and<br>
download erlang-otp source code and build, this usually ends up with a<br>
fat image, close to 1GB;<br>
2) install from some binary erlang packages, like the one from<br>
erlang-solutions, could end up with smaller image; packages from most<br>
OS distributions also provided erlang but relatively not up to date<br>
like debian <a href="https://packages.debian.org/source/sid/erlang" rel="noreferrer" target="_blank">https://packages.debian.org/source/sid/erlang</a> fedora<br>
centos similar<br>
<br>
Here from my repo I mainted one each for latest 4 erlang releases,<br>
(R15, R16, 17, 18), each with different variant, following the best<br>
practices from docker official images guideline, should end up with<br>
full feature while relatively slim images:<br>
<a href="https://github.com/docker-library/official-images" rel="noreferrer" target="_blank">https://github.com/docker-library/official-images</a><br>
<br>
1. the standard variant erlang:18, erlang:17, erlang:R16, erlang:R15<br>
builds from source code, on top of<br>
<a href="https://hub.docker.com/_/buildpack-deps/" rel="noreferrer" target="_blank">https://hub.docker.com/_/buildpack-deps/</a> :jessie, it covered gcc<br>
compiler and some popular -dev packages, for port driver written in C;<br>
while it doesn't have java compiler so out of the standard erlang-otp<br>
provided 52 packages under /usr/lib/erlang/lib/... from this one odbc<br>
/ jinterface / wxwidgets won't work, I assume to run GUI programs in<br>
docker is not popular, so here we can save space; jinterface is<br>
similar, the java dependencies are too fat, I assume demand is low;<br>
2. the -onbuild variant for each erlang version, to utilize ONBUILD<br>
instruction from Dockerfile, those are for starters<br>
3. -esl variant is to pull erlang-solutions deb package to install on<br>
top of debian:jessie, results in relatively slim image, but I am<br>
trying to avoid wxwidgets / jinterface dependencies, reasons same as<br>
above.<br>
<br>
All these images are almost full featured Erlang-OTP images (except<br>
wxwidgets & jinterface), you can run it like this once build locally<br>
(or pull over docker hub if above PR can be merged),<br>
<br>
$ docker run -it --rm erlang:18.1<br>
Erlang/OTP 18 [erts-7.1] [source] [64-bit] [smp:8:8]<br>
[async-threads:10] [hipe] [kernel-poll:false]<br>
<br>
Eshell V7.1  (abort with ^G)<br>
1> uptime().                                          # the new<br>
uptime() shell command since OTP 18<br>
3 seconds<br>
ok<br>
2> application:which_applications().<br>
[{stdlib,"ERTS  CXC 138 10","2.6"},<br>
 {kernel,"ERTS  CXC 138 10","4.1"}]<br>
3><br>
User switch command<br>
 --> q<br>
root@6d2c1ad52ae8:/# ls /usr/local/lib/erlang/lib/<br>
asn1-4.0     cosProperty-1.2  edoc-0.7.17     gs-1.6    observer-2.1<br>
 public_key-1.0.1 stdlib-2.6   xmerl-1.3.8 common_test-1.11<br>
cosTime-1.2  eldap-1.2     hipe-3.13    orber-3.8    reltool-0.7<br>
syntax_tools-1.7 compiler-6.0.1     cosTransactions-1.3<br>
erl_docgen-0.4     ic-4.4    os_mon-2.4    runtime_tools-1.9.1<br>
test_server-3.9 cosEvent-2.2     crypto-3.6.1  erl_interface-3.8<br>
inets-6.0.1    ose-1.1    sasl-2.6 tools-2.8.1 cosEventDomain-1.2<br>
debugger-4.1.1  erts-7.1     kernel-4.1     otp_mibs-1.1    snmp-5.2<br>
typer-0.9.9 cosFileTransfer-1.2  dialyzer-2.8.1  et-1.5.1<br>
megaco-3.18    parsetools-2.1  ssh-4.1 webtool-0.9 cosNotification-1.2<br>
 diameter-1.11  eunit-2.2.11     mnesia-4.13.1  percept-0.8.11<br>
ssl-7.1 wx-1.5<br>
root@4cfd3172e8cc:/# ls /usr/local/lib/erlang/lib/ | wc -l<br>
50<br>
<br>
Size:<br>
<br>
$ docker images |grep ^erlang<br>
erlang     18.1-esl            138c797adec7        5 days ago          286.9 MB<br>
erlang     18.1                27ad0fc44644        5 days ago          741.5 MB<br>
erlang     R16B03-1            e0deec5e1e72        6 days ago          740.2 MB<br>
erlang     18.0.3              52d4a7a4a281        6 days ago          743.7 MB<br>
<br>
Comments are welcome.<br>
<br>
<br>
Thanks,<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br></div>