Tcl 8.5–9.1 for amd64/arm64: Debian, Alpine, Rocky Linux, distroless, plus -dev build images
10K+
Maintained by:
Vangel Trajkovski (community image, not published by the Tcl Core Team)
Where to get help:
the Tcler's Wiki, the Tcl community, or Stack Overflow
Dockerfile links9.1.0, 9.1.0-trixie, 9.1, 9.1-trixie, 9, 9-trixie, latest, trixie9.1.0-slim, 9.1.0-slim-trixie, 9.1-slim, 9.1-slim-trixie, 9-slim, 9-slim-trixie, slim, slim-trixie9.1.0-slim-dev, 9.1.0-slim-trixie-dev, 9.1-slim-dev, 9.1-slim-trixie-dev, 9-slim-dev, 9-slim-trixie-dev, slim-dev, slim-trixie-dev (target dev)9.1.0-alpine, 9.1.0-alpine3.24, 9.1-alpine, 9.1-alpine3.24, 9-alpine, 9-alpine3.24, alpine, alpine3.249.1.0-alpine-dev, 9.1.0-alpine3.24-dev, 9.1-alpine-dev, 9.1-alpine3.24-dev, 9-alpine-dev, 9-alpine3.24-dev, alpine-dev, alpine3.24-dev (target dev)9.1.0-rocky9-minimal, 9.1-rocky9-minimal, 9-rocky9-minimal, rocky9-minimal9.1.0-rocky9-minimal-dev, 9.1-rocky9-minimal-dev, 9-rocky9-minimal-dev, rocky9-minimal-dev (target dev)9.1.0-rocky8-minimal, 9.1-rocky8-minimal, 9-rocky8-minimal, rocky8-minimal9.1.0-rocky8-minimal-dev, 9.1-rocky8-minimal-dev, 9-rocky8-minimal-dev, rocky8-minimal-dev (target dev)9.1.0-distroless, 9.1-distroless, 9-distroless, distroless9.0.4, 9.0.4-trixie, 9.0, 9.0-trixie9.0.4-slim, 9.0.4-slim-trixie, 9.0-slim, 9.0-slim-trixie9.0.4-slim-dev, 9.0.4-slim-trixie-dev, 9.0-slim-dev, 9.0-slim-trixie-dev (target dev)9.0.4-alpine, 9.0.4-alpine3.24, 9.0-alpine, 9.0-alpine3.249.0.4-alpine-dev, 9.0.4-alpine3.24-dev, 9.0-alpine-dev, 9.0-alpine3.24-dev (target dev)9.0.4-rocky9-minimal, 9.0-rocky9-minimal9.0.4-rocky9-minimal-dev, 9.0-rocky9-minimal-dev (target dev)9.0.4-rocky8-minimal, 9.0-rocky8-minimal9.0.4-rocky8-minimal-dev, 9.0-rocky8-minimal-dev (target dev)9.0.4-distroless, 9.0-distroless8.6.18, 8.6.18-trixie, 8.6, 8.6-trixie, 8, 8-trixie8.6.18-slim, 8.6.18-slim-trixie, 8.6-slim, 8.6-slim-trixie, 8-slim, 8-slim-trixie8.6.18-slim-dev, 8.6.18-slim-trixie-dev, 8.6-slim-dev, 8.6-slim-trixie-dev, 8-slim-dev, 8-slim-trixie-dev (target dev)8.6.18-alpine, 8.6.18-alpine3.24, 8.6-alpine, 8.6-alpine3.24, 8-alpine, 8-alpine3.248.6.18-alpine-dev, 8.6.18-alpine3.24-dev, 8.6-alpine-dev, 8.6-alpine3.24-dev, 8-alpine-dev, 8-alpine3.24-dev (target dev)8.6.18-rocky9-minimal, 8.6-rocky9-minimal, 8-rocky9-minimal8.6.18-rocky9-minimal-dev, 8.6-rocky9-minimal-dev, 8-rocky9-minimal-dev (target dev)8.6.18-rocky8-minimal, 8.6-rocky8-minimal, 8-rocky8-minimal8.6.18-rocky8-minimal-dev, 8.6-rocky8-minimal-dev, 8-rocky8-minimal-dev (target dev)8.6.18-distroless, 8.6-distroless, 8-distroless8.5.19, 8.5.19-trixie, 8.5, 8.5-trixie8.5.19-slim, 8.5.19-slim-trixie, 8.5-slim, 8.5-slim-trixie8.5.19-slim-dev, 8.5.19-slim-trixie-dev, 8.5-slim-dev, 8.5-slim-trixie-dev (target dev)8.5.19-alpine, 8.5.19-alpine3.24, 8.5-alpine, 8.5-alpine3.248.5.19-alpine-dev, 8.5.19-alpine3.24-dev, 8.5-alpine-dev, 8.5-alpine3.24-dev (target dev)8.5.19-rocky9-minimal, 8.5-rocky9-minimal8.5.19-rocky9-minimal-dev, 8.5-rocky9-minimal-dev (target dev)8.5.19-rocky8-minimal, 8.5-rocky8-minimal8.5.19-rocky8-minimal-dev, 8.5-rocky8-minimal-dev (target dev)8.5.19-distroless, 8.5-distroless8.5.13, 8.5.13-trixie8.5.13-slim, 8.5.13-slim-trixie8.5.13-slim-dev, 8.5.13-slim-trixie-dev (target dev)8.5.13-alpine, 8.5.13-alpine3.248.5.13-alpine-dev, 8.5.13-alpine3.24-dev (target dev)8.5.13-rocky9-minimal8.5.13-rocky9-minimal-dev (target dev)8.5.13-rocky8-minimal8.5.13-rocky8-minimal-dev (target dev)8.5.13-distrolessWhere to file issues:
https://github.com/vrtexe/tcl-docker/issues
Supported architectures:
amd64, arm64v8 (every tag holds both)
Published image artifact details:
ghcr.io/vrtexe/tcl (the same tags and digests), and binary tarballs on GitHub Releases
Image updates:
the build workflow rebuilds every tag monthly for operating system security fixes
Source of these images:
https://github.com/vrtexe/tcl-docker
Tcl is a high-level, general-purpose, interpreted, dynamic programming language. It was designed with the goal of being very simple but powerful. Tcl casts everything into the mold of a command, even programming constructs like variable assignment and procedure definition. Tcl supports multiple programming paradigms, including object-oriented, imperative, functional, and procedural styles.
These images build Tcl from the official source releases:
| Tcl | Status | Threads |
|---|---|---|
| 9.1.0 | current (latest) | yes (always in Tcl 9) |
| 9.0.4 | current 9.0 | yes |
| 8.6.18 | current 8.6 (8) | yes |
| 8.5.19 | last 8.5 release | no, as upstream builds 8.5 |
| 8.5.13 | legacy, for applications pinned to this patch level | no |
8.6 and 9 include the bundled packages (Thread, sqlite3, TDBC, itcl).
tclsh$ docker run -it --rm traykovski/tcl:8.6
% info patchlevel
8.6.18
For many simple, single file projects, you may find it inconvenient to write a complete Dockerfile. In such cases, you can run a Tcl script by using the image directly:
$ docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp traykovski/tcl:8.6-slim tclsh your-script.tcl
Dockerfile in your Tcl app projectFROM traykovski/tcl:8.6-slim
WORKDIR /usr/src/app
COPY . .
CMD ["tclsh", "./your-script.tcl"]
You can then build and run the Docker image:
$ docker build -t my-tcl-app .
$ docker run -it --rm --name my-running-app my-tcl-app
Compile on the -dev image and copy the result into the matching runtime image, so the runtime stays small:
FROM traykovski/tcl:8.6-alpine-dev AS build
COPY myext/ /usr/src/myext/
RUN cd /usr/src/myext && ./configure --with-tcl=/usr/local/lib && make && make install
FROM traykovski/tcl:8.6-alpine
COPY --from=build /usr/local/lib/myext1.0/ /usr/local/lib/myext1.0/
#!/usr/bin/tclsh work as-is: images with a shell link /usr/bin/tclsh to the installed tclsh.-distroless images have no shell, so exec can only run what is in the image.The traykovski/tcl images come in many flavors, each designed for a specific use case.
traykovski/tcl:<version>This is the defacto image. If you are unsure about what your needs are, you probably want to use this one. It is designed to be used both as a throw away container (mount your source code and start the container to start your app), as well as the base to build other images off of.
This tag is based off of buildpack-deps (Debian trixie). It includes gcc and the Tcl headers, so extensions can be built in place (~1.1 GB for 8.6).
traykovski/tcl:<version>-slimThis image does not contain the common packages contained in the default tag and only contains the minimal packages needed to run Tcl (Debian trixie slim, ~117 MB). Unless you are working in an environment where only the Tcl image will be deployed and you have space constraints, we highly recommend using the default image of this repository.
traykovski/tcl:<version>-alpineThis image is based on the popular Alpine Linux project, available in the alpine official image. Alpine Linux is much smaller than most distribution base images (~5MB), and thus leads to much slimmer images in general (~23 MB here).
This variant is useful when final image size being as small as possible is your primary concern. The main caveat to note is that it does use musl libc instead of glibc and friends, so software will often run into issues depending on the depth of their libc requirements/assumptions.
traykovski/tcl:<version>-rocky9-minimal, traykovski/tcl:<version>-rocky8-minimalBased on Rocky Linux minimal (~182 MB and ~113 MB), for applications that run on RHEL-family systems and need the same C library and packages.
traykovski/tcl:<version>-distrolessBased on Google distroless cc-debian13 (~47 MB): no shell and no package manager. tclsh is the entrypoint.
traykovski/tcl:<version>-<variant>-devThe slim, Alpine and Rocky Linux variants also come as -dev images: the same Tcl plus make, gcc, C library and zlib headers, and curl. Use them as the build stage for extensions, then copy the result into the matching runtime image.
View license information for the software contained in this image. Tcl's license is included in every image at /usr/local/share/licenses/tcl/license.terms; the build files are MIT licensed.
As with all Docker images, these likely also contain other software which may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained).
As for any pre-built image usage, it is the image user's responsibility to ensure that any use of this image complies with any relevant licenses for all software contained within.
Content type
Image
Digest
sha256:45e0aede2…
Size
13.7 MB
Last updated
2 days ago
docker pull traykovski/tcl:distroless