Conhecendo o Docker

docker

by Daniel Romero / @infoslack

Daniel Romero

daniel romero

infoslack.com/about

Initsec

initsec

initsec.com

Livro

Livro começando com Linux

infoslack.com/livro

O que é Docker ?

Projeto PaaS da dotCloud

Open source escrito em Go

Facilita a criação de containers LXC

Iniciado em 18/01/2013

Versão 0.1 em 25/03/2013

Virtualização de Hardware

1966-1972 - IBM CP/CMS

1989 - Insignia SoftPC

1997 - Connectix VirtualPC

1999 - VMWare Workstation

2002 - Xen

2001 - IBM AIX LPAR

2006 - Amazon EC2

2007 - Sun Logical Domains

2007 - Linux KVM

2007 - InnoTek VirtualBox

2008 - MS Hyper-V

Virtualização de Processos

1979-1982 - UNIX chroot

1998 - FreeBSD jail

2001 - Parallels Virtuozzo

2001 - Linux-VServer

2005 - Solaris Containers

2005 - OpenVZ

2008 - Linux LXC

2007-2008 - (Heroku)

2013 - Docker

VM vs Container

vm vs container

Arquitetura

Arquitetura

The matrix from hell

Matrix from hell

E se...

docker container
solve matrix

Onde funciona ?

Linux - (Nativo)

OS X - (Boot2Docker/kitematic)

Windows - (Boot2Docker)

no windows

Como funciona ?

lxc container

Imagens

Template read only

Faz uso de UFS

Contém os arquivos da sua app

Criadas por Commit ou Dockerfile

Containers

Depende de uma imagem

Geram novas imagens

Conectividade com o host e outros containers

Execução controlada - CPU,RAM,I/O,etc

Descartáveis ou persistentes

camada fase 1
camada fase 2
camada fase 3
camada fase 4

Inicializando containers

              
# Opção run com interatividade:
$ docker run -it image_name [command]

# Executando em background:
$ docker run -d image_name

# Eliminando após o uso:
$ docker run --rm -it image_name [command]
              
              

Criando imagens por commit

              
# Iniciar container interativo:
$ docker run -it ubuntu

# Realizar alterações:
$ sudo apt-get update && apt-get install -y ruby

# Encerrar e commitar;
$ docker commit [image_id]
              
              

Trabalhando com Dockerfile

              
FROM ubuntu

MAINTAINER Daniel Romero infoslack[at]gmail.com

RUN apt-get update && apt-get install -y nginx 

EXPOSE 80 443

CMD ["nginx", "-g", "daemon off;"]
              
              

Gerando a imagem

              
# Opção build seguido de user/serviço e dockerfile
$ docker build -t infoslack/nginx [path_dockerfile]
              
              
docker-hub

Docker Hub

              
# Login em https://registry.hub.docker/com
$ docker login

# Baixando imagens:
$ docker pull image_name

# Buscando imagens:
$ docker search name

# Enviando imagens:
$ docker push infoslack/nginx
              
              

Containers

Images

Executando serviços

Comunicação entre containers

E os arquivos da minha app ?

docker volumes

Docker volumes

Um pouco de automação

              
db:
  image: postgres:9.3
  volumes:
    - ~/.volumes/app/db/:/var/lib/postgresql/data/
  expose:
    - 5432

app:
  build: .
  command: bundle exec rails s
  volumes:
    - .:/usr/src/app
  ports:
    - 80:3000
  links:
    - db
              
              

Docker Compose

pergutas

Jabá

infoslack.com/workshops/docker

Obrigado! =)

Links

infoslack.com/docker