Docker es una plataforma abierta para desarrollar, entregar y correr aplicaciones.
Docker permite empaquetar una aplicación con todas sus dependencias dentro de una unidad estandarizada para el desarrollo de aplicaciones.
Las aplicaciones dentro de containers corren en un ambiente aislado directamente sobre el host server y no requieren emulación de hardware.
En cambio las VM son sistemas operativos completos que corren en hardware virtualizado a través de un Hypervisor, quien se encarga de la comunicación entre el guest y el host os.
Docker fue creado por Salomon Hykes como un proyecto interno en dotCloud presentado en la pyCon en 2013.
El runtime de Docker esta escrito en Go, para la fecha los grandes contribuidores del proyecto han sido Google, Microsoft, IBM, Huawei, Red Hat y el Docker Team.
Interface de usuario que interactúa con docker. Acepta comandos desde el usuario y tiene comunicación bidirecional con el Docker deamon.
Deamon que corre en la maquina host. El usuario no interactua directo con el, sino a través del cliente vía Api Rest o Sockets.
Dupla Cliente-Deamon al igual que Docker Compose. Usualmente conocido como "Docker".
Herramienta que permite crear con facilidad docker hosts en tu computador o en cloud providers (Amazon, DO, Google) y dentro de un data center propio.
Herramienta para definir y correr aplicaciones más complejas con docker (ej. Multi-cointainer apps) con un solo archivo.
Herramienta para el clustering de Docker. Swarm agrupa varios docker host y los expone como un virtual docker host. Permite escalamiento de multiples host.
Text
docker run -i -t -d ubuntu:15.04 /bin/bash
Text
Archivo de texto que contiene los comandos usados por el usuario para crear una imagen
FROM busybox
MAINTAINER Gustavo Gimenez <gimenezanderson@gmail.com>
RUN mkdir /app
ADD build/geo /app
RUN mkdir /app/data
RUN chmod -R 777 /app
EXPOSE 4000
CMD ["./app/geo"]
Comandos de Docker más usados.
// Información general
man docker // man docker-run
docker help // docker help run
docker info
docker version
docker network ls
// Imagenes
docker images // docker [IMAGE_NAME]
docker pull [IMAGE] // docker push [IMAGE]
// Contenedores
docker run
docker ps // docker ps -a, docker ps -l
docker stop/start/restart [CONTAINER]
docker stats [CONTAINER]
docker top [CONTAINER]
docker port [CONTAINER]
docker inspect [CONTAINER]
docker inspect -f "{{ .State.StartedAt }}" [CONTAINER]
docker rm [CONTAINER]
SSH dentro de un contenedor
docker pull ubuntu
docker run -it --name ubuntu_example ubuntu /bin/bash
Crear una imagen
FROM busybox
MAINTAINER Gustavo Gimenez <gimenezanderson@gmail.com>
RUN mkdir /app
ADD build/server /app
RUN mkdir images
ADD images /images
RUN chmod -R 777 /app
EXPOSE 9000
ENTRYPOINT "/app/server"
Dockerfile
// Build image
docker build -t image-server .
// Run it
docker run -d -p 9000:9000 --name server-ex image-server
Comandos
Docker Volume
// Run it
docker run -d -p 8080:90 --name volume-server-example -v $(pwd):/usr/share/nginx/html nginx
Usemos un Nginx Server
Docker Compose
version: '3'
services:
db:
image: postgres
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
docker-compose.yml
Docker Compose
FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /app
WORKDIR /app
ADD Gemfile /app/Gemfile
ADD Gemfile.lock /app/Gemfile.lock
RUN bundle install
ADD . /app
Dockerfile
docker-compose up
Start up
Test Docker Image
FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN mkdir /app
WORKDIR /app
ADD Gemfile /app/Gemfile
ADD Gemfile.lock /app/Gemfile.lock
RUN bundle install
ADD . /app
Dockerfile
docker run -it --name sinatra-test sinatra-app rspec spec/app_spec.rb
Run image
Test Docker Image
FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN mkdir /app
WORKDIR /app
ADD Gemfile /app/Gemfile
ADD Gemfile.lock /app/Gemfile.lock
RUN bundle install
ADD . /app
Dockerfile
docker run -it --name sinatra-test sinatra-app rspec spec/app_spec.rb
Run image
Test Docker Image
FROM gusga/sinatra-app:0.1
CMD [ "sh", "-c", "rspec"]
Build image
docker run -it --name sinatra-test sinatra-app rspec spec/app_spec.rb
Run it
docker build -f Dockerfile.test -t sinatra-test-image .
Dockerfile.test
Share Image
FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN mkdir /app
WORKDIR /app
ADD Gemfile /app/Gemfile
ADD Gemfile.lock /app/Gemfile.lock
RUN bundle install
ADD . /app
Build image
docker push gust/sinatra-app
Publish
docker build . -t gusga/sinatra-app
Dockerfile file
Rkt
Linux Containers LCX
LXD container hypervisor
Tipo | Software |
---|---|
Clustering/orchestration | Swarm, Kubernetes, Marathon, MaestroNG, decking, shipyard |
Docker registries | Portus, Docker Distribution, hub.docker.com, quay.io, Google container registry, Artifactory, projectatomic.io |
PaaS with Docker | Rancher, Tsuru, dokku, flynn, Octohost, DEIS |
OS made of Containers | RancherOS |