Docker

From wikinotes

Docker is a system built on top of LXC Containers. The core idea is that several base-images are made available, and in your dockerfile you create a set of steps to reproduce every time the docker machine is run.

Docker shines at quickly and consistently setting up environments. When you change an environment, only the last unfinished steps are run.

Documentation

Docker Hub https://hub.docker.com/search?q=&type=image
Docker docs https://docs.docker.com/
Docker CLI https://docs.docker.com/engine/reference/commandline/cli/
Dockerfile docs https://docs.docker.com/engine/reference/builder/
Docker Compose docs https://docs.docker.com/compose/
Docker Compose syntax docs https://docs.docker.com/compose/compose-file/

Overview

A Dockerfile contains instructions to setup an image.
An image holds a frozen setup of a machine.
Containers are writable copies of an image.

Docker-compose lets you create/configure environments from images with several containers.

Basics

Docker/Dockerd
docker install
docker usage
docker examples
Dockerfile
dockerfile usage
dockerfile syntax
Docker-Compose
docker-compose usage
docker-compose syntax
Misc
docker troubleshooting

External References

overview of docker/docker-compose https://medium.com/@burakkarakan/what-exactly-is-docker-1dd62e1fde38
good base tutorial on docker https://www.digitalocean.com/community/tutorials/docker-explained-using-dockerfiles-to-automate-building-of-images
running GUI applications in docker containers http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/
running GUI applications in docker containers (detailed) http://wiki.ros.org/docker/Tutorials/GUI
dockerfile best practices https://blog.docker.com/2019/07/intro-guide-to-dockerfile-best-practices/