Docker na prática!

Helder Traci

  • Formação acadêmica
    • Técnico em Informática - ETEC
    • Sistemas de Informação - ITE
    • Engenharia de Software - FIB
  • Experiência
    • Desenvolvedor Web - Lecom
    • Desenvolvedor Web - Finch Soluções

O que são containers?

O que são containers?

  • Consistência de ambiente
    • Portabilidade e Confiabilidade
  • Eficiência operacional
    • Melhor aproveitamento de recursos

O que são containers?

  • Produtividade do desenvolvedor
    • Remove dependência e conflitos entre serviços
  • Controle de versões
    • Do código e das dependências
    • Downgrade com facilidade

O que é?

  • Disponibilize mais software, com maior rapidez
    • 7 vezes mais deploys
  • Transfira aplicações sem problemas

O que é?

  • Melhore a produtividade do desenvolvedor
    • Configuração de novos ambientes
  • Padronize operações de aplicação

O que é?

Curiosidades e histórico

  • Solomon Hykes começou dentro da dotCloud
  • Lançado como projeto open source em Março 2013
  • Março 2014 migrou de LXC para libcontainer própria
  • Outubro 2015 25,600 estrelas e 1,100 contribuidores
  • Maio 2016 o time cresceu Cisco, Google, Huawei, IBM, Microsoft, e Red Hat
  • Janeiro 2017 perfis no linkedin com Docker cresceram 160%

Curiosidades e histórico

  • Grandes empresas continuam adotando

Fonte: datadoghq

Curiosidades e histórico

  • 15% dos hosts rodando docker

Fonte: datadoghq

Curiosidades e histórico

Tipos de virtualização

  • Full virtualization
  • Paravirtualization
  • OS Level Virtualization
  • OS Level Virtualization

Tipos de virtualização

Containers

X VMs

Containers X VMs

Container

VM

Escalabilidade horizontal

X

vertical

Horizontal X vertical

Docker linha de comando

$ docker images // Mostra dados das imagens baixadas

$ docker pull ubuntu // Baixa a imagem pelo nome indicado

$ docker rmi ubuntu // Exclui a imagem pelo nome indicado (ou ID)

$ docker run ubuntu // Cria um container com a imagem indicada

$ docker run -it ubuntu /bin/bash // Cria um container e já entra no bash

$ docker run -d --name meu_ubuntu ubuntu // Cria um container com nome (background)

$ docker exec -it meu_ubuntu /bin/bash // Executa um comando no container

$ docker ps // Mostra dados dos containers rodando

$ docker ps -a // Mostra dados de todos os containers

$ docker rm meu_ubuntu // Exclui o container

$ docker stats meu_ubuntu // Mostra dados container (CPU, MEM, NET)

$ docker inspect meu_ubuntu // Mostra todos os dados sobre o container

Docker linha de comando

Dockerfile

FROM debian:jessie

ENV appDir /var/www/app/current
ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 6.0.0
ENV NODE_PATH $NVM_DIR/versions/node/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

RUN apt-get update && apt-get install -y
RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.26.0/install.sh | bash \
    && source $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default

RUN mkdir -p /var/www/app/current
WORKDIR ${appDir}

ADD package.json ./
RUN npm i --production && npm i -g pm2
ADD . /var/www/app/current

EXPOSE 4500
CMD ["pm2", "start", "processes.json", "--no-daemon", "--node-args"]

Dockerfile

Dockercompose

web:
  build: ./app
  ports:
    - "3030:3000"
  links:
    - "db:redis"
  command: nodemon -L app/bin/www

nginx:
  restart: always
  build: ./nginx/
  ports:
    - "80:80"
  links:
    - "web:web"

db:
  image: redis

Dockercompose

Prática!

Dúvidas?

Obrigado!

https://helderdiin.github.io/

https://github.com/helderdiin

@Helderdiin

Made with Slides.com