Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Linux contêineres na unha (Gophercon Brasil 2017)

Linux contêineres na unha (Gophercon Brasil 2017)

Palestra apresentada dia 17 de novembro de 2017 no Gophercon Brasil em Florianópolis. Mostramos um pouco do que é Docker, como que funcionar o isolamento dos processos e os recursos utilizados para o tal. No final fizemos uma demonstração disponível em (https://github.com/wsilva/container-from-scratch-demo)

Wellington F. Silva

November 17, 2017
Tweet

More Decks by Wellington F. Silva

Other Decks in Technology

Transcript

  1. Linux Contêineres na
    unha

    View Slide

  2. Wellington F. Silva
    contato:
    @_wsilva
    nicks:
    wsilva, boina, tom, fisi
    roles:
    pai, tec. telecom,
    programador, sysadmin,
    instrutor, escritor, docker
    community leader

    View Slide

  3. Agenda
    • Disclaimers
    • Que é Docker
    • O que são contêineres Linux
    • O que são Kernel Namespaces
    • O que são CGroups
    • O que são Rootfs
    • Demos

    View Slide

  4. Disclaimer 1
    Apesar de acompanhar há quase 2 anos não
    sou especialista em Golang, fiz poucas coisas e
    por conta própria.

    View Slide

  5. Disclaimer 2
    Palestra inspirada nas talks da Liz Rice
    (@lizrice) e no artigo* de Julian Friedman
    (@doctor_julz)
    http://bit.ly/container-golang *

    View Slide

  6. Julian Friedman
    • Engenheiro líder do Garden
    (tecnologia de contêineres da
    Cloud Foundry's)
    • Trabalha para IBM
    • Defensor do Open Source

    View Slide

  7. Liz Rice
    • Especialista em segurança de
    contêineres na Aqua Security
    • Evangelista Go Lang
    • Ótima ciclista

    View Slide

  8. O que é DOCKER?

    View Slide

  9. View Slide

  10. View Slide

  11. O que é DOCKER?

    View Slide

  12. “Ferramenta para
    virtualização no nível do
    Sistema Operacional.”

    View Slide

  13. –Wellington F. Silva
    “Ferramenta para
    virtualização no nível do
    Sistema Operacional.”

    View Slide

  14. Tipos de
    Virtualização

    View Slide

  15. Tipos de Virtualização
    • Full Virtualization

    View Slide

  16. Tipos de Virtualização
    • Full Virtualization
    • Partial Virtualization

    View Slide

  17. Tipos de Virtualização
    • Full Virtualization
    • Partial Virtualization
    • Paravirtualization

    View Slide

  18. Tipos de Virtualização
    • Full Virtualization
    • Partial Virtualization
    • Paravirtualization
    • OS Level Virtualization

    View Slide

  19. Tipos de Virtualização
    • Full Virtualization
    • Partial Virtualization
    • Paravirtualization
    • OS Level Virtualization
    Docker

    View Slide

  20. Docker NÃO é VM

    View Slide

  21. Como Funciona?

    View Slide

  22. PROCESSOS
    +
    KERNEL NAMESPACES
    +
    CGROUPS
    +
    ROOTFS

    View Slide

  23. PROCESSOS
    Aqueles que matamos com kill -9

    View Slide

  24. Processos
    • Processo Linux com ID atribuído (PID)

    View Slide

  25. Processos
    • Processo Linux com ID atribuído (PID)
    • Podem ser listados (com ps) dentro do
    contêiner ou fora (no host)

    View Slide

  26. Processos
    • Processo Linux com ID atribuído (PID)
    • Podem ser listados (com ps) dentro do
    contêiner ou fora, no host
    • Dentro do contêiner o PID=1, fora (no host) vai
    ter valor alto

    View Slide

  27. KERNEL
    NAMESPACES
    Tudo aquilo que o processo pode "ver"

    View Slide

  28. Kernel Namespaces
    • IPC - Interprocess communication

    View Slide

  29. Kernel Namespaces
    • IPC - Interprocess communication
    • PID - Processos

    View Slide

  30. Kernel Namespaces
    • IPC - Interprocess communication
    • PID - Processos
    • NET- Rede

    View Slide

  31. Kernel Namespaces
    • IPC - Interprocess communication
    • PID - Processos
    • NET- Rede
    • UTS - Unix timesharing system

    View Slide

  32. Kernel Namespaces
    • IPC - interprocess communication
    • PID - Processos
    • NET- rede
    • UTS - Unix timesharing system
    • USER - Usuários e grupos

    View Slide

  33. Kernel Namespaces
    • IPC - interprocess communication
    • PID - Processos
    • NET- rede
    • UTS - Unix timesharing system
    • USER - Usuários e grupos
    • MNT - Pontos de montagem

    View Slide

  34. CGROUPS
    Tudo aquilo que o processo pode "usar"

    View Slide

  35. CGroups
    • CPU

    View Slide

  36. CGroups
    • CPU
    • Memória

    View Slide

  37. CGroups
    • CPU
    • Memória
    • I/O em disco

    View Slide

  38. CGroups
    • CPU
    • Memória
    • I/O em disco
    • Interface de rede

    View Slide

  39. CGroups
    • CPU
    • Memória
    • I/O em disco
    • Interface de rede
    • Hardwares periféricos 

    (pen drives, cameras, etc)

    View Slide

  40. ROOTFS
    Aquilo que o processo vai rodar

    View Slide

  41. Rootfs
    • Filesystem é uma hierarquia de diretórios

    View Slide

  42. Rootfs
    • Filesystem é uma hierarquia de diretórios
    • Rootfs é o filesystem base onde os demais
    sistemas de arquivos são montados

    View Slide

  43. Rootfs
    • Filesystem é uma hierarquia de diretórios
    • Rootfs é o filesystem base onde os demais
    sistemas de arquivos são montados
    • Em linhas gerais é o / (barra) de uma
    distribuição Linux

    View Slide

  44. Resumo
    • Processo (é o que roda)
    • CGroups e Namespaces (Como ele roda)
    • Rootfs (o que ele roda)

    View Slide

  45. –Linus Torvalds
    “Talk is cheap. Show me
    the code.”

    View Slide

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

    View Slide

  47. + Sobre Docker
    • Curso Docker: 

    http://bit.ly/curso-docker
    • Telegram: 

    http://t.me/dockerbr
    • Slacks:

    http://bit.ly/docker-slack

    http://dockr.ly/community
    • Meetup:

    http://bit.ly/meetup-
    docker-sp

    View Slide

  48. + Sobre Go
    • Tutoriais: 

    https://github.com/crgimenes/Go-Hands-On/

    https://tour.golang.org

    • Telegrams: 

    http://t.me/go_br

    http://t.me/GopheliaCoding

    • Slack:

    https://invite.slack.golangbridge.org


    View Slide