Containers#

We maintain several Docker container images that are useful for building and running CLP. All images can be built and used locally, but some are available to download from GitHub Packages.

To build an image locally, run the build.sh script in the image’s directory.

clp-core-dependencies-manylinux_2_28#

Image containing the dependencies necessary to build CLP core in a manylinux_2_28 environment. It is published as a multi-arch image (amd64 and arm64); Docker auto-selects the architecture matching the host on pull.

Binaries built on manylinux_2_28 (based on AlmaLinux 8) are expected to be compatible with other distros using glibc 2.28+, including:

  • CentOS/RHEL 8+

  • Debian 10+

  • Fedora 29+

  • Ubuntu 18.10+

  • GitHub Packages page

  • Pull command:

    docker pull ghcr.io/y-scope/clp/clp-core-dependencies-manylinux_2_28:main
    
  • Path:

    components/core/tools/docker-images/clp-env-base-manylinux_2_28
    

    To cross-build for a non-native architecture locally (using QEMU emulation), set the PLATFORM env var when running build.sh, e.g. PLATFORM=linux/arm64 ./build.sh (requires binfmt/QEMU support on the host).

    Local builds keep the architecture-specific :dev tags used by the packaging scripts: clp-core-dependencies-x86-manylinux_2_28:dev for amd64 and clp-core-dependencies-aarch64-manylinux_2_28:dev for arm64.

clp-core-dependencies-musllinux_1_2#

Image containing the dependencies necessary to build CLP core in a musllinux_1_2 environment. It is published as a multi-arch image (amd64 and arm64); Docker auto-selects the architecture matching the host on pull.

Binaries built on musllinux_1_2 (based on Alpine Linux 3.22) are expected to be compatible with other distros using musl 1.2, including:

  • Alpine Linux 3.13+

  • GitHub Packages page

  • Pull command:

    docker pull ghcr.io/y-scope/clp/clp-core-dependencies-musllinux_1_2:main
    
  • Path:

    components/core/tools/docker-images/clp-env-base-musllinux_1_2
    

    To cross-build for a non-native architecture locally (using QEMU emulation), set the PLATFORM env var when running build.sh, e.g. PLATFORM=linux/arm64 ./build.sh (requires binfmt/QEMU support on the host).

    Local builds keep the architecture-specific :dev tags used by the packaging scripts: clp-core-dependencies-x86-musllinux_1_2:dev for amd64 and clp-core-dependencies-aarch64-musllinux_1_2:dev for arm64.

clp-core-dependencies-x86-centos-stream-9#

An image containing the dependencies necessary to build CLP core in a CentOS Stream 9 x86 environment.

  • GitHub Packages page

  • Pull command:

    docker pull ghcr.io/y-scope/clp/clp-core-dependencies-x86-centos-stream-9:main
    
  • Path:

    components/core/tools/docker-images/clp-env-base-centos-stream-9
    

clp-core-dependencies-x86-ubuntu-jammy#

An image containing the dependencies necessary to build CLP core in an Ubuntu Jammy x86 environment.

  • GitHub Packages page

  • Pull command:

    docker pull ghcr.io/y-scope/clp/clp-core-dependencies-x86-ubuntu-jammy:main
    
  • Path:

    components/core/tools/docker-images/clp-env-base-ubuntu-jammy
    

clp-core-x86-ubuntu-jammy#

An image containing the CLP core binaries (clg, clp, clp-s, glt, etc.) built in an Ubuntu Jammy x86 environment.

  • GitHub Packages page

  • Pull command:

    docker pull ghcr.io/y-scope/clp/clp-core-x86-ubuntu-jammy:main
    
  • Path:

    components/core/tools/docker-images/clp-core-ubuntu-jammy
    

clp-package#

An image containing the CLP package.

  • Path:

    tools/docker-images/clp-package
    

Notable configurations#

The container image sets the following environment variables and configurations, some of which (e.g., the user’s home directory) may be unexpected.

Configuration Value Description
$USER clp-user Default user in the container.
$CLP_HOME and $HOME (~) /opt/clp Home directory for the default user.
$SHELL /bin/bash Default shell for the default user.
$PATH ${CLP_HOME}/sbin
:${CLP_HOME}/bin
:${PATH}
System path including the binaries and scripts in the CLP package.
$PYTHONPATH ${CLP_HOME}/lib/python3/site-packages Python path to include any Python packages in the CLP package.

Corporate proxy and mirror support#

All base image build.sh scripts source corporate-proxy-host.sh, which provides transparent support for building behind corporate proxies and with custom package mirrors. When no proxy or mirror environment variables are set, builds work identically to before.

Corporate proxy (TLS-intercepting)#

In environments where a TLS-intercepting proxy (e.g., Zscaler, Fortinet, Palo Alto) replaces upstream SSL certificates, build.sh auto-detects the host’s CA bundle and injects it into the container’s trust store. This allows package managers (dnf, apk, apt, pip) to verify the proxy’s certificates without disabling SSL.

The following proxy environment variables are forwarded as Docker build args when set:

Variable

Description

HTTP_PROXY / http_proxy

HTTP proxy URL

HTTPS_PROXY / https_proxy

HTTPS proxy URL

ALL_PROXY / all_proxy

SOCKS/catch-all proxy URL

NO_PROXY / no_proxy

Comma-separated list of hosts to bypass

When a proxy URL points to localhost (127.0.0.1, localhost, or [::1]), --network host is automatically added to the Docker build so the container can reach the host’s proxy. This can be overridden with DOCKER_NETWORK.

Package mirror overrides#

Each distro supports an environment variable to override the default package mirror:

Variable

Distro

Example

DNF_MIRROR_BASE_URL

manylinux_2_28 (AlmaLinux), centos-stream-9

https://internal.example.com/almalinux

APK_MIRROR_URL

musllinux_1_2 (Alpine)

https://internal.example.com/alpine

APT_MIRROR_URL

ubuntu-jammy

https://internal.example.com/ubuntu

Other build flags#

Variable

Default

Description

DOCKER_PULL

true

Pull the latest base image before building. Set to false for offline builds.

DOCKER_NETWORK

(auto)

Override Docker’s network mode (e.g., host, bridge).