diff --git a/README.md b/README.md index fa651db..4269840 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,48 @@ Dockerfiles useful for [chicken scheme](https://www.call-cc.org/) development. An optional custom `chicken-assemble` script is also provided, used to build projects in an opinionated, structured way. +You may pick a flavour built on top of popular linux distros: + +```bash +docker pull plotter/chicken-scheme:5.2.0-alpine +docker pull plotter/chicken-scheme:5.2.0-debian +docker pull plotter/chicken-scheme:5.2.0-ubuntu +docker pull plotter/chicken-scheme:5.2.0-centos +``` + ## How to use these images -TODO write decent examples +Mount your source code directory into a running container to access +chicken's REPL and/or compiler: + +```bash +docker run --rm -it --workdir /src -v $(pwd):/src plotter/chicken-scheme +``` + +For truly static builds, prefer the `alpine` base image and set the +proper compiler and linker flags: + +```dockerfile +FROM plotter/chicken-scheme:5.2.0-alpine +WORKDIR /src +COPY . . +RUN csc ... TODO write proper compilation instruction +ENTRYPOINT ["/src/main"] +``` + +You may also choose to build a barebones `scratch` image containing +only the desired binary: + +```dockerfile +FROM plotter/chicken-scheme:5.2.0-alpine as build +WORKDIR /src +COPY . . +RUN csc ... TODO write proper compilation instruction + +FROM scratch +COPY --from=build /src/app /bin/app +ENTRYPOINT ["/bin/app"] +``` ## `chicken-assemble`-based projects diff --git a/dockerfiles/alpine b/dockerfiles/alpine deleted file mode 100644 index 69f7caf..0000000 --- a/dockerfiles/alpine +++ /dev/null @@ -1,22 +0,0 @@ -FROM alpine:3.11 - -ENV CHICKEN_VERSION 5.1.0 -ENV PLATFORM linux - -RUN apk update && \ - apk --no-cache --update add build-base && \ - wget -qO- https://code.call-cc.org/releases/$CHICKEN_VERSION/chicken-$CHICKEN_VERSION.tar.gz | tar xzv && \ - cd /chicken-$CHICKEN_VERSION && \ - make PLATFORM=$PLATFORM && \ - make PLATFORM=$PLATFORM install && \ - make PLATFORM=$PLATFORM check && \ - cd / && \ - rm -rf /chicken-$CHICKEN_VERSION - -# install project assembly tool -COPY chicken-assemble.scm /usr/bin/chicken-assemble -RUN chicken-install clojurian:3 \ - records \ - srfi-1 \ - srfi-69 && \ - chmod a+x /usr/bin/chicken-assemble diff --git a/dockerfiles/alpine.Dockerfile b/dockerfiles/alpine.Dockerfile new file mode 100644 index 0000000..53a6abc --- /dev/null +++ b/dockerfiles/alpine.Dockerfile @@ -0,0 +1,23 @@ +FROM alpine:3.12 + +ENV CHICKEN_VERSION 5.2.0 +ENV PLATFORM linux + +RUN set -eux; \ + apk update; \ + apk --no-cache --update add build-base; \ + wget -qO- https://code.call-cc.org/releases/${CHICKEN_VERSION}/chicken-${CHICKEN_VERSION}.tar.gz | tar xzv; \ + cd /chicken-${CHICKEN_VERSION}; \ + make PLATFORM=${PLATFORM}; \ + make PLATFORM=${PLATFORM} install; \ + make PLATFORM=${PLATFORM} check; \ + cd /; \ + rm -rf /chicken-${CHICKEN_VERSION} + +# install project assembly tool +COPY chicken-assemble.scm /usr/bin/chicken-assemble +RUN chicken-install clojurian:3 \ + records \ + srfi-1 \ + srfi-69 && \ + chmod a+x /usr/bin/chicken-assemble diff --git a/dockerfiles/centos.Dockerfile b/dockerfiles/centos.Dockerfile new file mode 100644 index 0000000..3f80bfe --- /dev/null +++ b/dockerfiles/centos.Dockerfile @@ -0,0 +1,23 @@ +FROM centos:8 + +ENV CHICKEN_VERSION 5.2.0 +ENV PLATFORM linux + +RUN set -eux; \ + yum install -y gcc gcc-c++ make diffutils; \ + yum clean all; \ + curl -sS https://code.call-cc.org/releases/${CHICKEN_VERSION}/chicken-${CHICKEN_VERSION}.tar.gz | tar xzv; \ + cd /chicken-${CHICKEN_VERSION}; \ + make PLATFORM=${PLATFORM}; \ + make PLATFORM=${PLATFORM} install; \ + make PLATFORM=${PLATFORM} check; \ + cd /; \ + rm -rf /chicken-${CHICKEN_VERSION} + +# install project assembly tool +COPY chicken-assemble.scm /usr/bin/chicken-assemble +RUN chicken-install clojurian:3 \ + records \ + srfi-1 \ + srfi-69 && \ + chmod a+x /usr/bin/chicken-assemble diff --git a/dockerfiles/debian b/dockerfiles/debian.Dockerfile similarity index 54% rename from dockerfiles/debian rename to dockerfiles/debian.Dockerfile index 022ab7b..7a38c62 100644 --- a/dockerfiles/debian +++ b/dockerfiles/debian.Dockerfile @@ -1,16 +1,17 @@ FROM debian:buster -ENV CHICKEN_VERSION 5.1.0 +ENV CHICKEN_VERSION 5.2.0 ENV PLATFORM linux -RUN apt-get update && \ - apt-get install -y wget build-essential && \ - wget -qO- https://code.call-cc.org/releases/${CHICKEN_VERSION}/chicken-${CHICKEN_VERSION}.tar.gz | tar xzv && \ - cd /chicken-${CHICKEN_VERSION} && \ - make PLATFORM=${PLATFORM} && \ - make PLATFORM=${PLATFORM} install && \ - make PLATFORM=${PLATFORM} check && \ - cd / && \ +RUN set -eux; \ + apt-get update; \ + apt-get install -y wget build-essential; \ + wget -qO- https://code.call-cc.org/releases/${CHICKEN_VERSION}/chicken-${CHICKEN_VERSION}.tar.gz | tar xzv; \ + cd /chicken-${CHICKEN_VERSION}; \ + make PLATFORM=${PLATFORM}; \ + make PLATFORM=${PLATFORM} install; \ + make PLATFORM=${PLATFORM} check; \ + cd /; \ rm -rf /chicken-${CHICKEN_VERSION} # install project assembly tool diff --git a/dockerfiles/ubuntu.Dockerfile b/dockerfiles/ubuntu.Dockerfile new file mode 100644 index 0000000..e57643c --- /dev/null +++ b/dockerfiles/ubuntu.Dockerfile @@ -0,0 +1,23 @@ +FROM ubuntu:focal + +ENV CHICKEN_VERSION 5.2.0 +ENV PLATFORM linux + +RUN set -eux; \ + apt-get update; \ + apt-get install -y wget build-essential; \ + wget -qO- https://code.call-cc.org/releases/${CHICKEN_VERSION}/chicken-${CHICKEN_VERSION}.tar.gz | tar xzv; \ + cd /chicken-${CHICKEN_VERSION}; \ + make PLATFORM=${PLATFORM}; \ + make PLATFORM=${PLATFORM} install; \ + make PLATFORM=${PLATFORM} check; \ + cd /; \ + rm -rf /chicken-${CHICKEN_VERSION} + +# install project assembly tool +COPY chicken-assemble.scm /usr/bin/chicken-assemble +RUN chicken-install clojurian:3 \ + records \ + srfi-1 \ + srfi-69 && \ + chmod a+x /usr/bin/chicken-assemble