AFINAL, O QUE É DOCKER?
WORKSHOP
WHO AM I?
WELLINGTON F. SILVA
▸ AKA: wsilva | boina | tom | fisi
▸ Pai
▸ Técnico Telecom
▸ Programador
▸ Instrutor
▸ Devops
▸ Escritor
AGENDA
▸ Virtualização
▸ Histórico
▸ Container from scratch
▸ LXC - Linux Containers
▸ Virtual Machine x
Contêineres
▸ Evolução
▸ Arquitetura
▸ OSX x Windows x Linux
▸ Imagens
▸ Hands On (comandos e
exemplos)
O QUE É DOCKER?
FERRAMENTA PARA
VIRTUALIZAÇÃO NO NÍVEL DO
SISTEMAS OPERACIONAL
wsilva
O QUE É O DOCKER?
TIPOS DE VIRTUALIZAÇÃO
O QUE É O DOCKER?
TIPOS DE VIRTUALIZAÇÃO
▸ Full Virtualization
O QUE É O DOCKER?
TIPOS DE VIRTUALIZAÇÃO
▸ Full Virtualization
▸ Partial Virtualization
O QUE É O DOCKER?
TIPOS DE VIRTUALIZAÇÃO
▸ Full Virtualization
▸ Partial Virtualization
▸ Paravirtualization
O QUE É O DOCKER?
TIPOS DE VIRTUALIZAÇÃO
▸ Full Virtualization
▸ Partial Virtualization
▸ Paravirtualization
▸ OS Level Virtualization
O QUE É O DOCKER?
TIPOS DE VIRTUALIZAÇÃO
▸ Full Virtualization
▸ Partial Virtualization
▸ Paravirtualization
▸ OS Level Virtualization <= DOCKER
HISTÓRICO
HISTÓRICO
HISTÓRIA
▸ 21/03/2013 1ª Demo
HISTÓRICO
HISTÓRIA
▸ 21/03/2013 1ª Demo
▸ Opensource(Apache License 2.0)
HISTÓRICO
HISTÓRIA
▸ 21/03/2013 1ª Demo
▸ Opensource(Apache License 2.0)
▸ Base para dotCloud
HISTÓRICO
HISTÓRIA
▸ 21/03/2013 1ª Demo
▸ Opensource(Apache License 2.0)
▸ Base para dotCloud
▸ 23/07/2013 - Ben Golub, CEO da
Gluster e da Plaxo se une ao time
HISTÓRICO
HISTÓRIA
▸ 21/03/2013 1ª Demo
▸ Opensource(Apache License 2.0)
▸ Base para dotCloud
▸ 23/07/2013 - Ben Golub, CEO da
Gluster e da Plaxo se une ao time
▸ 22/01/2014 2º aporte de US$ 15
mi
HISTÓRICO
HISTÓRIA
▸ 23/07/2014 Compra da Orchard
(FIG)
HISTÓRICO
HISTÓRIA
▸ 23/07/2014 Compra da Orchard
(FIG)
▸ 16/09/2014 3º aporte US$ 40 mi
HISTÓRICO
HISTÓRIA
▸ 23/07/2014 Compra da Orchard
(FIG)
▸ 16/09/2014 3º aporte US$ 40 mi
▸ 15/10/2014 Microsoft anuncia
Docker no Windows 2016 sever
HISTÓRICO
HISTÓRIA
▸ 23/07/2014 Compra da Orchard
(FIG)
▸ 16/09/2014 3º aporte US$ 40 mi
▸ 15/10/2014 Microsoft anuncia
Docker no Windows 2016 sever
▸ 14/04/2015 4º aporte US$ 95 mi
HISTÓRICO
HISTÓRIA
▸ 23/07/2014 Compra da Orchard
(FIG)
▸ 16/09/2014 3º aporte US$ 40 mi
▸ 15/10/2014 Microsoft anuncia
Docker no Windows 2016 sever
▸ 14/04/2015 4º aporte US$ 95 mi
▸ 22/06/2015 Open Container
Initiative
COMO FUNCIONA?
PROCESSOS
+
KERNEL NAMESPACES
+
CGROUPS
PROCESSOS
PID=1
KERNEL NAMESPACES
(O QUE O PROCESSO PODE VER)
COMO FUNCIONA?
KERNEL NAMESPACES
▸ IPC - interprocess communication
COMO FUNCIONA?
KERNEL NAMESPACES
▸ IPC - interprocess communication
▸ PID - Processos
COMO FUNCIONA?
KERNEL NAMESPACES
▸ IPC - interprocess communication
▸ PID - Processos
▸ NET- rede
COMO FUNCIONA?
KERNEL NAMESPACES
▸ IPC - interprocess communication
▸ PID - Processos
▸ NET- rede
▸ UTS - Unix timesharing system, recursos do kernel
COMO FUNCIONA?
KERNEL NAMESPACES
▸ IPC - interprocess communication
▸ PID - Processos
▸ NET- rede
▸ UTS - Unix timesharing system, recursos do kernel
▸ USER - usuários
COMO FUNCIONA?
KERNEL NAMESPACES
▸ IPC - interprocess communication
▸ PID - Processos
▸ NET- rede
▸ UTS - Unix timesharing system, recursos do kernel
▸ USER - usuários
▸ MNT - filesystem e pontos de montagem
CGROUPS
(O QUE O PROCESSO PODE USAR)
COMO FUNCIONA?
CGROUPS
▸ CPU
COMO FUNCIONA?
CGROUPS
▸ CPU
▸ Memória
COMO FUNCIONA?
CGROUPS
▸ CPU
▸ Memória
▸ I/O em disco
COMO FUNCIONA?
CGROUPS
▸ CPU
▸ Memória
▸ I/O em disco
▸ Interface de rede
COMO FUNCIONA?
CGROUPS
▸ CPU
▸ Memória
▸ I/O em disco
▸ Interface de rede
▸ Hardwares periféricos (pen drive, camera, etc)
DEMOS
https://github.com/wsilva/container-from-scratch-demo
LXC - Linux Containers
VMS X CONTÊINERES
SERVIDORSERVIDOR
HOST OSHOST OS
CONTAINER ENGINEHYPERVISOR
BINS/LIBSGUEST OS BINS/LIBSGUEST OS
BINS/LIBS BINS/LIBS APP APP
APP APP
VM VM
Container Container
VMs x Contêineres
SERVIDORSERVIDOR
DEBIAN LINUXDEBIAN LINUX
DOCKERVIRTUALBOX
BINS/LIBSCENTOS LINUX BINS/LIBSUBUNTU LINUX
BINS/LIBS BINS/LIBS NGINX MYSQL
NGINX MYSQL
VM VM
Container Container
VMs x Contêineres
EVOLUÇÃO
EVOLUÇÃO
EVOLUÇÃO
▸ Libvirt / LXC
▸ Libcontainer
▸ runC
▸ containerd
ARQUITETURA
DOCKER HOST
Imagens
DAEMON
Volumes
Containers
KITEMATIC
DOCKER CLIENT
DOCKER PULL
DOCKER PUSH
DOCKER BUILD
DOCKER RUN
DOCKER PS
DOCKER IMAGES
DOCKER REGISTRY (HUB)
HTTP
CURL
WGET
WINDOWS VS OSX VS LINUX
LINUX (DOCKER HOST)WINDOWSOSX
VM LINUX (DOCKER HOST)
DOCKER CLIENTDOCKER CLIENT
VM LINUX (DOCKER HOST)
DOCKER CLIENT
DOCKER DAEMONDOCKER DAEMONDOCKER DAEMON
CONTÊINERES LINUX
WINDOWS (DOCKER HOST) LINUXOSX
VM WINDOWS (DOCKER HOST)
DOCKER CLIENTDOCKER CLIENT DOCKER CLIENT
DOCKER DAEMON DOCKER DAEMONDOCKER DAEMON
CONTÊINERES WINDOWS
VM WINDOWS (DOCKER HOST)
IMAGENS
COMANDOS DE APOIO
COMANDOS DE APOIO
HELP
$ docker -h
$ docker --help
$ docker help
COMANDOS DE APOIO
VERSÃO
$ docker -v
$ docker --version
$ docker version
COMANDOS DE APOIO
INFORMAÇÕES DO SISTEMA
$ docker info
PRIMEIROS CONTÊINERES
HELLO WORLD
$ docker run hello-world
COWSAY
$ docker run hello-world

$ docker run docker/
whalesay cowsay "Olaaaa"
TRABALHANDO COM IMAGENS
TRABALHANDO COM IMAGENS
LISTANDO IMAGENS
$ docker images
TRABALHANDO COM IMAGENS
BUSCANDO IMAGENS
$ docker search apache
TRABALHANDO COM IMAGENS
BAIXANDO IMAGENS
$ docker pull nginx
TRABALHANDO COM IMAGENS
CRIANDO IMAGEM A PARTIR DE CONTÊINER
$ docker commit
container_name
ou

$ docker commit
1005692cf261
TRABALHANDO COM IMAGENS
CRIANDO IMAGEM A PARTIR DE DOCKERFILE
$ docker build --tag
wfsilva/nginx:dockerfile .



Obs: o ponto (.) é o path onde está
o Dockerfile
TRABALHANDO COM IMAGENS
EXEMPLO DE DOCKERFILE
FROM nginx:latest

MANTAINER wsilva
RUN echo "Ola" | tee /usr/
share/nginx/html/demo.html
TRABALHANDO COM IMAGENS
TAG DE IMAGENS
$ docker tag nginx:latest
wfsilva/nginx:latest
ou
$ docker tag c54a2cc56cbb
wfsilva/nginx
TRABALHANDO COM IMAGENS
ENVIANDO IMAGENS
$ docker push wfsilva/
nginx
TRABALHANDO COM IMAGENS
IMAGENS EM ARQUIVOS
$ docker save hello-world
--output hello-world.tar

$ docker load --input
hello-world.tar
TRABALHANDO COM IMAGENS
CAMADAS DE UMA IMAGEM
$ docker history hello-
world
TRABALHANDO COM IMAGENS
REMOVENDO IMAGENS
$ docker rmi hello-world
ou

$ docker rmi c54a2cc56cbb
RODANDO CONTÊINERES
RODANDO CONTÊINERES
COMO RODAR
$ docker run [opções]
nome-ou-id-da-imagem
[comandos e ou argumentos]
LISTANDO CONTÊINERES
LISTANDO CONTÊINERES
COMANDO MAIS UTILIZADO
$ docker ps

ou

$ docker ps -a

para listar inclusive os
parados
REMOVENDO CONTÊINERES
REMOVENDO CONTÊINERES
REMOVENDO CONTÊINERES
$ docker rm

nome-ou-id-do-contêiner
MANEIRAS DE RODAR
MANEIRAS DE RODAR
DETACHED
$ docker run --detach 
debian sleep infinity
$ docker run -d debian 
sleep infinity
MANEIRAS DE RODAR
INTERATIVA COM TERMINAL
$ docker run 
--interactive 
--tty 
debian 
/bin/bash
MANEIRAS DE RODAR
INTERATIVA COM TERMINAL
$ docker run -i -t 

debian /bin/bash
MANEIRAS DE RODAR
INTERATIVA COM TERMINAL
$ docker run -i -t 

debian /bin/bash
$ docker run -it 

debian /bin/bash
MANEIRAS DE RODAR
INTERATIVA (UNIX PIPELINE)
$ echo "Ola" | docker run
-i debian cat
PORTAS
PORTAS
EXPONDO PORTAS
$ docker run -d 

--publish 80 

nginx

ou

$ docker run -d 

—publish-all 

nginx
PORTAS
MAPEANDO PORTAS
$ docker run -d 

--publish 8080:80 

tutum/hello-world

PORTAS
LISTANDO AS PORTAS DE UM CONTÊINER
$ docker port container-
name
VOLUMES
VOLUMES
CRIANDO VOLUME
$ docker volume create 

--name dados
VOLUMES
LISTANDO VOLUMES
$ docker volume ls
VOLUMES
USANDO UM VOLUME CRIADO
$ docker run -it 

--volume dados:/dados 

alpine 

/bin/sh

VOLUMES
MAPEANDO UMA PASTA DO HOST
$ docker run -it 

--volume /home/tom:/tom 

alpine 

/bin/sh

VOLUMES
REMOVENDO VOLUME
$ docker volume rm dados
ESTADOS DE UM CONTÊINER
CREATE
STOPPED RUNNING
PAUSED
CREATE
DESTROY
DELETED
START
docker run
docker create
docker

start
docker rm
RESTART
docker kill
docker

stop
KILL
DIE
DIE
STOP
DIE
START
RESTART
PAUSE
UNPAUSE
DIE
OOM
docker 

pause
docker

restart
docker unpause
exit
killed
yes
no
EXEMPLOS
EXEMPLOS
PHP BUILT IN WEB SERVER
$ docker run -d 
--publish 80:80 
--volume "$(pwd):/app" 
--workdir /app 
php:7-cli 
php -S 0.0.0.0:80
EXEMPLOS
NGINX SERVER
docker run -d 

-p 80:80 

--volume "$(pwd):/usr/
share/nginx/html" 
nginx
EXEMPLOS
COMANDOS "DOCKERIZADOS"
$ docker run -it 

--volume "$(pwd):/app" 

--volume "$HOME/.ssh:/
root/.ssh" 

composer/composer 

install
EXEMPLOS
APLICAÇÕES GUI
▸ Navegador Tor
▸ Eyes
▸ Spotify
▸ Sugestão: https://hub.docker.com/u/jess/
EXEMPLOS
DOCKER CRAFT
docker run -d 
-p 25565:25565 
-v /var/run/docker.sock:/var/run/
docker.sock 
wfsilva/dockercraft
TO BE CONTINUED…
MAIS SOBRE DOCKER
TO BE CONTINUED…
PRÓXIMOS PASSOS
▸ docker-compose
▸ docker-machine
▸ docker-swarm
▸ kubernetes
▸ monitoring
TO BE CONTINUED…
MAIS SOBRE DOCKER
▸ https://docs.docker.com
▸ https://telegram.me/dockerbr
▸ http://docker-br.herokuapp.com
▸ http://bit.ly/curso-docker

O que é o Docker afinal? (Workshop Novatec)