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

Desmistificação do Docker

C091e4c500d0da8ab9d61d5193ca2ba7?s=47 Diogo Leal
November 28, 2016

Desmistificação do Docker

C091e4c500d0da8ab9d61d5193ca2ba7?s=128

Diogo Leal

November 28, 2016
Tweet

Transcript

  1. Desmistificação do Docker Diogo Leal

  2. Diogo Leal Works @ Bemobi Podcaster @ ngcast Maintainer @

    Void Linux Dad @ Alice & Italo Love @ Renata,Manu e Ana, Vasco da Gama, Cerveja, Games Antigos E-mail: diogo@diogoleal.com Twitter e Github: diogoleal
  3. O que é o Docker? Criado em 2013 por Solomon

    Hykes em um projeto interno na dotCloud. É uma tecnologia de código aberto que permite criar, executar, testar e implantar aplicações distribuídas dentro de contêineres de software.
  4. None
  5. None
  6. Instalação Está presente em praticamente todas as distribuições Linux. Para

    Windows e Mac: https://www.docker.com/products/docker- toolbox
  7. Vantagens • Reaproveitamento • Escalabilidade • Ligeirinho

  8. # No início -chroot ~1982 -FreeBSD jails ~2000 -LXC -

    2008 -OpenVZ - 2005 -Solaris Containers - 2004 -lmctfy - 2013
  9. Conceitos

  10. Imagens • Template read only • Contém os arquivos da

    sua aplicação • Criadas por Commit ou Dockerfile
  11. Containers Criado a partir 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
  12. Hello World!

  13. docker run ubuntu /bin/echo "Hello World!" Unable to find image

    'ubuntu:latest' locally latest: Pulling from library/ubuntu 6bbedd9b76a4: Downloading [=================> ] 17.27 MB/49.87 MB fc19d60a83f1: Download complete de413bb911fd: Download complete 2879a7ad3144: Download complete 668604fde02e: Download complete
  14. Criando intimidade com o container docker run -ti ubuntu /bin/bash

    <dentro do container> apt-get update && apt-get install nginx nginx -v /etc/init.d/nginx start </dentro do container>
  15. Dockerfile É um arquivo de texto que possui as rotinas

    de construção de uma imagem
  16. Dockerfile FROM ubuntu RUN apt-get update RUN apt-get install -y

    nginx RUN echo "daemon off;" >> /etc/nginx/nginx.conf EXPOSE 80 CMD service nginx start
  17. Dockerfile FROM openjdk:7 COPY . /Appserver/ WORKDIR /APPserver RUN make

    EXPOSE 9090 ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64 CMD [""]
  18. Compilando a imagem docker build -t app. docker run --name

    lab1 -p 9090:9090 -d -t app docker exec -ti CONTAINER /bin/sh
  19. FROM COPY /ADD WORKDIR RUN ENV EXPOSE VOLUME CMD /ENTRYPOINT

    Mais opções para Dockerfile
  20. Docker Compose Facilita a criação e uso de aplicações multi-

    container no Docker
  21. $ docker-compose.yml version: '2' services: db: image: mysql:5.7 volumes: -

    /home/diogo/mysql:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD:senha MYSQL_DATABASE:banco MYSQL_USER: usuario MYSQL_PASSWORD: senha
  22. web: build: . env_file: .env command: make volumes: - .:/app

    ports: - "8000:8000" extra_hosts: - “dominio.com.br:127.0.0.1:8000" depends_on: - db
  23. docker-compose up docker-compose build docker-compose create web

  24. Alguns comandos

  25. # listar apenas containers que estão em execução docker ps

    # listar todos os containers docker ps -a
  26. # Informações de uso docker stats <container> # Informações docker

    inspect container|image # Visualizar logs docker logs -f container
  27. # Salva as alterações feitas na imagem docker commit container

    imagem # exportar a imagem docker save --output busyboy.tar busybox docker save busybox > busybox.tar
  28. Imagens # Imagens disponíveis docker images # procurar uma imagem

    docker search image docker pull image # Remover uma imagem docker rm image # Remover uma imagem docker rmi imagem # Remove todos os containers docker rm $(docker ps -a -q) # Remove todas as imagens docker rmi $(docker images -q)
  29. Docker hub docker search docker login docker commit container usuario/container

    docker push
  30. Olhando por debaixo dos panos

  31. Processos

  32. docker pull microsoft/mssql-server-linux docker run -e 'ACCEPT_EULA=Y' --env 'SA_PASSWORD=123mudar!' -p

    1433:1433 -d microsoft/mssql-server-linux
  33. ps aux |grep sql root 23787 0.5 0.0 4476 848

    ? Ss 22:18 0:00 /bin/sh -c /opt/mssql/bin/sqlservr.sh root 23795 0.0 0.0 18024 2872 ? S 22:18 0:00 /bin/bash /opt/mssql/bin/sqlservr.sh root 23869 62.2 8.1 921592 304236 ? Sl 22:18 0:02 /opt/mssql/bin/sqlservr --setup ls /opt google SpiderOakONE
  34. Filesystem e Volumes

  35. docker run ubuntu /bin/echo "Hello World!" Unable to find image

    'ubuntu:latest' locally latest: Pulling from library/ubuntu 6bbedd9b76a4: Downloading [=================> ] 17.27 MB/49.87 MB fc19d60a83f1: Download complete de413bb911fd: Download complete 2879a7ad3144: Download complete 668604fde02e: Download complete
  36. None
  37. ... VOLUME [“diretorio”] … docker run -it --volumes-from e1c9c12c71ed busybox

  38. None
  39. docker info Containers: 63 Running: 1 Paused: 0 Stopped: 62

    Images: 85 Server Version: 1.10.3 Storage Driver: devicemapper Pool Name: docker-8:2-525048-pool Pool Blocksize: 65.54 kB Base Device Size: 10.74 GB Backing Filesystem: xfs
  40. None
  41. None
  42. Redes

  43. docker network ls NETWORK ID NAME DRIVER 30c6955aca56 my-bridge-network bridge

    79816eecd6f6 bridge bridge cbd7120efabd docker_default bridge 909fe1280af9 none null b37aadae9e20 host host
  44. docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default

    link/ether 02:42:6e:e0:83:16 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:6eff:fee0:8316/64 scope link valid_lft forever preferred_lft forever veth10dc201@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 3a:d2:8f:a9:c5:fd brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::38d2:8fff:fea9:c5fd/64 scope link valid_lft forever preferred_lft forever vethbc4955e@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether e2:35:ce:a0:ff:ba brd ff:ff:ff:ff:ff:ff link-netnsid 1 inet6 fe80::e035:ceff:fea0:ffba/64 scope link valid_lft forever preferred_lft forever
  45. docker network create --driver=bridge --subnet=172.28.0.0/16 --ip- range=172.28.5.0/24 --gateway=172.28.5.254 rede0

  46. docker network inspect rede0 [ { "Name": "rede0", "Id": "d561ff68cee7626cbc2ce5522584b6b7511041359427260569c76179a33c0dc2",

    "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.28.0.0/16", "IPRange": "172.28.5.0/24", "Gateway": "172.28.5.254" } ] }, "Containers": {}, "Options": {} } ]
  47. docker run --net=rede0 -itd --name=rede busybox

  48. Gerenciamento de recursos

  49. docker run -d -p 80:80 -c 512 -m 1024m busybox

  50. Outras coisas bem legais ...

  51. Docker machine – Cria e gerencia containers descentralizado Swarm –

    Criação de clusters de Docker Docker na AWS
  52. Docker ao invés do gerenciador de pacotes...

  53. docker pull rainu/chrome xhost + docker run -e DISPLAY=$DISPLAY -v

    /tmp/.X11- unix:/tmp/.X11-unix --privileged chromium
  54. docker pull julia docker run -it julia julia

  55. # Dicas Não use containers da mesma forma que usaria

    uma máquina virtual; Não use SSH dentro dos containers Minimalismo é essencial Não tenha apego a nada Uso ZSH com oh-my-zsh com o plugin do docker habilitado
  56. Links http://play-with-docker.com/ http://veggiemonk.github.io/awesome-docker/

  57. Obrigado!