Grazie a Docker è possibile costruire ambienti di sviluppo e di produzione consistenti e riproducibili, in questo talk parleremo delle origini e della storia di Docker, le technical foundation ed alcuni use-cases pratici per capire come è fatto un ambiente dockerizzato e come poterlo usare al meglio.
● You read the online tutorial
● You installed docker locally
● You are using for development
● You are using on production
Raise your hands if
● What is Docker and why it is important to know it.
● What a container is and how to use it.
● Developing PHP applications using Docker.
● Tips and tricks on real world usage.
● To make your local development and build workflow faster, more efficient, and
○ If it works on my machine, it will work in production
○ No more dependency hell, different versions of PHP with their own
libraries, Mysql or Mariadb, Redis or Memcache, Sass or Less
compilers, NPM etc.etc.
○ Consistent development environment, same operating system, same
libraries, no matter the host operating system you are running.
○ Easy way to replicate production environment.
○ Concentrate on code, instead to (re)build the infrastructure your
Ok, what can I use Docker for ?
What is Docker ?
“Docker allows you to package an
application with all of its dependencies
into a standardized unit for software
How it is made Docker ?
● It relies on standard linux kernel features only (cgroups, namespaces,
● Static compiled binary based on golang, no extra moving parts.
● It natively runs on every linux distro and on mac/windows too thanks to
boot2docker vm. (https://www.docker.com/docker-toolbox)
● Fast and lightweight, no added overhead.
● Security by process isolation.
● Open container initiative also baked by Docker inc. (https://www.
Virtual machines Containers
Docker is not virtualization
What is a container ?
● It is a linux process.
● It sits on top of the base docker image
(usually an operating system image).
● It has its own network interface.
● It has its own process namespace.
Docker is a platform
Docker is an open source platform to build, ship and run any app, anywhere.
● Build: Package your application in a container.
● Ship: Move that container from one host to another.
● Run: Execute your application.
● Any app: that runs on Linux (recently native Windows support)
● Anywhere: Local, remote, cloud, VM, RaspberryPI ecc. any platform capable
to run the docker engine.
A “Dockerfile” is a text document that contains all the
commands to assemble a docker image in a programmatic
and reproducible way.
RUN apt-get update && apt-get install -y nginx
RUN echo 'Hi, I am in your container'
CMD nginx -g "daemon off;"
$ docker build -t paolomainardi/dday15web .
$ docker run -d -P paolomainardi/dday15web
Build: What we learned
● It allows to create a docker image in
a programmatic and reproducible
● Each build step gets cached (thanks
to overlaid filesystem)
● Re-run the build allows to skip slow
steps (ex: apt-get install)
Ship: What we learned
● It mimics the git workflow.
● Images are self-contained, independent from the host.
● Exactly the same behaviour, on any environment.
● To easily replicate and share the environment your application expects.
● No more “it worked on my machine” excuse.
Run: What we learned
● Execution is fast and lightweight.
● There is no overhead, they are just normal OS running processes.
● Containers are isolated.
Any app, anywhere
● If it works on Linux, it works on Docker.
● Not just for command-line apps
○ etc…follow this repo to see crazy things: https://github.com/jfrazelle/dockerfiles
● Every linux host that run Linux 3.8+ x86_64 kernel
The Docker ecosystem
When talk about Docker, we talk about an ecosystem of tools.
● Docker engine: Client and server daemon to build, ship and run containers.
● Docker hub: The official Docker image registry.
● Docker compose: Tool to orchestrate multi-container applications.
● Docker machine: Automated Docker hosts provisioning.
● Docker swarm: Host clustering and container scheduling.
Much more than this, check it out: https://www.docker.com/products/overview