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

Docker Hands-On - TcheLinux Santa Maria

Docker Hands-On - TcheLinux Santa Maria

Tonin Bolzan

November 10, 2018
Tweet

More Decks by Tonin Bolzan

Other Decks in Programming

Transcript

  1. TONIN R. BOLZAN Software Engineer ❤ DevOps CTO na Metrosoft

    S/A - Santa Maria/RS 10 anos de experiência https://bolzan.io
  2. METROSOFT S/A Respiramos Software Livre Especialista em Software para Saúde

    SUS / Privado Milhares de cidadãos atendidos diariamente. Operacional e Gestão
  3. Containers não são VMs » Não são virtualizados (hypervisor) »

    São leves e rápidos » Normalmente são efêmeros Mas são parecidos » Empacotamento e “Isolamento” » Um S/O dentro de outro S/O
  4. Mas por que eu preciso disso? Qualquer que seja VMs

    ou Container Não é mais fácil “só” instalar o programa » WampServer » MAMP » LAMP / LEMP
  5. Não é mais fácil instalar o programa? NÃO » Você

    “suja” todo o seu sistema » Fica limitado a uma versão do software » Cada S/O tem sua forma de instalação » Difícil de reproduzir
  6. » Segurança » Independência » Empacotamento » Isolamento » Limitação

    de recursos » Reprodutibilidade » Agilidade VMs e Containers == Benefícios Porém, containers: » São leves, rápidos e pequenos
  7. Host Linux Windows Mac OS x FreeBSD Docker LXC rkt

    OpenVZ Swarm Kubernetes Mesos OpenShift Container Orchestration root@pc:~# apt install docker.io docker-compose
  8. » Docker CLI » Executável de linha de comando »

    Docker Engine » Daemon que roda como serviço » Container runtime » Responsável por “rodar” o container » Container image » Formato de armazenamento em camadas » Repositório » https://hub.docker.com Conceitos » Dockerfile » Receita de bolo para construção de uma imagem » Volumes » Camada de persistência para conteúdo dinâmico » Docker Compose » YML para descrição de vários containers Library Software Symfony PHP 7.2
  9. CLI - Faz download e roda uma aplicação docker $

    docker run --rm -ti debian bash $ docker run --rm metrosoftsa/php-dev:latest php -v docker run :> Manda rodar o container --rm :> Limpa tudo depois de rodar -t :> tty -i :> interactive Container :> <uri>/<nome>/<imagem>:<tag> $ docker version $ docker login $ docker ps $ docker images $ docker volume ls $ docker build $ docker push $ docker pull $ docker run $ docker system prune --volumes -af https://docs.docker.com/engine/reference/commandline/docker
  10. Dockerfile FROM metrosoftsa/php-dev:latest ENV APP_ENV development COPY . /srv RUN

    composer install -d /srv --no-dev --no-ansi --no-progress CMD ["php", "/srv/index.php"] Esses arquivos são receitas para uma imagem “FROM” estende uma imagem anterior
  11. build - Roda e empacota a partir das definições do

    Dockerfile $ docker build -t tonin/php:latest -f Dockerfile . $ docker run --rm tonin/php:latest push - Envia para o repositório docker hub (padrão) $ docker push tonin/php:latest $ docker pull tonin/php:latest save & load - Realiza o dump e restore da imagem OCI $ docker save -o php.tar tonin/php:latest $ docker load -i php.tar
  12. $ docker-compose version $ docker-compose build $ docker-compose pull $

    docker-compose up -d $ docker-compose down Docker Compose - Arquivo YML e CLI version: "3" services: redis: image: redis:latest networks: - default web: build: . ports: - 8080:80 volumes: - ./:/srv:rw - log:/var/log:rw environment: - APP_DEBUG: true depends_on: - redis networks: - default volumes: log: {} networks: default: Versão de ref. do yml Descrição dos serviços Nome do container 1 Imagem de repositório: tag Definição de rede - alias de rede Nome do container 2 Local de build do Dockerfile Portas a serem mapeadas - <host>:<container> Volumes a serem mapeados - <host>:<container>:rw - <alias>:<container>:rw Variaveis de ambiente - Nome da variavel: <valor> Prioridade de inicialização - Nome do container Definição de rede: - alias de rede Descrição dos volumes Nome do volume referenciado Descrição das redes Nome da rede: configuração
  13. docker run -d … docker-compose up -d docker stack deploy

    -c stack.yml app ➢ docker service update Executa os containers utilizando a ferramenta mais adequada para cada situação. pull || load Carrega a imagem em outro computador ou servidor. Dockerfile && build Estende um imagem base do repositório e inclui suas peculiaridades e gera sua própria imagem. docker-compose Usado em desenvolvimento e testes. push || save Gerar a imagem final e envia para um repositório ou servidor. Fluxo de Trabalho