O que é o Docker afinal? (Workshop Novatec)
-
Upload
wellington-silva -
Category
Technology
-
view
34 -
download
0
Transcript of O que é o Docker afinal? (Workshop Novatec)
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)
HTTPCURL 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_nameou $ 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 wsilvaRUN echo "Ola" | tee /usr/share/nginx/html/demo.html
TRABALHANDO COM IMAGENS
TAG DE IMAGENS
$ docker tag nginx:latest wfsilva/nginx:latestou$ 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-worldou $ 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
dockerstart
docker rm
RESTART
docker kill
docker stopKILL
DIE
DIE
STOP
DIE
START
RESTART
PAUSE
UNPAUSE
DIE
OOM
docker pause
dockerrestart
docker unpause
exit
killedyesno
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