Developing with Docker
Connor Jones
2018-03-02
What is Docker?
Docker is a platform to
run/share/manage
Containers
Containers
- Are a self contained environment
- Should NOT contain application data
- Should be ephemeral
Containers vs VMs

Images
- Define an environment (container)
- Built in Layers
Images vs Snapshots
- Images are smaller
- Docker has better tools (registry, compose, networking)
- Less to manage
Layers
- Layers are steps in a Dockerfile
- Layers are unique, but can be shared and reused

Build with Layers
- Only layers "above" and change need to be rebuilt
- Dockerfiles can be optimized by changing the order of the build
Containers in Development

Problems with Development at Scale
- "Builds here but not there"
- "Did you set this ENV variable?"
- "Do you have packageX installed"
- "Does the OS build tag match the Product build tag?"
Having a consistent environment
Traditional Solutions
- Central/Shared Servers maintained by staff
- VM Snapshots
- Managing the "Extra" stuff yourself
Docker Solutions
Docker Images
- Split environment and source code
- Base images as boilerplate for new processes
- Docker compose for networking containers (database to a web framework)
Demo Time
Develop With Docker
By Connor Jones
Develop With Docker
- 139