
1. Background on Virtualization
1.1. Full virtualization
1.2. Para virtualization
1.3. Kernel or container based virtualization
2. Why containers?
2.1. Why containers over full/para?
2.2. When containers over full/para?
3. Evolution of containers
3.1. Solid tech. since 1982
3.2. 1982 - chroot
3.3. 1998 - FreeBSD Jails
3.4. 2004 - Solaris Zones
3.5. 2005 - OpenVZ
3.6. 2008 - LXC
3.7. 2013 - Docker
4. Properties of container
4.1. Isolation
4.1.1. File system
4.1.2. I/O
4.1.3. Network
4.1.4. CPU
4.1.5. Memory
4.2. Privileges
4.2.1. Can I give someone root?
4.3. Speed
4.3.1. How close to bare metal?
4.4. Efficiency
4.4.1. Copy on write
4.4.2. Resource pooling
5. ...Enter Snap CI
5.1. Hosted continuous integration platform
5.2. Running untrusted code thousands of times a day
5.3. Users demand extreme speed
5.3.1. Must be faster than my build box
5.3.2. Builds must start-up in a flash
5.4. Needs isolation
5.4.1. Builds cannot see each other
5.4.2. Builds cannot affect each other
5.4.2.1. Network
5.4.2.2. Memory
5.4.2.3. Disk
5.4.2.4. I/O
5.4.2.5. CPU
5.5. Users need privilege
5.5.1. I want to test my Chef code. Need root.
5.5.2. I want to install latest gcc. Need root.
5.5.3. I want to start a service without changing init scripts. Need root.
6. LXC
6.1. Better upstream support.
6.2. Namespaces baked into Kernel
6.3. Unprivileged containers can help with escalated privileges inside container
7. Docker
7.1. Much more efficient - Copy-on-write
7.2. Abstraction over container tech. via libcontainer
7.3. No user namespace support
7.4. Docker daemon runs as root
7.5. Better suited to be application containers
8. We chose OpenVZ
8.1. Circa mid 2012
8.2. Why OpenVZ over LXC?
8.3. Why OpenVZ over Docker?
8.4. Linux kernel namespaces vs OpenVZ namespacing
8.5. Full isolation
9. First cut: dedicated on-demand containers
9.1. Good
9.1.1. Isolated
9.1.2. Users can scale to n-containers
9.1.3. Bespoke containers. Can create per user demand.
9.2. Bad
9.2.1. Very slow build startup
9.2.2. Very poor utilization
9.2.3. Complex orchestration
9.2.4. Very large inventory of containers with poor utilization