$30 off During Our Annual Pro Sale. View Details »

O que é o Docker afinal? (Workshop Novatec)

O que é o Docker afinal? (Workshop Novatec)

Workshop de introdução mostrando na essência o que são contêineres (Linux e Windows), da onde vem o Docker, o que são LXC e demos montando contêineres manualmente, com LXC e com Docker além de alguns exemplos básicos de utilização do Docker.

Wellington F. Silva

October 06, 2016
Tweet

More Decks by Wellington F. Silva

Other Decks in Technology

Transcript

  1. AFINAL, O QUE É DOCKER?
    WORKSHOP

    View Slide

  2. WHO AM I?
    WELLINGTON F. SILVA
    ▸ AKA: wsilva | boina | tom | fisi
    ▸ Pai
    ▸ Técnico Telecom
    ▸ Programador
    ▸ Instrutor
    ▸ Devops
    ▸ Escritor

    View Slide

  3. 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)

    View Slide

  4. O QUE É DOCKER?

    View Slide

  5. View Slide

  6. View Slide

  7. FERRAMENTA PARA
    VIRTUALIZAÇÃO NO NÍVEL DO
    SISTEMAS OPERACIONAL
    wsilva
    O QUE É O DOCKER?

    View Slide

  8. TIPOS DE VIRTUALIZAÇÃO

    View Slide

  9. O QUE É O DOCKER?
    TIPOS DE VIRTUALIZAÇÃO
    ▸ Full Virtualization

    View Slide

  10. O QUE É O DOCKER?
    TIPOS DE VIRTUALIZAÇÃO
    ▸ Full Virtualization
    ▸ Partial Virtualization

    View Slide

  11. O QUE É O DOCKER?
    TIPOS DE VIRTUALIZAÇÃO
    ▸ Full Virtualization
    ▸ Partial Virtualization
    ▸ Paravirtualization

    View Slide

  12. O QUE É O DOCKER?
    TIPOS DE VIRTUALIZAÇÃO
    ▸ Full Virtualization
    ▸ Partial Virtualization
    ▸ Paravirtualization
    ▸ OS Level Virtualization

    View Slide

  13. O QUE É O DOCKER?
    TIPOS DE VIRTUALIZAÇÃO
    ▸ Full Virtualization
    ▸ Partial Virtualization
    ▸ Paravirtualization
    ▸ OS Level Virtualization <= DOCKER

    View Slide

  14. View Slide

  15. HISTÓRICO

    View Slide

  16. HISTÓRICO
    HISTÓRIA
    ▸ 21/03/2013 1ª Demo

    View Slide

  17. HISTÓRICO
    HISTÓRIA
    ▸ 21/03/2013 1ª Demo
    ▸ Opensource(Apache License 2.0)

    View Slide

  18. HISTÓRICO
    HISTÓRIA
    ▸ 21/03/2013 1ª Demo
    ▸ Opensource(Apache License 2.0)
    ▸ Base para dotCloud

    View Slide

  19. 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

    View Slide

  20. 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

    View Slide

  21. HISTÓRICO
    HISTÓRIA
    ▸ 23/07/2014 Compra da Orchard
    (FIG)

    View Slide

  22. HISTÓRICO
    HISTÓRIA
    ▸ 23/07/2014 Compra da Orchard
    (FIG)
    ▸ 16/09/2014 3º aporte US$ 40 mi

    View Slide

  23. 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

    View Slide

  24. 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

    View Slide

  25. 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

    View Slide

  26. COMO FUNCIONA?

    View Slide

  27. PROCESSOS
    +
    KERNEL NAMESPACES
    +
    CGROUPS

    View Slide

  28. PROCESSOS
    PID=1

    View Slide

  29. KERNEL NAMESPACES
    (O QUE O PROCESSO PODE VER)

    View Slide

  30. COMO FUNCIONA?
    KERNEL NAMESPACES
    ▸ IPC - interprocess communication

    View Slide

  31. COMO FUNCIONA?
    KERNEL NAMESPACES
    ▸ IPC - interprocess communication
    ▸ PID - Processos

    View Slide

  32. COMO FUNCIONA?
    KERNEL NAMESPACES
    ▸ IPC - interprocess communication
    ▸ PID - Processos
    ▸ NET- rede

    View Slide

  33. COMO FUNCIONA?
    KERNEL NAMESPACES
    ▸ IPC - interprocess communication
    ▸ PID - Processos
    ▸ NET- rede
    ▸ UTS - Unix timesharing system, recursos do kernel

    View Slide

  34. COMO FUNCIONA?
    KERNEL NAMESPACES
    ▸ IPC - interprocess communication
    ▸ PID - Processos
    ▸ NET- rede
    ▸ UTS - Unix timesharing system, recursos do kernel
    ▸ USER - usuários

    View Slide

  35. 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

    View Slide

  36. CGROUPS
    (O QUE O PROCESSO PODE USAR)

    View Slide

  37. COMO FUNCIONA?
    CGROUPS
    ▸ CPU

    View Slide

  38. COMO FUNCIONA?
    CGROUPS
    ▸ CPU
    ▸ Memória

    View Slide

  39. COMO FUNCIONA?
    CGROUPS
    ▸ CPU
    ▸ Memória
    ▸ I/O em disco

    View Slide

  40. COMO FUNCIONA?
    CGROUPS
    ▸ CPU
    ▸ Memória
    ▸ I/O em disco
    ▸ Interface de rede

    View Slide

  41. COMO FUNCIONA?
    CGROUPS
    ▸ CPU
    ▸ Memória
    ▸ I/O em disco
    ▸ Interface de rede
    ▸ Hardwares periféricos (pen drive, camera, etc)

    View Slide

  42. DEMOS

    View Slide

  43. https://github.com/wsilva/container-from-scratch-demo

    View Slide

  44. LXC - Linux Containers

    View Slide

  45. VMS X CONTÊINERES

    View Slide

  46. SERVIDOR
    SERVIDOR
    HOST OS
    HOST OS
    CONTAINER ENGINE
    HYPERVISOR
    BINS/LIBS
    GUEST OS BINS/LIBS
    GUEST OS
    BINS/LIBS BINS/LIBS APP APP
    APP APP
    VM VM
    Container Container
    VMs x Contêineres

    View Slide

  47. SERVIDOR
    SERVIDOR
    DEBIAN LINUX
    DEBIAN LINUX
    DOCKER
    VIRTUALBOX
    BINS/LIBS
    CENTOS LINUX BINS/LIBS
    UBUNTU LINUX
    BINS/LIBS BINS/LIBS NGINX MYSQL
    NGINX MYSQL
    VM VM
    Container Container
    VMs x Contêineres

    View Slide

  48. EVOLUÇÃO

    View Slide

  49. EVOLUÇÃO
    EVOLUÇÃO
    ▸ Libvirt / LXC
    ▸ Libcontainer
    ▸ runC
    ▸ containerd

    View Slide

  50. ARQUITETURA

    View Slide

  51. 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

    View Slide

  52. WINDOWS VS
    OSX VS
    LINUX

    View Slide

  53. LINUX (DOCKER HOST)
    WINDOWS
    OSX
    VM LINUX (DOCKER HOST)
    DOCKER CLIENT
    DOCKER CLIENT
    VM LINUX (DOCKER HOST)
    DOCKER CLIENT
    DOCKER DAEMON
    DOCKER DAEMON
    DOCKER DAEMON
    CONTÊINERES LINUX

    View Slide

  54. WINDOWS (DOCKER HOST) LINUX
    OSX
    VM WINDOWS (DOCKER HOST)
    DOCKER CLIENT
    DOCKER CLIENT DOCKER CLIENT
    DOCKER DAEMON DOCKER DAEMON
    DOCKER DAEMON
    CONTÊINERES WINDOWS
    VM WINDOWS (DOCKER HOST)

    View Slide

  55. IMAGENS

    View Slide

  56. View Slide

  57. View Slide

  58. View Slide

  59. View Slide

  60. COMANDOS DE APOIO

    View Slide

  61. COMANDOS DE APOIO
    HELP
    $ docker -h
    $ docker --help
    $ docker help

    View Slide

  62. COMANDOS DE APOIO
    VERSÃO
    $ docker -v
    $ docker --version
    $ docker version

    View Slide

  63. COMANDOS DE APOIO
    INFORMAÇÕES DO SISTEMA
    $ docker info

    View Slide

  64. PRIMEIROS CONTÊINERES

    View Slide

  65. HELLO WORLD
    $ docker run hello-world

    View Slide

  66. COWSAY
    $ docker run hello-world

    $ docker run docker/
    whalesay cowsay "Olaaaa"

    View Slide

  67. TRABALHANDO COM IMAGENS

    View Slide

  68. TRABALHANDO COM IMAGENS
    LISTANDO IMAGENS
    $ docker images

    View Slide

  69. TRABALHANDO COM IMAGENS
    BUSCANDO IMAGENS
    $ docker search apache

    View Slide

  70. TRABALHANDO COM IMAGENS
    BAIXANDO IMAGENS
    $ docker pull nginx

    View Slide

  71. TRABALHANDO COM IMAGENS
    CRIANDO IMAGEM A PARTIR DE CONTÊINER
    $ docker commit
    container_name
    ou

    $ docker commit
    1005692cf261

    View Slide

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


    Obs: o ponto (.) é o path onde está
    o Dockerfile

    View Slide

  73. TRABALHANDO COM IMAGENS
    EXEMPLO DE DOCKERFILE
    FROM nginx:latest

    MANTAINER wsilva
    RUN echo "Ola" | tee /usr/
    share/nginx/html/demo.html

    View Slide

  74. TRABALHANDO COM IMAGENS
    TAG DE IMAGENS
    $ docker tag nginx:latest
    wfsilva/nginx:latest
    ou
    $ docker tag c54a2cc56cbb
    wfsilva/nginx

    View Slide

  75. TRABALHANDO COM IMAGENS
    ENVIANDO IMAGENS
    $ docker push wfsilva/
    nginx

    View Slide

  76. TRABALHANDO COM IMAGENS
    IMAGENS EM ARQUIVOS
    $ docker save hello-world
    --output hello-world.tar

    $ docker load --input
    hello-world.tar

    View Slide

  77. TRABALHANDO COM IMAGENS
    CAMADAS DE UMA IMAGEM
    $ docker history hello-
    world

    View Slide

  78. TRABALHANDO COM IMAGENS
    REMOVENDO IMAGENS
    $ docker rmi hello-world
    ou

    $ docker rmi c54a2cc56cbb

    View Slide

  79. RODANDO CONTÊINERES

    View Slide

  80. RODANDO CONTÊINERES
    COMO RODAR
    $ docker run [opções]
    nome-ou-id-da-imagem
    [comandos e ou argumentos]

    View Slide

  81. LISTANDO CONTÊINERES

    View Slide

  82. LISTANDO CONTÊINERES
    COMANDO MAIS UTILIZADO
    $ docker ps

    ou

    $ docker ps -a

    para listar inclusive os
    parados

    View Slide

  83. REMOVENDO CONTÊINERES

    View Slide

  84. REMOVENDO CONTÊINERES
    REMOVENDO CONTÊINERES
    $ docker rm

    nome-ou-id-do-contêiner

    View Slide

  85. MANEIRAS DE RODAR

    View Slide

  86. MANEIRAS DE RODAR
    DETACHED
    $ docker run --detach \
    debian sleep infinity
    $ docker run -d debian \
    sleep infinity

    View Slide

  87. MANEIRAS DE RODAR
    INTERATIVA COM TERMINAL
    $ docker run \
    --interactive \
    --tty \
    debian \
    /bin/bash

    View Slide

  88. MANEIRAS DE RODAR
    INTERATIVA COM TERMINAL
    $ docker run -i -t \

    debian /bin/bash

    View Slide

  89. MANEIRAS DE RODAR
    INTERATIVA COM TERMINAL
    $ docker run -i -t \

    debian /bin/bash
    $ docker run -it \

    debian /bin/bash

    View Slide

  90. MANEIRAS DE RODAR
    INTERATIVA (UNIX PIPELINE)
    $ echo "Ola" | docker run
    -i debian cat

    View Slide

  91. PORTAS

    View Slide

  92. PORTAS
    EXPONDO PORTAS
    $ docker run -d \

    --publish 80 \

    nginx

    ou

    $ docker run -d \

    —publish-all \

    nginx

    View Slide

  93. PORTAS
    MAPEANDO PORTAS
    $ docker run -d \

    --publish 8080:80 \

    tutum/hello-world


    View Slide

  94. PORTAS
    LISTANDO AS PORTAS DE UM CONTÊINER
    $ docker port container-
    name

    View Slide

  95. VOLUMES

    View Slide

  96. VOLUMES
    CRIANDO VOLUME
    $ docker volume create \

    --name dados

    View Slide

  97. VOLUMES
    LISTANDO VOLUMES
    $ docker volume ls

    View Slide

  98. VOLUMES
    USANDO UM VOLUME CRIADO
    $ docker run -it \

    --volume dados:/dados \

    alpine \

    /bin/sh


    View Slide

  99. VOLUMES
    MAPEANDO UMA PASTA DO HOST
    $ docker run -it \

    --volume /home/tom:/tom \

    alpine \

    /bin/sh


    View Slide

  100. VOLUMES
    REMOVENDO VOLUME
    $ docker volume rm dados

    View Slide

  101. ESTADOS DE UM CONTÊINER

    View Slide

  102. 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

    View Slide

  103. EXEMPLOS

    View Slide

  104. 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

    View Slide

  105. EXEMPLOS
    NGINX SERVER
    docker run -d \

    -p 80:80 \

    --volume "$(pwd):/usr/
    share/nginx/html" \
    nginx

    View Slide

  106. EXEMPLOS
    COMANDOS "DOCKERIZADOS"
    $ docker run -it \

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

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

    composer/composer \

    install

    View Slide

  107. EXEMPLOS
    APLICAÇÕES GUI
    ▸ Navegador Tor
    ▸ Eyes
    ▸ Spotify
    ▸ Sugestão: https://hub.docker.com/u/jess/

    View Slide

  108. EXEMPLOS
    DOCKER CRAFT
    docker run -d \
    -p 25565:25565 \
    -v /var/run/docker.sock:/var/run/
    docker.sock \
    wfsilva/dockercraft

    View Slide

  109. TO BE CONTINUED…
    MAIS SOBRE DOCKER

    View Slide

  110. TO BE CONTINUED…
    PRÓXIMOS PASSOS
    ▸ docker-compose
    ▸ docker-machine
    ▸ docker-swarm
    ▸ kubernetes
    ▸ monitoring

    View Slide

  111. TO BE CONTINUED…
    MAIS SOBRE DOCKER
    ▸ https://docs.docker.com
    ▸ https://telegram.me/dockerbr
    ▸ http://docker-br.herokuapp.com
    ▸ http://bit.ly/curso-docker

    View Slide