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

Desmistificação do Docker

Diogo Leal
November 28, 2016

Desmistificação do Docker

Diogo Leal

November 28, 2016
Tweet

More Decks by Diogo Leal

Other Decks in Technology

Transcript

  1. 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: [email protected] Twitter e Github: diogoleal
  2. 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.
  3. Instalação Está presente em praticamente todas as distribuições Linux. Para

    Windows e Mac: https://www.docker.com/products/docker- toolbox
  4. # No início -chroot ~1982 -FreeBSD jails ~2000 -LXC -

    2008 -OpenVZ - 2005 -Solaris Containers - 2004 -lmctfy - 2013
  5. Imagens • Template read only • Contém os arquivos da

    sua aplicação • Criadas por Commit ou Dockerfile
  6. 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
  7. 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
  8. 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>
  9. 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
  10. Dockerfile FROM openjdk:7 COPY . /Appserver/ WORKDIR /APPserver RUN make

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

    lab1 -p 9090:9090 -d -t app docker exec -ti CONTAINER /bin/sh
  12. $ 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
  13. 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
  14. # listar apenas containers que estão em execução docker ps

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

    inspect container|image # Visualizar logs docker logs -f container
  16. # 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
  17. 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)
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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": {} } ]
  24. Docker machine – Cria e gerencia containers descentralizado Swarm –

    Criação de clusters de Docker Docker na AWS
  25. docker pull rainu/chrome xhost + docker run -e DISPLAY=$DISPLAY -v

    /tmp/.X11- unix:/tmp/.X11-unix --privileged chromium
  26. # 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