{"id":18510048,"url":"https://github.com/lfex/dockerfiles","last_synced_at":"2025-09-07T01:04:18.693Z","repository":{"id":34129623,"uuid":"37961760","full_name":"lfex/dockerfiles","owner":"lfex","description":"Dockerfiles for LFE based upon the official Erlang Docker images","archived":false,"fork":false,"pushed_at":"2023-06-27T19:34:39.000Z","size":705,"stargazers_count":6,"open_issues_count":0,"forks_count":3,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-09-07T01:03:19.722Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lfex.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-06-24T04:14:23.000Z","updated_at":"2023-08-30T01:55:42.000Z","dependencies_parsed_at":"2025-03-09T01:01:24.320Z","dependency_job_id":null,"html_url":"https://github.com/lfex/dockerfiles","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/lfex/dockerfiles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfex%2Fdockerfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfex%2Fdockerfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfex%2Fdockerfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfex%2Fdockerfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lfex","download_url":"https://codeload.github.com/lfex/dockerfiles/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfex%2Fdockerfiles/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273983110,"owners_count":25202095,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-06T02:00:13.247Z","response_time":2576,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T15:20:21.673Z","updated_at":"2025-09-07T01:04:18.643Z","avatar_url":"https://github.com/lfex.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dockerfiles\n\n_Dockerfiles for LFE based upon the official Erlang Docker images_\n\n\u003cimage src=\"https://github.com/lfex/dockerfiles/raw/main/resources/images/docker-thumb.png\" /\u003e\n\n##### Table of Contents\n\n- [About](#about-)\n  - [LFE](#lfe-)\n  - [Images](#images-)\n- [Usage](#usage-)\n  - [Instant REPL](#instant-repl-)\n  - [Running Examples](#running-examples-)\n    - Modules via CLI\n    - Interactive Modules via `main`\n    - Precompiled Modules via LFE REPL\n    - Slurping Modules via LFE REPL\n    - Scripts\n- [License](#license-)\n- [User Feedback](#user-feedback-)\n  - [Issues](#issues-)\n  - [Contributing](#contributing-)\n\n## About [\u0026#x219F;](#table-of-contents)\n\n### LFE [\u0026#x219F;](#table-of-contents)\n\n\u003cimg align=\"right\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/6/63/LFE_%28Lisp_Flavored_Erlang%29_Logo.png/240px-LFE_%28Lisp_Flavored_Erlang%29_Logo.png\" /\u003eLFE (Lisp Flavored Erlang) is a functional, concurrent, general-purpose programming language and Lisp dialect built on top of Core Erlang and the Erlang Virtual Machine (BEAM). LFE builds on top of Erlang in order to provide a Lisp syntax for writing distributed, fault-tolerant, soft real-time, non-stop applications. LFE also extends Erlang to support meta-programming with Lisp macros and an improved developer experience with a feature-rich REPL.\n\n### Images [\u0026#x219F;](#table-of-contents)\n\nThis repository provides a handful of LFE `Dockerfile`s based on similar\nErlang docker files (available [here](https://hub.docker.com/_/erlang)):\n\n- standard (Debian, [buildpack-deps](https://hub.docker.com/_/buildpack-deps/)\n  based images)\n- slim (Debian based images with only what Erlang requires)\n- alpine\n\nThe most recent images are build with the latest version of LFE, but there images with older versions:\n\n- 2.1.1 (latest)\n- 1.3\n\nAlpine, Slim, and Standard images are available for the supported versions:\n\n- 23.3, 24.3, 25.3, 26.0\n- 21.3, 22.3\n- 20.3\n\nThe LFE images are published with tags in the following format:\n\n```\n[org]/[project]:[lfe-version]-[erlang-version]-[image-type]\n```\n\nFor example, LFE v2.1.1 running on Erlang 25.3 in an Alpine-based container would be:\n\n```\nlfex/lfe:2.1.1-25.3-alpine\n```\n\nNote that the Alpine image is considered the canonical one, thus the `latest`\ntag is against an Alpine image with the most recent release of LFE and Erlang.\nIf this is what you want, than simply using either of the following will pull\nthis down:\n\n```\ndocker run -it lfex/lfe:latest\n```\n\nor\n\n```\ndocker run -it lfex/lfe\n```\n\nAdditionally, the following latest versions are also provided as a convenience:\n\n- lfex/lfe:latest-standard\n- lfex/lfe:latest-slim\n\nAll published LFE Docker images are available here:\n\n- [https://hub.docker.com/r/lfex/lfe/tags](https://hub.docker.com/r/lfex/lfe/tags)\n\n## Usage [\u0026#x219F;](#table-of-contents)\n\n### Instant REPL [\u0026#x219F;](#table-of-contents)\n\nRunning an LFE REPL in any of the provided images is as simple as the following:\n\n```\ndocker run lfex/lfe:2.1.1-25.3-alpine\n```\n\n```\nErlang/OTP 25 [erts-13.2.2.1] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit]\n\n   ..-~.~_~---..\n  (      \\\\     )    |   A Lisp-2+ on the Erlang VM\n  |`-.._/_\\\\_.-':    |   Type (help) for usage info.\n  |         g |_ \\   |\n  |        n    | |  |   Docs: http://docs.lfe.io/\n  |       a    / /   |   Source: http://github.com/lfe/lfe\n   \\     l    |_/    |\n    \\   r     /      |   LFE v2.1.1 (abort with ^G)\n     `-E___.-'\n\nlfe\u003e\n```\n\n### Running Examples [\u0026#x219F;](#table-of-contents)\n\n#### Modules via CLI\n\nSome of the LFE example modules have been compiled in these Docker images for\nyour testing convenience. How they are run depends upon each example. For\ninstance, here's how to run the LFE port of the classic Erlang \"ring\" example:\n\n```\ndocker run lfex/lfe -pa examples/ebin -noshell -run ring main 503 50000000\n```\n\nNote that, because these Docker images use `ENTRYPOINT`, they can be run just\nlike you run the installed `lfe` binary on a system, complete with command line\nflags. The only difference is that instead of typing `lfe` in the terminal,\nwe type `docker run lfex/lfe:1.3-20.3-alpine`.\n\nThis will run for a while, then you'll get the expected output:\n\n```\nResult: 292\n```\n\nAnother example, based on\n\u003chttp://joearms.github.io/2013/11/21/My-favorite-erlang-program.html\u003e, will take\n_quite_ a long while to finish:\n\n```\ndocker run lfex/lfe:1.3-18.3-slim -pa examples/ebin -noshell -run joes-fav run-it\n```\n\n```\n30414093201713378043612608166064768844377641568960512000000000000\n```\n\n#### Interactive Modules via `main`\n\nFor interactive modules where you don't need the LFE prompt:\n\n```\n$ docker run -i lfex/lfe \\\n  -pa examples/ebin -noshell -run guessing-game main\n```\n\n```\nGuess the number I have chosen, between 1 and 10.\nGuess number: 1\nYour guess is too low.\nGuess number: 10\nYour guess is too high.\nGuess number: 5\nWell-guessed!!\n```\n\n#### Precompiled Modules via LFE REPL\n\nAnother pre-compiled module in the Docker images is the one demonstrating\nChurch numerals in LFE. To use it, you just need to include the `examples/ebin`\nin the Elrang modules path:\n\n```\ndocker run -it lfex/lfe:latest -pa examples/ebin\n```\n\n```lisp\nlfe\u003e (church:one)\n#Fun\u003cchurch.1.125931718\u003e\nlfe\u003e (church:get-church 10)\n#Fun\u003cchurch.7.125931718\u003e\nlfe\u003e (church:church-\u003eint1 (church:get-church 20))\n20\n```\n\nAnother pre-compiled example, utilizing Erlang inboxes and message-passing:\n\n```lisp\nlfe\u003e (messenger-back:send-message (self) \"Well, I was able to extend the original entry a bit, yes.\")\n#(#Pid\u003c0.80.0\u003e \"Well, I was able to extend the original entry a bit, yes.\")\nReceived message: 'Well, I was able to extend the original entry a bit, yes.'\nSending message to process \u003c0.80.0\u003e ...\nlfe\u003e (messenger-back:send-message (self) \"And what does it say now?\")\n#(#Pid\u003c0.80.0\u003e \"And what does it say now?\")\nReceived message: 'And what does it say now?'\nSending message to process \u003c0.80.0\u003e ...\nlfe\u003e (messenger-back:send-message (self) \"Mostly harmless.\")\n#(#Pid\u003c0.80.0\u003e \"Mostly harmless.\")\nReceived message: 'Mostly harmless.'\nSending message to process \u003c0.80.0\u003e ...\n```\n\nThen, we can flush the REPL process' inbox to see all the messages it has\nreceived:\n\n```lisp\n(c:flush)\nShell got {\"Well, I was able to extend the original entry a bit, yes.\"}\nShell got {\"And what does it say now?\"}\nShell got {\"Mostly harmless.\"}\nok\n```\n\n#### Slurping Modules via LFE REPL\n\nIf we wanted to run one of the LFE examples that is not pre-compiled (or, as\nis the case for the following example, run code that is not meant to be\ncompiled, but instead simply run in a REPL session), we can just use `slurp`.\nHere's the General Problem Solver LFE example using this approach:\n\n```\ndocker run -it lfex/lfe\n```\n\n```lisp\nlfe\u003e (slurp \"examples/gps1.lfe\")\n```\n\n```lisp\n#(ok gps1)\n```\n\n```lisp\nlfe\u003e (gps '(son-at-home car-needs-battery have-money have-phone-book)\nlfe\u003e      '(son-at-school)\nlfe\u003e      (school-ops))\n```\n\n```\nexecuting 'look-up-number'\nexecuting 'telephone-shop'\nexecuting 'tell-shop-problem'\nexecuting 'give-shop-money'\nexecuting 'shop-installs-battery'\nexecuting 'drive-son-to-school'\nsolved\n```\n\n#### Scripts\n\nYou can also run the LFE example scripts by changing the entry point:\n\n```\ndocker run --entrypoint=examples/sample-lfescript lfex/lfe:1.3-20.3-standard\n```\n\nThis will give us an error, since we didn't pass it the correct argument type:\n\n```\nusage: examples/sample-lfescript \u003cinteger\u003e\n```\n\nNow that we know what to do, thanks to the usage message, let's try again:\n\n```\ndocker run --entrypoint=examples/sample-lfescript lfex/lfe:1.3-20.3-slim 10\n```\n\n```\nfactorial 10 = 3628800\n```\n\nOr another script example:\n\n```\ndocker run --entrypoint=examples/sample-lfe-shellscript lfex/lfe 5\n```\n\n```\nfactorial 5 = 120\n```\n\n## License [\u0026#x219F;](#table-of-contents)\n\nView [license information](https://github.com/lfe/lfe/blob/master/LICENSE)\nfor the software contained in this image.\n\n## User Feedback [\u0026#x219F;](#table-of-contents)\n\n### Issues [\u0026#x219F;](#table-of-contents)\n\nIf you have any problems with or questions about this image, please contact us\nby submitting an issue:\n\n- for the [Docker images themselves](https://github.com/lfex/dockerfiles/issues)\n- with the [LFE programming language](https://github.com/rvirding/lfe/issues)\n\nYou can also reach many of the official image maintainers via the\n`#docker-library` IRC channel on [Freenode](https://freenode.net).\n\n### Contributing [\u0026#x219F;](#table-of-contents)\n\nYou are invited to contribute new features, fixes, or updates, large or small;\nwe are always thrilled to receive pull requests, and do our best to process them\nas fast as we can.\n\nBefore you start to code, we recommend discussing your plans\nthrough a [GitHub feature issue](https://github.com/rvirding/lfe/issues),\nespecially for more ambitious contributions. This gives other contributors a\nchance to point you in the right direction, give you feedback on your design,\nand help you find out if someone else is working on the same thing.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flfex%2Fdockerfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flfex%2Fdockerfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flfex%2Fdockerfiles/lists"}