CircleCI Dockerfile Wizard
Easily build Docker images with different versions/combinations of common languages/dependencies, for use on CircleCI.
Prerequisites
- CircleCI account
- Docker Hub account (Docker itself does not need to be installed on your computer)
- Make & Perl (included in most macOS & Linux installations)
Usage
1. Fork this repository and start building it on CircleCI:
2. Add your Docker Hub username (DOCKER_USERNAME
) and password (DOCKER_PASSWORD
) to CircleCI, either as project-specific environment variables (shown below), or as resources in your org-global (default) Context
3. Clone your fork of the project onto your computer
4. Enter the cloned dockerfile-wizard
directory and run make ready
to prepare the config.yml
file for building Docker images on CircleCI
5. Run make setup
in the cloned directory, or else manually add the versions/dependencies that you need to .circleci/config.yml
as specified in the image_config
section
6. Commit and push your changes
Once the build has finished, your image will be available at http://hub.docker.com/r/DOCKER_USERNAME/IMAGE_NAME
and can be used in other projects building on CircleCI (or anywhere else!). The Dockerfile for your image will be stored as an artifact in this project's build
job.
To use the Dockerfile Wizard again, run make reset
in the cloned directory, then repeat steps 4-6.
How it works
- The
setup
script adds your requested version information to the config.yml file as environment variables - The
generate.sh
script runs on CircleCI and generates a Dockerfile based on those environment variables - CircleCI builds your Docker image from the generated Dockerfile, deploys it using your Docker credentials, and then tests your image using Bats, which we install in every Docker image built via this repository
Notes
- The portions of this repository that run on your local computer are intended for Linux/macOS operating systems; they may not work on Windows
- This repository has not been tested with every possible permutation of versions/dependencies, and you may encounter errors with some combinations of various languages/tools. If your
build
job fails, check itsdocker build
step—there's likely a compilation error with a particular version of Ruby, Node, or Python. - Thanks to jmason for the
tap-to-junit
script! - Feedback/questions/bugs welcome!
- Want to do all this yourself? Check out our video on creating custom Docker images for CircleCI
To-do
- Add PHP support
- Add support for other container registries