Share
Embed
Transcript
53 slides
-
Quick survey • How many people have heard about docker
? • How many people have tried docker ? • How many people are using docker ? -
Definition Docker is an open-source platform for developing, shipping, and
running applications. Is fast, lightweight and portable and you can separate your applications from your infrastructure. Docker combining a lightweight container virtualization platform with workflows and tooling that help you manage and deploy your applications. -
The little story • Dotcloud inc. (PaaS) -> Docker inc.
• Initially written in python -> now in GO • 1.0 is out ! • Initially based on LinuX Container (LXC) now it uses libcontainer -
How it works 3 main components: ! • Docker server
daemon • Docker API/client (CLI - command line interface) • Docker registry (official, private and public) ! The Docker API/client and Docker server communicate via sockets or through a RESTful API. -
Well…. Docker is: • Lightweight • Minimal resources -> Minimal
overhead • Fast • Portable • Open Source • Easy -
Requirements • 64bit • LXC (not anymore with libcontainer) •
AUFS • Linux 3.8 or above ! Available for : Linux, Mac OS X (with boot2docker), soon for other Unix OS. -
$ sudo apt-get update $ sudo apt-get install linux-image- extra-`uname
-r` --------------------- $ curl -s https://get.docker.io/ ubuntu/ | sudo sh ! ! ! Other OS at: http://docs.docker.com/ -
Docker server • The Docker daemon runs on a host
machine. • It can be LOCAL or REMOTE • He managed CONTAINERS and IMAGE • The user does not directly interact with the daemon, but instead through the Docker API/client. -
Docker API/client • Is the primary user interface to Docker
• It accepts commands from the user and communicates back and forth with a Docker daemon. -
Docker registry It’s simple the Docker images repository ! It
can be: • Official: hub.docker.com (private and public) • Others (private and public) ! ! docker-registry repository https://github.com/dotcloud/docker-registry -
Docker image A Docker image is a read-only “template”. !
For example, an image could contain an Ubuntu operating system with Apache, NGINX or your database. ! Images are used to create Docker containers. ! You can: • build new images • update existing images • download Docker images already created. -
Docker container 1/2 Docker containers are similar to a directory.
! A Docker container holds everything that is needed for an application to run and can be run, started, stopped, moved, and deleted. ! Each container is an isolated and secure application platform. ! A container consists of an operating system, user-added files, and meta-data. -
Docker container 2/2 An image tells Docker what the container
holds, what process to run when the container is launched, and a variety of other configuration data. ! When Docker runs a container from an image, it adds a read-write layer on top of the image (using a union file system) in which your application can then run. -
Docker flow 1.Build/Download your Docker images 2.Create (alias run) your
container from those images 3.Share/Save your images on Docker Hub or your own repository -
Some commands docker run # run a container docker stop
# stop a container docker rm # remove a container docker rmi # remove an image docker inspect # information about container docker commit # create a new image from the container docker logs # container’s logs docker build # build a container from a dockerfile docker ps # lists the container docker pull # pull an image from a registry -
docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG] Run a command in
a new container starting from an image -
docker run ubuntu echo “ciao” run a container based on
ubuntu image with command echo “ciao” ! root@test:~# docker run ubuntu echo "ciao" Unable to find image 'ubuntu' locally # looks for ubuntu image locally Pulling repository ubuntu # pull ubuntu image from hub.docker.com a7cf8ae4e998: Download complete …………………………………………………… 4d26dd3ebc1c: Download complete d4010efcfd86: Download complete ciao # output of our COMMAND -
Some run options -d # Detached mode (alias background) -e
# Set environment variables -h # Container host name -p # Publish a container's port to the host -v, --volume=[] #Bind mount a volume --link #Add link to another container (name:alias) --volumes-from=[] #Mount volumes from the specified container(s) -m, --memory=”” #Memory limit -c #CPU shares (relative weight) -
docker run -v /var/log -p 80:80 --name nginx_c ubuntu touch
/var/log/text -v /var/log # mount dir outside container -p 80:80 # redirect 80 port of host machine to 80 port of container --name nginx_c # name this container nginx_c touch /var/log/text # our COMMAND with [ARG] -
docker build [OPTIONS] PATH | URL | - Build an
image from a Dockerfile -
This is a Dockerfile FROM ubuntu:12.04 # sets the base
image RUN apt-get update # run a command RUN apt-get install -y build-essential git python / python-dev python-setuptools python-pip ADD ./ /app # copy files from host machine to images RUN pip install -r /app/requirements.txt VOLUME /app # In this way you can see this dir from your host machine EXPOSE 8080 # Port to expose CMD ["/usr/local/bin/uwsgi" ,"--ini" ,"/app/conf/uwsgi.ini"] # default command that will run when container starts -
But remember…. Every RUN is a commit that save the
state of the container into an image ! RUN cd /var/log RUN rm mylogs ! is different from ! RUN cd /var/log && rm mylogs -
Dockerfile cache Every line in your Dockerfile is chached, if
you change one line Docker will build your image from that line. -
Interesting projects • Dokku - Heroku with Docker • Orchard
- PaaS provider for Docker • CoreOS - OS for Docker cloud server • Maestro - Orchestration system for Docker • Apache Mesos - From the name it seems awesome • Flynn.io - PaaS provider for Docker • Deis.io - PaaS provider for Docker • Other - A lot of other interesting stuff -
Resources to start Learn Docker in 10 min http://www.docker.com/tryit/ !
How is Docker.io different from a normal VM ? http://stackoverflow.com/questions/16047306/how-is-docker-io- different-from-a-normal-virtual-machine ! Can you explain Docker with a practical example/case ? http://stackoverflow.com/questions/20618828/can-you-explain-docker- with-a-practical-example-case ! Docker Explained: How To Containerize Python Web Applications https://www.digitalocean.com/community/tutorials/docker-explained-how- to-containerize-python-web-applications ! ! -
Community ! official web site: www.docker.com irc: #docker on freenode
google groups: docker-user italian meetup: (?)