Alpine image with Crystal installed alongside sufficient packages to build statically-linked Crystal applications for easy deployment and distribution.
Each tag links to the relevant Dockerfile.
Tag | Crystal version | Alpine version |
---|---|---|
latest |
0.31.0-r0 | v3.10 |
0.31 |
0.31.0-r0 | v3.10 |
0.30 |
0.30.1-r1 | v3.10 |
0.29 |
0.29.0-r0 | v3.10 |
0.27 |
0.27.0-r0 | v3.9 |
For the purposes of these instructions, your application's source code is assumed to be in ./src
with the main entry point (or target) in ./src/app.cr
.
Add this hack to your main application file to allow you to build a statically-linked executable:
echo '# prevents segfault during static linking on Alpine, ignored otherwise
{% if flag?(:static) %}
require "llvm/lib_llvm"
require "llvm/enums"
{% end %}' >> src/app.cr
To compile the application for release:
docker run --rm --user $(id -u) --env UID=$(id -u) --env GID=$(id -g) -it -v $PWD:/app -w /app pgeraghty/alpine-crystal:latest crystal build --static --release --no-debug src/app.cr
This will build a statically-linked app
binary in the current directory without symbolic debug info. The additional user flags should avoid restrictive permissions being applied to the generated file.