Difference between jnlp-agent-docker, jnlp-slave and inbound-agent?

If my guess is right, you forgot to mention that these images are Jenkins docker images and not just JNLP which is “Java Network Launch Protocol” Docker

I quote:

:exclamation: Warning! This image used to be published as jenkinsci/jnlp-slave and jenkins/jnlp-slave. These images are deprecated, use jenkins/inbound-agent.

so one mystery is solved. “jnlp-slave” is deprecated. You can read about the renaming here:

If you download the inbound agent image (jenkins/inbound-agent:alpine-jdk11) and jenkins/jnlp-agent-docker you can compare their image history like this:

diff --color \
    <(docker history jenkins/inbound-agent:alpine-jdk11 --no-trunc --format '{{.CreatedBy}}') \
    <(docker history jenkins/jnlp-agent-docker:latest --no-trunc --format '{{.CreatedBy}}')

you can see that jnlp-agent-docker is an inbound-agent which contains extra layers to install Docker cli and Docker Compose:

> /bin/sh -c #(nop)  USER jenkins
> |2 DOCKER_COMPOSE_VERSION=1.21.0 DOCKER_VERSION=18.03.0-ce /bin/sh -c touch /debug-flag
> |2 DOCKER_COMPOSE_VERSION=1.21.0 DOCKER_VERSION=18.03.0-ce /bin/sh -c curl -fsSL https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_VERSION/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose
> |2 DOCKER_COMPOSE_VERSION=1.21.0 DOCKER_VERSION=18.03.0-ce /bin/sh -c curl -fsSL https://download.docker.com/linux/static/stable/`uname -m`/docker-$DOCKER_VERSION.tgz | tar --strip-components=1 -xz -C /usr/local/bin docker/docker
> /bin/sh -c #(nop)  ARG DOCKER_COMPOSE_VERSION=1.21.0
> /bin/sh -c #(nop)  ARG DOCKER_VERSION=18.03.0-ce
> /bin/sh -c apk update && apk add -u libcurl curl
> /bin/sh -c #(nop)  USER root