One more important clarification:

In my original message I mentioned that the clojure / clojure:latest image 
got clj as its new default ENTRYPOINT instead of lein. But it actually goes 
further than that. Previously any image that didn't mention a build tool in 
its Docker tag (e.g. clojure:openjdk-11) would have lein installed (so 
clojure:openjdk-11 was the same as clojure:openjdk-11-lein).

Now, however, those images have also been switched to clj. So now 
clojure:openjdk-11 has clj as its only build tool (remember that *only *the 
clojure / clojure:latest image has all three build tools installed). 
clojure:openjdk-11 is now the same as clojure:openjdk-11-tools-deps.

This is (yet another) good moment to remind everyone to use fully specified 
Docker tags as much as possible (e.g. 
clojure:openjdk-17-tools-deps-1.10.3.1040-slim-buster) rather than relying 
on the defaults (as they can and do change from time to time). A good 
heuristic might be: Typing a Docker tag into a shell command? Fine to rely 
on defaults or just run clojure / clojure:latest. Typing a Docker tag into 
a code editor? Use a fully-specified tag.

On Wednesday, December 1, 2021 at 7:07:29 PM UTC-7 Wes Morgan wrote:

> Clarification: The clojure / clojure:latest image still includes all three 
> build tools (lein, boot, tools-deps). Only the default one you get if you 
> don't specify a different one has changed from lein to clj. But this image 
> has also inherited the ENTRYPOINT / CMD changes I outlined above, so be 
> aware of that. It should figure out what you want if you do something like 
> `docker run clojure lein` though, so let us know on GitHub (
> https://github.com/Quantisan/docker-clojure) if it doesn't do what you 
> expect in this regard.
>
> On Wednesday, December 1, 2021 at 7:01:59 PM UTC-7 Wes Morgan wrote:
>
>> Some important and potentially breaking changes to be aware of in the 
>> official Clojure Docker images are landing soon (likely already present in 
>> the images on Docker Hub by the time you read this):
>>
>> - JDK 17 is the new LTS release, and as a result, is now the JDK version 
>> you get if you don't specify a different one in your Docker tag (which we 
>> recommend doing in production).
>>
>> - The clojure:latest image (which is what you get if you only specify 
>> 'clojure' for your image name) now defaults to clj (i.e. tools.deps) 
>> instead of lein. When these images were first created, Leiningen was the de 
>> facto Clojure build tool. Nowadays we have an official first party tool, so 
>> we've moved to that. As always, we only recommend using this image in 
>> one-off commands and specifying build tool, clojure version, Linux distro, 
>> and openjdk base version where those matter.
>>
>> - All images using openjdk-17 or higher now use an ENTRYPOINT of their 
>> respective build tool (i.e. lein, clj, or boot) and a CMD that launches a 
>> REPL instead of the previous practice of the CMD being build-tool repl 
>> (roughly). This means a bare docker run should behave approximately the 
>> same way as before, except you can now do things like: `docker run clojure 
>> -e '(+ 1 2)'` and it will print '3'. We left the older openjdk images alone 
>> in case folks were relying on the old behavior in some cases, and we don't 
>> want to break things where people were using full-specification tags.
>>     - If you're not familiar with this ENTRYPOINT vs. CMD concept in 
>> Docker, it basically boils down to this: The CMD gets replaced with 
>> whatever you put after the image name in a docker run command. So now you 
>> can specify arguments to the build tool of whatever image you're running 
>> instead of redundantly specifying it first. You can override the default 
>> ENTRYPOINT with the `--entrypoint foo` arg to docker run (must come before 
>> the image name) but see the "important caveat" below as many use cases will 
>> hopefully be covered already without using that.
>>     - An important caveat: The entrypoint script we're using tries to 
>> detect if you specify a CMD that isn't an argument nor subcommand of that 
>> image's build tool and runs it as a standalone executable. In other words, 
>> `docker run -ti clojure bash` still gets you a bash prompt. Please report 
>> issues on https://github.com/Quantisan/docker-clojure if you find errors 
>> in that logic. It is a requirement that official Docker images behave this 
>> way, but we also want to make sure it is robust in the vast majority of use 
>> cases.
>>
>> - Some time ago we announced that debian slim-bullseye would be the 
>> default distro you'd get if you didn't specify one, but not all of our 
>> images were migrated to that default. Now they all are hopefully.
>>
>> - The alpine-based images (only available for openjdk-18 currently) are 
>> now using Alpine Linux 3.15 which was recently released. The biggest change 
>> you'd probably notice there is that an rlwrap package is finally available 
>> in Alpine and installed in the tools-deps images so the clj repl will 
>> behave as it should.
>>
>> - There is a long-standing bug in Docker that makes rlwrap crash if it is 
>> started too soon after a container starts. We used to work around this with 
>> a naive 1 second wait in the tools-deps images. We are now shipping with a 
>> much better solution that waits a much shorter amount of time when it can, 
>> but still waits for as long as it needs to on slower systems. This means 
>> you should generally notice faster container starts for tools-deps images 
>> than before.
>>
>> OK I think that's it! Please report issues at 
>> https://github.com/Quantisan/docker-clojure if you run into anything 
>> that unexpectedly doesn't work.
>>
>> New tools-deps images for releases after 1.10.3.1020 were waiting on this 
>> being merged, so those should appear soon too.
>>
>> Feel free to reply here if you have any questions, and may the REPL be 
>> with you.
>>
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/clojure/063852b1-e0d6-4481-b450-550ee79a9105n%40googlegroups.com.

Reply via email to