Docker
 

Desenvolvimento local reproduzível

O que é Docker

 

  • "Uma ferramenta para correr aplicações em ambientes isolados" - https://www.youtube.com/watch?v=YFl2mCHdv24
  • ambientes isolados são instâncias de Linux com conteúdo previamente instalado, separados do sistema real

"We help developers and development teams build and ship apps. -- docker.com

Que posso fazer com docker

  • correr aplicações reais em ambientes adequados ao seu funcionamento
    • sem instalação
    • dependências certas
    • não afeta sistema real
    • ex.: utilitários, servidores
  • sandboxing, experimentação
  • desenvolvimento

Só umas "versõezinhas" diferentes!

Porquê Docker?

  • ajuda criadores a se focarem na criação, não na montagem
  • replicação/"mesmo ambiente" montagem local em qualquer máquina compatível com docker
  • esquema "universal" para montar projetos
  • mais simples e versátil que máquina virtual
  • ideal para sandboxing
    • desenvolvimento, experimentação, suporte...
  • consolidação no "mercado"

Porque (não) Docker?

  • consumo de espaço no disco e memória, pode requerer limpeza
  • montagem personalizada requer conhecimento
  • easy to use, hard to master

Bases do Docker

  • Aplicação (e complementos) correm em container
  • container - instância "ativa" de uma image
    • cada container corre dentro do seu próprio ambiente
    • é com eles que interagimos
    • acesso a ficheiros através de volumes
    • cada container tem IPs próprios, que podem ser mapeados
    • comando-chave: 'docker run'

Linux com:

  PHP

  pasta "app"

  10 ficheiros
  2 fotos

container e image
processo e programa

Bases do Docker

 

 

image - "cópia de um sistema configurado de certo modo" (snapshot)

​serve de "esqueleto" para criar "containers"

tem sistema operativo, software, e ficheiros (como código)

Linux com:

  PHP

  pasta "app"

  ficheiros  websites

container e image
processo e programa

o meu linux

base para

 o meu linux  para wordpress

 o meu linux  para laravel

 o meu linux  para wordpress

 o meu linux  para wordpress

 o meu linux  para wordpress

 o meu linux  para wordpress

 o meu linux  para prestashop

independentes (não se misturam)

não "estragam" sistema real

podem "comunicar"

Bases do Docker

 

 

volume - "portal" de partilha de ficheiros entre contentores e "sistema real"

- ideal para ficheiros editados frequentemente

  - ex.: ficheiros de website

 o meu linux  para wordpress

 o meu linux  para wordpress

 o meu linux  para wordpress

 o meu linux  para wordpress

 o meu linux  para wordpress

sistema real

lib

home

bin

projeto

etc

root

Docs

projeto

Windows

Imagens

Música

Sei lá

partilhados

index.html

gato.png

Bases do Docker

 

 

network?

Como usar o Docker para...

  • correr um contentor?
  • criar volumes?
  • conectar contentores e volumes?
  • criar uma imagem própria?
    • ​vamos usar imagens pré-feitas

Como usar o Docker para...

  • correr um contentor?
  • criar volumes?
  • conectar contentores e volumes?
  • criar uma imagem própria?
    • ​vamos usar imagens pré-feitas

Correr um contentor

Como usar o Docker para... 

Linux com:

  PHP

  pasta "app"

  ficheiros  websites

o meu linux

Dockerfile - criar imagem

 

  • que comandos corre?
  • que instala?
  • que cria?
  • que ficheiros move?
  • de que imagem deriva?

Criar uma imagem

Boas práticas e notas importantes de docker

  • mapear portas quando necessário
  • atribuir nomes a contentores ajuda a identificá-los
    • saber o que apagar, o que manter
  • apagar regularmente conteúdo desnecessário
  • interfaces gráficas requerem cuidado especial em Mac e Windows
    • Running GUI's with Docker on OS X
  • se é uma experiência temporária, corram "docker run" com --rm

Comandos Docker

  • docker run
  • docker exec
  • docker ps
  • docker volume
    • docker volume create
    • docker volume prune
  • avançado - docker inspect

Comandos docker

Docker Run

Cria e arranca um contentor com base numa imagem

Parâmetro Descrição
--rm apaga contentor, depois de correr
-e define variáveis de ambiente
-it

Exercício prático

Criar servidor php em docker

Exercícios com Docker

HELLO WORLD EM PHP

  1. criar ficheiro index.php que imprima "hello " e o teu nome na tela
  2. criar um contentor com 
  3. apagar contentor (para não "ficar perdido")
docker run -d -p 80:80 --name apache-php-test -v "$PWD":/var/www/html php:7.2-apache  

Exercícios com Docker

HELLO WORLD EM PHP

mas com Dockerfile

docker build -t php-apache-custom ./
docker run -d -p 80:80 --name apache-php-test -v "$PWD":/var/www/html php-apache-custom
FROM php:7.2-apache
COPY ./ /var/www/html
EXPOSE 80

Dockerfile

Vantagem?
Personalização

Exercícios com Docker

HELLO WORLD EM PHP

mas com docker-compose

docker-compose up
version: '2'
services:
  php-apache-custom:
    image: php:7.2-apache
    ports:
      - "80:80"
    volumes:
     - ./:/var/www/html

docker-compose.yml

MUITO mais simples!

Porquê Docker-compose?

  • facilita utilização do docker e configuração do projeto
  • possibilita montagem do projeto com docker, e com um só comando

Exercícios com Docker

HELLO WORLD EM PHP

mas com docker-compose E Dockerfile

docker build -t php-apache-custom ./
docker-compose up
version: '2'
services:
  php-apache-custom:
    image: php-apache-custom
    ports:
      - "80:80"
    volumes:
     - ./:/var/www/html

docker-compose.yml

Simplicidade + Personalização

FROM php:7.2-apache
COPY ./ /var/www/html
EXPOSE 80

Dockerfile

Exercícios com Docker

HELLO WORLD EM PHP

mas com docker-compose E Dockerfile

(+ simples)

docker-compose up
version: '2'
services:
  php-apache-custom:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "80:80"
    volumes:
     - ./:/var/www/html

docker-compose.yml

AINDA MAIS
Simplicidade + Personalização

FROM php:7.2-apache
COPY ./ /var/www/html
EXPOSE 80

Dockerfile

mais experiências engraçados

Atividade

correr uma aplicação isolada em Docker com base:

  • numa imagem já existente
  • numa imagem própria (opcional)
Nome projeto
Instruções para correr
tecnologias usadas pelo projeto (não têm de ser todas)
Link projeto (dockerhub, github)

Ferramentas e Interfaces

Interfaces gráficas (GUI) alternativas à linha de comandos

Apps windows, linux, Mac OS

Plugins/Extensões

  • Docker para Visual Studio Code

Minecraft?!

Referências

Glossário

 

  • ambiente - condições do sistema isolado em que corre um contentor
  • (ambiente) desenvolvimento - réplica de um produto para experimentação e melhorias
  • (ambiente) produção - site ou produto servido aos clientes

Introdução ao Docker

By Miguel Costa

Introdução ao Docker

  • 634