6 Available Docker Images🔗ℹ

Several Docker images are available to build Racket distributions for different platforms, especially for cross-compiling to different operating systems and architectures. These images are available from DockerHub as "racket/distro-build" plus a tag indicating the target platform.

To use one of these images, supply #:docker to machine or similar functions as shown below. For cross-build images, additional configuration arguments are needed as shown. See Cross-Build via Docker for an example.

To use many of these images to build a set of distributions like the ones on the main Racket download side, see distro-build/main-distribution.

Unless otherwise noted, each image is available for two architectures: linux/amd64 and linux/arm64 (i.e., to run on those hosts, independent of the target machine in the case of cross-compilation).

  • "racket/distro-build:latest": A Debian 9 environment for creating a relatively generic Linux build, available for three architectures: linux/386, linux/amd64, and linux/arm64.

    #:docker "racket/distro-build"

    The images are intended for a non-cross build from the perspective of the container, but using an image for an architecture other than the host’s architecture cross-builds for the image’s archiecture.

    The "racket/distro-build:i386-linux", "racket/distro-build:x86_64-linux", and "racket/distro-build:aarch64-linux" images are the same as "racket/distro-build:latest", but specific to linux/386, linux/amd64, or linux/arm64 (as opposed to a multi-architecture image). These tags can be useful in an environment where you want to specify an architecture other than the host’s default and have multiple such images available.

  • "racket/distro-build:debian10": Like "racket/distro-build:latest", but for Debian 10.

    #:docker "racket/distro-build:debian10"

    The "racket/distro-build:debian10-i386-linux", "racket/distro-build:debian10-x86_64-linux", and "racket/distro-build:debian10-aarch64-linux" images are the same as "racket/distro-build:debian10", but specific to linux/386, linux/amd64, or linux/arm64.

  • "racket/distro-build:crosslinux-i386": For cross-building to Linux (Debian 10) for i386.

    #:docker "racket/distro-build:crosslinux-i386"
    #:cross-target-machine "ti3le"
    #:cross-target "i686-linux-gnu"
  • "racket/distro-build:crosslinux-x86_64": For cross-building to Linux (Debian 10) for x86_64.

    #:docker "racket/distro-build:crosslinux-x86_64"
    #:cross-target-machine "ta6le"
    #:cross-target "x86_64-linux-gnu"
  • "racket/distro-build:crosslinux-aarch64": For cross-building to Linux (Debian 10) for AArch64.

    #:docker "racket/distro-build:crosslinux-aarch64"
    #:cross-target-machine "tarm64le"
    #:cross-target "aarch64-linux-gnu"
  • "racket/distro-build:crosslinux-arm": For cross-building to Linux (Raspbian 10) for 32-bit ARMv6 VFP.

    #:docker "racket/distro-build:crosslinux-arm"
    #:cross-target-machine "tarm32le"
    #:cross-target "arm-linux-gnueabihf"
  • "racket/distro-build:crosslinux-arm-debian7": For cross-building to Linux (Raspbian 7) for 32-bit ARMv6 VFP. This image is available only for linux/amd64.

    #:docker "racket/distro-build:crosslinux-arm-debian7"
    #:cross-target-machine "tarm32le"
    #:cross-target "arm-linux-gnueabihf"
  • "racket/distro-build:crosslinux-riscv64": For cross-building to Linux (Debian 12) for RISC-V (RV64G).

    #:docker "racket/distro-build:crosslinux-riscv64"
    #:cross-target-machine "trv64le"
    #:cross-target "riscv64-linux-gnu"
  • "racket/distro-build:crosswin": For cross-building Windows distributions, either 32-bit x86, 64-bit x64, or 64-bit Arm. Pick the specific Windows architecture through additional configuration as shown below.

    #:docker "racket/distro-build:crosswin"
    #:cross-target-machine "ti3nt"
    #:cross-target "i686-w64-mingw32"
    #:docker "racket/distro-build:crosswin"
    #:cross-target-machine "ta6nt"
    #:cross-target "x86_64-w64-mingw32"
    ; no `-g` to avoid compiler bug when building BC:
    #:configure '("CFLAGS=-O2")
    #:docker "racket/distro-build:crosswin"
    #:cross-target-machine "tarm64nt"
    #:cross-target "aarch64-w64-mingw32"
  • "racket/distro-build:osxcross-x86_64": For cross-building Mac OS 10.9 (and up) distributions for 64-bit Intel.

    #:docker "racket/distro-build:osxcross-x86_64"
    #:cross-target-machine "ta6osx"
    #:cross-target "x86_64-apple-darwin13"
    #:configure '("CC=x86_64-apple-darwin13-cc")
    ; to enable code signing:
    #:sign-cert-config (hash 'p12-dir path_to_files
                             'p12-file cert_key_pair_filename
                             'p12-password-file cert_key_pair_filename)
    ; to enable notarization:
    #:notarization-config (hash 'app-specific-password-dir path_to_file
                                'api-key-file api_key_filename)

    Beware that if #:sign-cert-config or #:notarization-config is added to a configuration, the Docker container will need to be recreated so that it mounts the relevant directories.

  • "racket/distro-build:osxcross-aarch64": For cross-building Mac OS 11 (and up) distributions for Apple Silicon.

    #:docker "racket/distro-build:osxcross-aarch64"
    #:cross-target-machine "tarm64osx"
    #:cross-target "aarch64-apple-darwin20.2"
    #:configure '("CC=aarch64-apple-darwin20.2-cc")
    ; to enable code signing:
    #:sign-cert-config (hash 'p12-dir path_to_files
                             'p12-file cert_key_pair_filename
                             'p12-password-file cert_key_pair_filename)
    ; to enable notarization:
    #:notarization-config (hash 'app-specific-password-dir path_to_file
                                'api-key-file api_key_filename)

    Beware that if #:sign-cert-config or #:notarization-config is added to a configuration, the Docker container will need to be recreated so that it mounts the relevant directories.

  • "racket/distro-build:osxcross-i386": For cross-building Mac OS 10.6 (and up) distributions for 32-bit Intel.

    #:docker "racket/distro-build:osxcross-i386"
    #:cross-target-machine "ti3osx"
    #:cross-target "i386-apple-darwin10"
    #:configure '("CC=i386-apple-darwin10-cc"
                  ; FIXME: needed when host is x86_64:
                  "--build=x86_64-pc-linux-gnu"
                  ; recommended for a smaller distribution:
                  "--disable-embedfw")
  • "racket/distro-build:osxcross-ppc": For cross-building Mac OS 10.5 (and up) distributions for 32-bit PowerPC.

    #:docker "racket/distro-build:osxcross-ppc"
    #:cross-target-machine "tppc32osx"
    #:cross-target "powerpc-apple-darwin9"
    ; recommended for a smaller distribution:
    #:configure '("--disable-embedfw")