This image contains a "Docker Pipeline" Job that demonstrates Jenkins Pipeline integration with Docker via CloudBees Docker Pipeline plugin.
docker run --rm -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/docker-workflow-demo
The "Docker Pipeline" Job simply does the following:
- Gets the Spring Pet Clinic demonstration application code from GitHub.
- Builds the Pet Clinic application in a Docker container.
- Builds a runnable Pet Clinic application Docker image.
- Runs a Pet Clinic app container (from the Pet Clinic application Docker image) + a second maven3 container that runs automated tests against the Pet Clinic app container.
- The 2 containers are linked, allowing the test container to fire requests at the Pet Clinic app container.
The "Docker Pipeline" Job demonstrates how to use the docker
DSL:
- Use
docker.image
to define a DSLImage
object (not to be confused withbuild
) that can then be used to perform operations on a Docker image:
- use
Image.inside
to run a Docker container and execute commands in it. The build workspace is mounted as the working directory in the container. - use
Image.run
to run a Docker container in detached mode, returning a DSLContainer
object that can be later used to stop the container (viaContainer.stop
).
- Use
docker.build
to build a Docker image from aDockerfile
, returning a DSLImage
object that can then be used to perform operations on that image (as above).
The docker
DSL supports some additional capabilities not shown in the "Docker Pipeline" Job:
- Use the
docker.withRegistry
anddocker.withServer
to register endpoints for the Docker registry and host to be used when executing docker commands.
docker.withRegistry(<registryUrl>, <registryCredentialsId>)
docker.withServer(<serverUri>, <serverCredentialsId>)
- Use the
Image.pull
to pull Docker image layers into the Docker host cache. - Use the
Image.push
to push a Docker image to the associated Docker Registry. Seedocker.withRegistry
above.
The image needs to run Docker commands, so it assumes that your Docker daemon is listening to /var/run/docker.sock
(discussion). This is not “Docker-in-Docker”; the container only runs the CLI and connects back to the host to start sister containers. The run
target also makes reference to file paths on the Docker host, assuming they are where you are running that command, so this target cannot work on boot2docker. There may be some way to run this demo using boot2docker; if so, please contribute it.