10. It’s a shell-script?
$ cat SomeApp/Dockerfile
FROM ubuntu:13.10
RUN apt-get update; apt-get install apache
RUN sed ’s/something/else/‘ /etc/apache/httpd.conf
ADD shell-script.sh
RUN shell-script.sh
RUN [‘/usr/bin/apachectl’, ‘start’]
11. How do we do it?
$ cat Dockerfile
FROM fedora
RUN yum update
yum -y install chef
18. Containers are like
ephemeral VMs*
* Docker containers don’t HAVE to be ephemeral,
but it’s TheRightThing
Docker
Image
Linux
Chef
Runs
Image'
Linux
Chef
Chef
Runs
Configures
Container
Accesses
COW
TM
19. Runtime Configuration
• One image, several
configurations
• Configuration based on
container environment
• Specify metadata or roles via
environment variables
(passed to ‘docker run -e’)
20. Chef-for-runtime
$ cat Dockerfile
FROM fedora
RUN yum update
yum -y install chef
ADD http://x/receipes.tar.gz /opt/chef"
ADD solo.rb /etc/chef/solo.rb"
CMD chef-solo -c /etc/chef/solo.rb ; !
apachectl start
21. Does it converge?
$ docker build —rm .
$ echo $? # pass or fail
(This is great use of Docker as an
alternative to VMs for testing Chef recipes
targeting non-Docker production systems)
27. Expanded view:
Burning configuration into images.
Docker Image tagInitiates
Image'
Linux
Chef
Chef
Build
Image
Linux
Chef
Creates
Creates
Runs Creates
References
1
2
28. Anatomy of a Docker+Chef
build & run
Docker ContainerInitiates Creates
Image
Linux
Chef
Chef
Runs
Configures
Chef
Runs
Configures
Build Creates
Stage 1 Stage 2
29. Chef-for-all-the-things
$ cat Dockerfile
FROM fedora
RUN yum update
yum -y install chef
ADD http://x/receipes.tar.gz /opt/chef"
ADD solo-stage1.rb /etc/chef/solo-stage1.rb"
ADD solo-stage2.rb /etc/chef/solo-stage2.rb"
RUN chef-solo -c /etc/chef/solo-stage1.rb"
CMD chef-solo -c /etc/chef/solo-stage2.rb ;"
apachectl start