The Docker build process caches where possible to speed up builds. Order actions in the Dockerfile so that commands that usually produce the same result, or that are unlikely to change, come early. E.g. Put utility installation / update code before compiling source under active development.
Build Fails On Status Code That Can Be Ignored
A RUN command in a Dockerfile may sometimes return non 0 exit status even though the issue isn't important. To ignore that ensure that the command returns 0. For example:
RUN find / -name application.properties -ls; exit 0;
Docker Runs Out of Space
If Docker is giving out of space errors, use:
docker system df
docker system info
to verify the problem and use:
docker system prune
to free up lots of space.
Mounting Volumes Locally
While developing applications to run on OpenShift it may be useful to be able to run the application locally without OpenShift. One issue is that OpenShift provides some environment conveniences that Docker does not. In particular it will take care of mounting external storage, such as file systems and secrets, at designated locations in the container. See below for an example of how to do that directly with Docker.
This is an example of mounting the contents of 'temp/tl-outage/httpd-conf/' inside your running container at '/tmp/apache-conf'.
docker run -it -p 443:443 -v /temp/tl-outage/httpd-conf:/tmp/apache-conf tl-outage
This can be very useful for running an application container locally with Docker without needing to change the container for running on OpenShift.
OpenShift can leverage docker compose applications. The kubernetes community maintains a tool called kompose that converts compose applications into Kubernetes/OpenShift format, and can alternatively bring the apps up or down. More documentation on kompose is available here. The matrix of support docker compose syntax is available here.