in March 2013 as a simplified solution to use LXC (namespace and control group capabilities of the Linux kernel) ▸ start an isolated environment for applications within seconds ▸ written in Go
includes everything to run your application ▸ a container is a runtime instance of an image ▸ you can easily distribute your images via a Docker registry (the default Docker Hub is like GitHub for Docker images)
file named Dockerfile containing the instructions on how to build the image FROM Specify base image RUN Execute commands ADD / COPY Add files or directories to the image ENTRYPOINT Set the entrypoint CMD Set the default command EXPOSE Set the container ports Most important instructions: Dockerfile syntax
stateless - store user content on AWS S3 for example ▸ configuration should be done entirely via environment variables - no more environment-specific configs like testing.yml, staging.yml, prod.yml etc. See https://12factor.net/config