14.10 Erlang

Erlang是一种用来构建大规模弹性、实时、高并发、高可用系统的编程语言,被广泛应用于电信、银行、电子商务和即时消息领域。Erlang的运行时系统内置支持并发、分布式和容错机制。Erlang由爱立信所辖的CS-Lab于1987年开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。

14.10 Erlang - 图1

1.使用官方镜像

可以使用erlang镜像,直接进入Erlang交互命令行Eshell:


  1. $ docker run -it --rm erlang:latest
  2. Erlang/OTP 18 [erts-7.3.1] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
  3. Eshell V7.3.1 (abort with ^G)
  4. 1> uptime().
  5. 3 minutes and 3 seconds
  6. ok
  7. 2>

可以使用ctl+G进入任务切换模式,其中j为列出所有任务:


  1. User switch command
  2. --> j
  3. 1* {shell,start,[init]}
  4. --> q
  5. $ docker run -it --rm -h erlang.local erlang erl -name allen
  6. Erlang/OTP 18 [erts-7.3.1] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
  7. Eshell V7.3.1 (abort with ^G)
  8. (allen)1> erlang:system_info(otp_release).
  9. "18"
  10. (allen)2>
  11. User switch command
  12. --> q

2.直接运行Erlang脚本

可以直接使用docker run指令,通过escript运行Erlang脚本。下面以斐波那契数列作为例子进行讲解。

首先,新建fab.erl文件:


  1. #!/usr/bin/env escript
  2. %% -*- erlang -*-
  3. main([String]) ->
  4. try
  5. N = list_to_integer(String),
  6. F = fac(N),
  7. io:format("factorial ~w = ~w\n", [N,F])
  8. catch
  9. _:_ ->
  10. usage()
  11. end;
  12. main(_) ->
  13. usage().
  14. usage() ->
  15. io:format("usage: factorial integer\n"),
  16. halt(1).
  17. fac(0) -> 1;
  18. fac(N) -> N * fac(N-1).

保存后,使用docker run指令运行:


  1. $ docker run -it --rm --name erlang-inst1 -v "$PWD":/usr/src/myapp -w /usr/src/
  2. myapp erlang escript fab.erl 5
  3. factorial 5 = 120

可见已输出factorial 5=120计算结果。