SlideShare uma empresa Scribd logo
1 de 75
Baixar para ler offline
Rafael Chiavegatto
chiavegattor@gmail.com
rafael.chiavegatto@fpf.brV19.03.5-ce
Docker - Tutorial for beginners
Rafael Chiavegatto
Rafael Chiavegatto possui pós-graduação em Engenharia de
Software formado pela FUCAPI em 2013 e graduado em Sistema
de Informação pela Universidade Salgado de Oliveira /UNIVERSO-
JF. Possui mais de 8 anos de experiência na área de
desenvolvimento de software. Conhecimento e utilização em
práticas de desenvolvimento ágeis, automação de testes(Web/
Mobile), testes de performance, testes de segurança, ferramentas
para automação de builds, entrega contínua e cultura DEVOPS.
Contatos:
Blog : rafaelchiavegatto.com.br
E-mail: chiavegattor@gmail.com
Twiter: twitter.com/FaelChiavegatto
Linkedin: linkedin.com/in/rafael-chiavegatto-3a599326
• Docker - Visão Geral, Conceitos, Vantagens e Benefícios;
• Instalação;
• Pull e Push de imagens;
• Comandos básicos;
• Exportação e importação de imagens;
• Criação de imagens;
• Criação de volumes;
• Docker-Compose;
Agenda
Conceitos
O que é Docker?
É uma plataforma Open Source que
facilita a criação e administração de
ambientes isolados. . Ele possibilita o
empacotamento de uma aplicação ou
ambiente dentro de um container.
Máquina virtual x Containers
Fonte: https://www.docker.com/what-docker
Cada máquina virtual possui:
• A aplicação e suas dependências;
• Um sistema operacional;
• Usuários do sistema operacional.
Máquina virtual
• Containers são mais leves, já que não
precisam de um ambiente virtual
completo;
• O kernel do host proporciona
gerenciamento de memória, I/O, CPU,
etc;
• Inicialização pode levar poucos segundos.
Container
• Reprodutibilidade;
• Escalabilidade;
• Documentação de configuração;
• Rapidez.
Vantagens
Instalação docker - Ubuntu
https://docs.docker.com/install/
Conceitos Básicos
Ø Imagens;
• Containers;
• Dockerfiles.
• Constituem a base para criação
de containers Docker;
• São muito similares às imagens
de disco padrão de sistema
operacional.
Imagens Docker
Docker Hub
https://hub.docker.com/explore/
Vamos fazer o seguinte:
Abrir o terminal (ctrl + shift + t);
Digitar o comando:
docker image pull ubuntu
Executar o comando
docker images
OBS.: No Window iniciar o Docker e abrir o CMD.
Prática - Imagens Pull
• Importar uma imagem
docker image load --input tmp/nova_imagem.tar
Prática - Imagens Load
• Digitar o comando:
docker images
• Exportar a imagem:
docker image save nomeImagem --output
/tmp/ubuntu.tar
Prática - Imagens Save
• Digitar o comando:
docker images
• Remover uma imagem
docker image rm -f nomeDaImagem ou
idDaImagem
Prática - Imagens Remove
Conceitos Básicos
• Imagens;
Ø Containers;
• Dockerfiles.
Containers possuem:
• Isolamento de recursos, semelhantes
como máquinas virtuais;
• Abordagem de arquitetura diferente
que permite ser mais portátil e
eficiente;
• São executados como um processo
isolado;
Containers
• Execução controlada de CPU, RAM, I/O,
etc;
• Podem ser descartáveis ou persistentes;
• Não estão vinculados a qualquer
infraestrutura específica;
• Compartilham o kernel com outros
containers.
Containers
Instância de uma imagemFonte: https://blog.schoolofnet.com/2018/05/para-que-serve-o-docker/
Portátil e móvel
Independente do hardware.
• Vamos fazer o seguinte:
Abrir o terminal (ctrl + shift + t);
• Digitar o comando:
docker image pull ubuntu
• Executar o comando
docker container run -it ubuntu
• Verificar a versão e data da máquina:
• cat /etc/*-release
• date
Prática containers - Run -it
Pode ser executado em
background?
Sair do container (digitar no terminal exit)
• Executar o comando:
docker container run -d ubuntu
Prática - Containers Background
Como vejo meu container?
• Listar todos os containers:
docker container ps -a
docker container ps
docker container ps -q
Prática containers - Ps
Prática containers
O que aconteceu com o meu
container?
• Importar a imagem do apache ou realizar o
pull da imagem;
• Criar um container do apache
docker container run -d httpd:alpine
• Executar o comando:
docker container inspect idDoContainer
• Achar as seguintes informações:
• IP;
• Portas;
• Mac Address.
Prática - Containers Inspect
• Acessar o container:
docker container exec -it nomeDocontainer(ou
id) /bin/sh ou bash
• Verificar a versão e data do container:
• cat /etc/*-release
• date
Prática - Containers Exec
Acessamos nosso primeiro container
• Vamos agora parar um container
docker container stop nomeDoContainer(ou id)
• Vamos iniciar o container
docker container start nomeDoContainer(ou id)
Prática - Containers Start/Stop
• Remover um container
docker container rm -f nomeDoContainer (ou id)
Prática - Containers RM
• Melhorar o nome ao criar um container
docker container run -d - -name apache
httpd:alpine
• Executar o comando
docker container ps
Prática - Containers --name
• Remover todos os containers
docker container rm -f $(docker container ps -aq)
• Executar o comando para ver se existe containers
ativos:
docker container ps
• Executar o comando para listar todos os
containers
docker container ps -a
Prática - Containers Remove All
• Importar a imagem do Apache
• Criar o container
docker container run -d --name apache
-p 80:80 httpd:alpine
• Executar o comando para listar os containers
docker container ps
• Acessar o navegador na url:
http://localhost
Prática - Containers Binding Ports
• Criar o container
docker container run -d --name apache
-p 4000:80 httpd:alpine
• Executar o comando para listar os containers
docker container ps
• Acessar o navegador na url:
http://localhost:4000
Prática - Containers Binding Ports
• Um volume pode ser um diretório localizado
fora de um container;
• Podemos manipular dados no container, sem
alterar a imagem;
• Um volume pode ser compartilhado entre
vários containers;
• Toda alteração feita em um volume é de
forma direta.
Volumes
• Criar o volume:
docker run -d -p 80:80 -v static:/usr/local/apache2/htdocs/
httpd:alpine
• Executar o comando:
echo "Eu sei usar volume" > static/index.html
• Acessar o navegador
http://localhost
Prática - Containers Volumes
• Remover todos os containers:
docker container rm –f $(docker container ps -aq)
• Criar um container do ubuntu-unity-novnc :
docker container run -d -p 6080:6080 --name vnc -e
PASSWORD=123456 -e SUDO=yes chenjr0719/ubuntu-unity-novnc
• Acessar no navegador o endereço:
• http://localhost:6080/vnc.html;
• Acessar o VNC com a senha que criamos.
Prática – Containers Environment
• Copiando arquivos do container:
docker container cp
<nome_container>:/caminho/no/container /caminho_host
• Enviando arquivos do container:
docker container cp arquivo_host
<nome_container>:/caminho_container
Prática - Containers CP
• Remover todos os containers:
docker container rm –f $(docker container ps –aq)
• Criar um container do ubuntu-unity-novnc :
docker container run -d -p 6080:6080 --name vnc -e
PASSWORD=123456 -e SUDO=yes chenjr0719/ubuntu-unity-novnc
• Acessar no navegador o endereço:
• http://localhost:6080/vnc.html;
• Acessar o VNC com a senha que criamos;
• Criar uma pasta com seu nome no home do usuário.
• Executar o comando:
docker container cp vnc :/home/ubuntu/pastacriada .(local que
será salvo a pasta)
Prática – Containers CP
Conceitos Básicos
• Imagens;
• Containers;
Ø Dockerfiles.
• São scripts contendo comandos que
devem ser executados para formar
uma nova imagem;
• Cada comando executado gera uma
nova camada;
• Quando um Dockerfile conclui a
execução, você gera uma nova
imagem.
Dockerfiles
Dockerfiles
Vamos por partes:
• FROM – estamos escolhendo a imagem base para
criar o container;
• RUN – permite a execução de um comando no
container;
• COPY - Copia dados para dentro do container;
• EXPOSE – faz o mapeamento da porta em um
container;
• CMD – executa um comando ao iniciar o container;
Dockerfiles
Camadas Imagens
• Vamos criar um arquivo chamado Dockerfile, para isso
em uma pasta usar o comando:
touch Dockerfile
• Abrir o arquivo e colocar a seguinte instruções:
FROM ubuntu
RUN apt-get update
RUN apt-get install -y nginx
• Executar o comando:
docker image build –t usuarioDockerHub/nginx .
Prática - Dockerfile Build
• Alterar o arquivo Dockerfile:
FROM ubuntu
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80
• Executar o comando:
docker image build –t usuarioDockerHub/ngnix .
Foi utilizado cache da parte que já existia na imagem, e executou
apenas a exposição da porta.
Prática - Dockerfile Cache
• Criar um container com a imagem criada:
docker container run –d –p 80:80 - -name nginx
usuarioDockerHub/nginx /usr/sbin/nginx -g "daemon
off;”
• Acessar no navegador:
http://localhost
• Executar o comando:
docker container port name/idContainer
Prática - Dockerfile Run
• Alterar o arquivo 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
• Executar o comando:
docker image build –t usuarioDockerHub/ngnix .
Prática - Dockerfile CMD
• Executar o comando:
docker volume ls
• Alterar o arquivo Dockerfile:
FROM ubuntu
RUN apt-get update && apt-get install -y 
nginx && 
echo "daemon off;" >> /etc/nginx/nginx.conf
EXPOSE 80
WORKDIR /usr/share/nginx/html
CMD service nginx start
• Executar o comando:
docker image build -t usuarioDockerHub/ngnix .
Prática - Dockerfile Workdir
• Executar o comando:
docker container run -d -p 80:80 - -name nginx
nomeDoUsuarioDockerHub/nginx
• Verificar novamente os volumes:
docker container exec -it nginx bash
Prática - Container Workdir
• Logar no dockerhub:
docker login (informar login, senha)
• Subir a imagem para o dockerhub
docker image push usuarioDockerHub/nginx
Prática - Dockerfile Push
Precisamos orquestrar o deploy
da aplicação
Docker Compose
É uma ferramenta que permite criar e
executar aplicações que dependam de
vários serviços diferentes, rodando os
mesmos em containers separados.
• Vamos criar um arquivo:
docker-compose.yml
• Vamos colocar as seguintes instruções:
version: "3"
services:
ubuntu:
image: chenjr0719/ubuntu-unity-novnc
container_name: ubuntu
environment:
- PASSWORD=fpf@1212
- SUDO=yes
ports:
- 80:6080
Prática Docker Compose
• Executar o container:
docker-compose up
Prática - Docker Compose Up
• Para executar em background:
docker-compose up -d
Prática - Docker Compose Up -d
• Para parar os containers:
docker-compose up –d
docker-compose kill
Prática - Docker Compose Kill
• Remover os containers:
docker-compose up –d
docker-compose rm –f
Prática - Docker Compose RM -f
• Para ver o status dos containers:
docker-compose up -d
docker-compose ps
Prática - Docker Compose PS -a
• Para acessar um container:
docker-compose up -d
docker-compose exec nomeContainer bash/sh
Prática - Docker Compose Exec
• Para ver os logs de um container:
docker-compose up -d
docker-compose logs -f nomeContainer
Prática - Docker Compose Logs
• Para remover todos os containers:
docker-compose up -d
docker-compose down
Prática - Docker Compose Down
• Importar as imagens do selenium;
• Criar um arquivo chamado docker-compose.yml e colocar
as instruções:
hub:
image: selenium/hub
hostname: selenium-hub
ports:
- 4444:4444
environment:
- JAVA_OPTS=-Xmx512m
chrome:
image: selenium/node-chrome
links:
- hub
firefox:
image: selenium/node-firefox
links:
- hub
Prática - Docker Compose Links
docker-compose scale hub=1 chrome=3 firefox=3
• Acessar:
http://localhost:4444/grid/console
docker-compose scale hub=1 chrome=10 firefox=10
Prática - Docker Compose Scale
Docker-compose.yml
nginx:
build: .
ports:
- 80:80
Dockerfile:
FROM ubuntu
RUN apt-get update && apt-get install -y 
nginx && 
echo "daemon off;" >> /etc/nginx/nginx.conf
VOLUME ["/etc/nginx", "/usr/share/nginx/html"]
EXPOSE 80
CMD service nginx start
Prática - Docker Compose Build
postgres:
image: postgres
container_name: postgres
restart: always
ports:
- 5432:5432
environment:
- POSTGRES_DB=rafael
- POSTGRES_PASSWORD=123456
Prática - Docker Compose Restart
Referências
https://speakerdeck.com/acactown/tdc-2015-o-arroz-e-feijao-do-docker
http://www.mundodocker.com.br/o-que-e-docker/
http://stefanteixeira.com.br/2015/03/17/comandos-essenciais-docker-
monitoramento-containers/
https://www.digitalocean.com/community/tutorials/como-instalar-e-utilizar-o-
docker-primeiros-passos-pt
http://blog.diovani.com/post/115770397631/docker-compose-aplicacoes-com-
varios-containers
https://docs.docker.com/
https://blog.schoolofnet.com/2018/05/para-que-serve-o-docker/
Daniel Romero (2015) - Containers com Docker Do desenvolvimento à produção
E-mails:
chiavegattor@gmail.com
rafael.chiavegatto@fpf.br
Slideshare
http://pt.slideshare.net/rafaelchiavegatto1
Linkedin
https://www.linkedin.com/pub/rafael-chiavegatto/26/993/3a5
GitHub
https://github.com/chiavegatto

Mais conteúdo relacionado

Mais procurados

Docker 1.12 - Swarm Mode
Docker 1.12 - Swarm ModeDocker 1.12 - Swarm Mode
Docker 1.12 - Swarm ModeRafael Gomes
 
Orquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e ComposeOrquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e ComposeRoberto Hashioka
 
Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3Wellington Silva
 
Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers DockerMatheus Fidelis
 
Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerBruno Ricardo Siqueira
 
TDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerTDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerStefan Teixeira
 
Verdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre DockerVerdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre DockerLuís Bianchin
 
O poder do Docker (7 Masters)
O poder do Docker (7 Masters)O poder do Docker (7 Masters)
O poder do Docker (7 Masters)Wellington Silva
 
Docker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoDocker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoTobias Sette
 
Vagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerVagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerWellington Silva
 
DevOps e redes -- SDN NFV e Docker
DevOps e redes -- SDN NFV e DockerDevOps e redes -- SDN NFV e Docker
DevOps e redes -- SDN NFV e DockerLucas Arbiza
 
Vagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolsoVagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolsoDiogo Lucas
 
Primeiros passos com o Docker
Primeiros passos com o DockerPrimeiros passos com o Docker
Primeiros passos com o DockerWebSix
 

Mais procurados (20)

Docker 1.12 - Swarm Mode
Docker 1.12 - Swarm ModeDocker 1.12 - Swarm Mode
Docker 1.12 - Swarm Mode
 
Orquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e ComposeOrquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e Compose
 
Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3
 
Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers Docker
 
Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando Docker
 
TDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerTDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de Docker
 
Verdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre DockerVerdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre Docker
 
O poder do Docker (7 Masters)
O poder do Docker (7 Masters)O poder do Docker (7 Masters)
O poder do Docker (7 Masters)
 
Bem vindo ao Docker
Bem vindo ao DockerBem vindo ao Docker
Bem vindo ao Docker
 
Docker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoDocker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de uso
 
Olá docker
Olá dockerOlá docker
Olá docker
 
Vagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerVagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + docker
 
Introdução à plataforma Docker
Introdução à plataforma DockerIntrodução à plataforma Docker
Introdução à plataforma Docker
 
Freedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, dockerFreedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, docker
 
DevOps e redes -- SDN NFV e Docker
DevOps e redes -- SDN NFV e DockerDevOps e redes -- SDN NFV e Docker
DevOps e redes -- SDN NFV e Docker
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Docker fundamentos
Docker fundamentosDocker fundamentos
Docker fundamentos
 
Vagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolsoVagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolso
 
Primeiros passos com o Docker
Primeiros passos com o DockerPrimeiros passos com o Docker
Primeiros passos com o Docker
 
Docker: uma visão geral
Docker: uma visão geralDocker: uma visão geral
Docker: uma visão geral
 

Semelhante a Docker tutorial - Conceitos e práticas básicas

TDC 2016 Floripa - Workshop docker
TDC 2016 Floripa - Workshop dockerTDC 2016 Floripa - Workshop docker
TDC 2016 Floripa - Workshop dockerRafael Gomes
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo realEvandro Silvestre
 
Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Wallison Marra
 
Docker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalarDocker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalargustavomtborges
 
Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogCesar Augusto Nogueira
 
Introdução ao Docker
Introdução ao DockerIntrodução ao Docker
Introdução ao DockerRafael Dutra
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaMatheus Fidelis
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao dockerBenicio Ávila
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucaoFernando Ike
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes Rhuan Karlus Silva
 
Docker - minicurso utfpr 2017
Docker -  minicurso utfpr 2017Docker -  minicurso utfpr 2017
Docker - minicurso utfpr 2017Fabio Janiszevski
 

Semelhante a Docker tutorial - Conceitos e práticas básicas (20)

TDC 2016 Floripa - Workshop docker
TDC 2016 Floripa - Workshop dockerTDC 2016 Floripa - Workshop docker
TDC 2016 Floripa - Workshop docker
 
Docker selenium
Docker seleniumDocker selenium
Docker selenium
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo real
 
Alagoas Dev Day
Alagoas Dev DayAlagoas Dev Day
Alagoas Dev Day
 
Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis
 
Docker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalarDocker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalar
 
Ambiente de desenvolvimento com docker e ruby on rails
Ambiente de desenvolvimento com  docker e ruby on railsAmbiente de desenvolvimento com  docker e ruby on rails
Ambiente de desenvolvimento com docker e ruby on rails
 
Docker
DockerDocker
Docker
 
Docker e suas tecnologias
Docker e suas tecnologiasDocker e suas tecnologias
Docker e suas tecnologias
 
Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnog
 
Introdução ao Docker
Introdução ao DockerIntrodução ao Docker
Introdução ao Docker
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG Cabreúva
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Aulão de docker
Aulão de dockerAulão de docker
Aulão de docker
 
Oficina docker
Oficina dockerOficina docker
Oficina docker
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucao
 
Conceitos Basicos e Docker - Java Noroeste
Conceitos Basicos e Docker - Java NoroesteConceitos Basicos e Docker - Java Noroeste
Conceitos Basicos e Docker - Java Noroeste
 
Vamos falar de docker
Vamos falar de dockerVamos falar de docker
Vamos falar de docker
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes
 
Docker - minicurso utfpr 2017
Docker -  minicurso utfpr 2017Docker -  minicurso utfpr 2017
Docker - minicurso utfpr 2017
 

Mais de Rafael Chiavegatto

Testando performance da sua aplicação e escalando com docker swarm
Testando performance da sua aplicação e escalando com docker swarmTestando performance da sua aplicação e escalando com docker swarm
Testando performance da sua aplicação e escalando com docker swarmRafael Chiavegatto
 
Docker - Colocando aplicações em produção
Docker  - Colocando aplicações em produçãoDocker  - Colocando aplicações em produção
Docker - Colocando aplicações em produçãoRafael Chiavegatto
 
Sgrio2016 deixando o jenkins fazer o trabalho manual
Sgrio2016   deixando o jenkins fazer o trabalho manualSgrio2016   deixando o jenkins fazer o trabalho manual
Sgrio2016 deixando o jenkins fazer o trabalho manualRafael Chiavegatto
 
Mtc docker - utilizando no seu dia a dia
Mtc   docker - utilizando no seu dia a diaMtc   docker - utilizando no seu dia a dia
Mtc docker - utilizando no seu dia a diaRafael Chiavegatto
 
Testes de aceitação automatizados com robotium utilizando a técnica de bdd
Testes de aceitação automatizados com robotium utilizando a técnica de bddTestes de aceitação automatizados com robotium utilizando a técnica de bdd
Testes de aceitação automatizados com robotium utilizando a técnica de bddRafael Chiavegatto
 
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...Rafael Chiavegatto
 
Automatização de testes funcionais em dispositivos móveis utilizando a técnic...
Automatização de testes funcionais em dispositivos móveis utilizando a técnic...Automatização de testes funcionais em dispositivos móveis utilizando a técnic...
Automatização de testes funcionais em dispositivos móveis utilizando a técnic...Rafael Chiavegatto
 

Mais de Rafael Chiavegatto (7)

Testando performance da sua aplicação e escalando com docker swarm
Testando performance da sua aplicação e escalando com docker swarmTestando performance da sua aplicação e escalando com docker swarm
Testando performance da sua aplicação e escalando com docker swarm
 
Docker - Colocando aplicações em produção
Docker  - Colocando aplicações em produçãoDocker  - Colocando aplicações em produção
Docker - Colocando aplicações em produção
 
Sgrio2016 deixando o jenkins fazer o trabalho manual
Sgrio2016   deixando o jenkins fazer o trabalho manualSgrio2016   deixando o jenkins fazer o trabalho manual
Sgrio2016 deixando o jenkins fazer o trabalho manual
 
Mtc docker - utilizando no seu dia a dia
Mtc   docker - utilizando no seu dia a diaMtc   docker - utilizando no seu dia a dia
Mtc docker - utilizando no seu dia a dia
 
Testes de aceitação automatizados com robotium utilizando a técnica de bdd
Testes de aceitação automatizados com robotium utilizando a técnica de bddTestes de aceitação automatizados com robotium utilizando a técnica de bdd
Testes de aceitação automatizados com robotium utilizando a técnica de bdd
 
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
 
Automatização de testes funcionais em dispositivos móveis utilizando a técnic...
Automatização de testes funcionais em dispositivos móveis utilizando a técnic...Automatização de testes funcionais em dispositivos móveis utilizando a técnic...
Automatização de testes funcionais em dispositivos móveis utilizando a técnic...
 

Docker tutorial - Conceitos e práticas básicas

  • 2. Rafael Chiavegatto Rafael Chiavegatto possui pós-graduação em Engenharia de Software formado pela FUCAPI em 2013 e graduado em Sistema de Informação pela Universidade Salgado de Oliveira /UNIVERSO- JF. Possui mais de 8 anos de experiência na área de desenvolvimento de software. Conhecimento e utilização em práticas de desenvolvimento ágeis, automação de testes(Web/ Mobile), testes de performance, testes de segurança, ferramentas para automação de builds, entrega contínua e cultura DEVOPS. Contatos: Blog : rafaelchiavegatto.com.br E-mail: chiavegattor@gmail.com Twiter: twitter.com/FaelChiavegatto Linkedin: linkedin.com/in/rafael-chiavegatto-3a599326
  • 3. • Docker - Visão Geral, Conceitos, Vantagens e Benefícios; • Instalação; • Pull e Push de imagens; • Comandos básicos; • Exportação e importação de imagens; • Criação de imagens; • Criação de volumes; • Docker-Compose; Agenda
  • 5. O que é Docker? É uma plataforma Open Source que facilita a criação e administração de ambientes isolados. . Ele possibilita o empacotamento de uma aplicação ou ambiente dentro de um container.
  • 6. Máquina virtual x Containers Fonte: https://www.docker.com/what-docker
  • 7. Cada máquina virtual possui: • A aplicação e suas dependências; • Um sistema operacional; • Usuários do sistema operacional. Máquina virtual
  • 8. • Containers são mais leves, já que não precisam de um ambiente virtual completo; • O kernel do host proporciona gerenciamento de memória, I/O, CPU, etc; • Inicialização pode levar poucos segundos. Container
  • 9. • Reprodutibilidade; • Escalabilidade; • Documentação de configuração; • Rapidez. Vantagens
  • 10.
  • 11.
  • 12. Instalação docker - Ubuntu https://docs.docker.com/install/
  • 13. Conceitos Básicos Ø Imagens; • Containers; • Dockerfiles.
  • 14. • Constituem a base para criação de containers Docker; • São muito similares às imagens de disco padrão de sistema operacional. Imagens Docker
  • 16. Vamos fazer o seguinte: Abrir o terminal (ctrl + shift + t); Digitar o comando: docker image pull ubuntu Executar o comando docker images OBS.: No Window iniciar o Docker e abrir o CMD. Prática - Imagens Pull
  • 17. • Importar uma imagem docker image load --input tmp/nova_imagem.tar Prática - Imagens Load
  • 18. • Digitar o comando: docker images • Exportar a imagem: docker image save nomeImagem --output /tmp/ubuntu.tar Prática - Imagens Save
  • 19. • Digitar o comando: docker images • Remover uma imagem docker image rm -f nomeDaImagem ou idDaImagem Prática - Imagens Remove
  • 20. Conceitos Básicos • Imagens; Ø Containers; • Dockerfiles.
  • 21. Containers possuem: • Isolamento de recursos, semelhantes como máquinas virtuais; • Abordagem de arquitetura diferente que permite ser mais portátil e eficiente; • São executados como um processo isolado; Containers
  • 22. • Execução controlada de CPU, RAM, I/O, etc; • Podem ser descartáveis ou persistentes; • Não estão vinculados a qualquer infraestrutura específica; • Compartilham o kernel com outros containers. Containers
  • 23. Instância de uma imagemFonte: https://blog.schoolofnet.com/2018/05/para-que-serve-o-docker/
  • 25. • Vamos fazer o seguinte: Abrir o terminal (ctrl + shift + t); • Digitar o comando: docker image pull ubuntu • Executar o comando docker container run -it ubuntu • Verificar a versão e data da máquina: • cat /etc/*-release • date Prática containers - Run -it
  • 26. Pode ser executado em background?
  • 27. Sair do container (digitar no terminal exit) • Executar o comando: docker container run -d ubuntu Prática - Containers Background
  • 28. Como vejo meu container?
  • 29. • Listar todos os containers: docker container ps -a docker container ps docker container ps -q Prática containers - Ps
  • 31. O que aconteceu com o meu container?
  • 32. • Importar a imagem do apache ou realizar o pull da imagem; • Criar um container do apache docker container run -d httpd:alpine • Executar o comando: docker container inspect idDoContainer • Achar as seguintes informações: • IP; • Portas; • Mac Address. Prática - Containers Inspect
  • 33. • Acessar o container: docker container exec -it nomeDocontainer(ou id) /bin/sh ou bash • Verificar a versão e data do container: • cat /etc/*-release • date Prática - Containers Exec
  • 35. • Vamos agora parar um container docker container stop nomeDoContainer(ou id) • Vamos iniciar o container docker container start nomeDoContainer(ou id) Prática - Containers Start/Stop
  • 36. • Remover um container docker container rm -f nomeDoContainer (ou id) Prática - Containers RM
  • 37. • Melhorar o nome ao criar um container docker container run -d - -name apache httpd:alpine • Executar o comando docker container ps Prática - Containers --name
  • 38. • Remover todos os containers docker container rm -f $(docker container ps -aq) • Executar o comando para ver se existe containers ativos: docker container ps • Executar o comando para listar todos os containers docker container ps -a Prática - Containers Remove All
  • 39. • Importar a imagem do Apache • Criar o container docker container run -d --name apache -p 80:80 httpd:alpine • Executar o comando para listar os containers docker container ps • Acessar o navegador na url: http://localhost Prática - Containers Binding Ports
  • 40. • Criar o container docker container run -d --name apache -p 4000:80 httpd:alpine • Executar o comando para listar os containers docker container ps • Acessar o navegador na url: http://localhost:4000 Prática - Containers Binding Ports
  • 41. • Um volume pode ser um diretório localizado fora de um container; • Podemos manipular dados no container, sem alterar a imagem; • Um volume pode ser compartilhado entre vários containers; • Toda alteração feita em um volume é de forma direta. Volumes
  • 42. • Criar o volume: docker run -d -p 80:80 -v static:/usr/local/apache2/htdocs/ httpd:alpine • Executar o comando: echo "Eu sei usar volume" > static/index.html • Acessar o navegador http://localhost Prática - Containers Volumes
  • 43. • Remover todos os containers: docker container rm –f $(docker container ps -aq) • Criar um container do ubuntu-unity-novnc : docker container run -d -p 6080:6080 --name vnc -e PASSWORD=123456 -e SUDO=yes chenjr0719/ubuntu-unity-novnc • Acessar no navegador o endereço: • http://localhost:6080/vnc.html; • Acessar o VNC com a senha que criamos. Prática – Containers Environment
  • 44. • Copiando arquivos do container: docker container cp <nome_container>:/caminho/no/container /caminho_host • Enviando arquivos do container: docker container cp arquivo_host <nome_container>:/caminho_container Prática - Containers CP
  • 45. • Remover todos os containers: docker container rm –f $(docker container ps –aq) • Criar um container do ubuntu-unity-novnc : docker container run -d -p 6080:6080 --name vnc -e PASSWORD=123456 -e SUDO=yes chenjr0719/ubuntu-unity-novnc • Acessar no navegador o endereço: • http://localhost:6080/vnc.html; • Acessar o VNC com a senha que criamos; • Criar uma pasta com seu nome no home do usuário. • Executar o comando: docker container cp vnc :/home/ubuntu/pastacriada .(local que será salvo a pasta) Prática – Containers CP
  • 46. Conceitos Básicos • Imagens; • Containers; Ø Dockerfiles.
  • 47. • São scripts contendo comandos que devem ser executados para formar uma nova imagem; • Cada comando executado gera uma nova camada; • Quando um Dockerfile conclui a execução, você gera uma nova imagem. Dockerfiles
  • 49. Vamos por partes: • FROM – estamos escolhendo a imagem base para criar o container; • RUN – permite a execução de um comando no container; • COPY - Copia dados para dentro do container; • EXPOSE – faz o mapeamento da porta em um container; • CMD – executa um comando ao iniciar o container; Dockerfiles
  • 51. • Vamos criar um arquivo chamado Dockerfile, para isso em uma pasta usar o comando: touch Dockerfile • Abrir o arquivo e colocar a seguinte instruções: FROM ubuntu RUN apt-get update RUN apt-get install -y nginx • Executar o comando: docker image build –t usuarioDockerHub/nginx . Prática - Dockerfile Build
  • 52. • Alterar o arquivo Dockerfile: FROM ubuntu RUN apt-get update RUN apt-get install -y nginx EXPOSE 80 • Executar o comando: docker image build –t usuarioDockerHub/ngnix . Foi utilizado cache da parte que já existia na imagem, e executou apenas a exposição da porta. Prática - Dockerfile Cache
  • 53. • Criar um container com a imagem criada: docker container run –d –p 80:80 - -name nginx usuarioDockerHub/nginx /usr/sbin/nginx -g "daemon off;” • Acessar no navegador: http://localhost • Executar o comando: docker container port name/idContainer Prática - Dockerfile Run
  • 54. • Alterar o arquivo 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 • Executar o comando: docker image build –t usuarioDockerHub/ngnix . Prática - Dockerfile CMD
  • 55. • Executar o comando: docker volume ls • Alterar o arquivo Dockerfile: FROM ubuntu RUN apt-get update && apt-get install -y nginx && echo "daemon off;" >> /etc/nginx/nginx.conf EXPOSE 80 WORKDIR /usr/share/nginx/html CMD service nginx start • Executar o comando: docker image build -t usuarioDockerHub/ngnix . Prática - Dockerfile Workdir
  • 56. • Executar o comando: docker container run -d -p 80:80 - -name nginx nomeDoUsuarioDockerHub/nginx • Verificar novamente os volumes: docker container exec -it nginx bash Prática - Container Workdir
  • 57. • Logar no dockerhub: docker login (informar login, senha) • Subir a imagem para o dockerhub docker image push usuarioDockerHub/nginx Prática - Dockerfile Push
  • 58. Precisamos orquestrar o deploy da aplicação
  • 59.
  • 60. Docker Compose É uma ferramenta que permite criar e executar aplicações que dependam de vários serviços diferentes, rodando os mesmos em containers separados.
  • 61. • Vamos criar um arquivo: docker-compose.yml • Vamos colocar as seguintes instruções: version: "3" services: ubuntu: image: chenjr0719/ubuntu-unity-novnc container_name: ubuntu environment: - PASSWORD=fpf@1212 - SUDO=yes ports: - 80:6080 Prática Docker Compose
  • 62. • Executar o container: docker-compose up Prática - Docker Compose Up
  • 63. • Para executar em background: docker-compose up -d Prática - Docker Compose Up -d
  • 64. • Para parar os containers: docker-compose up –d docker-compose kill Prática - Docker Compose Kill
  • 65. • Remover os containers: docker-compose up –d docker-compose rm –f Prática - Docker Compose RM -f
  • 66. • Para ver o status dos containers: docker-compose up -d docker-compose ps Prática - Docker Compose PS -a
  • 67. • Para acessar um container: docker-compose up -d docker-compose exec nomeContainer bash/sh Prática - Docker Compose Exec
  • 68. • Para ver os logs de um container: docker-compose up -d docker-compose logs -f nomeContainer Prática - Docker Compose Logs
  • 69. • Para remover todos os containers: docker-compose up -d docker-compose down Prática - Docker Compose Down
  • 70. • Importar as imagens do selenium; • Criar um arquivo chamado docker-compose.yml e colocar as instruções: hub: image: selenium/hub hostname: selenium-hub ports: - 4444:4444 environment: - JAVA_OPTS=-Xmx512m chrome: image: selenium/node-chrome links: - hub firefox: image: selenium/node-firefox links: - hub Prática - Docker Compose Links
  • 71. docker-compose scale hub=1 chrome=3 firefox=3 • Acessar: http://localhost:4444/grid/console docker-compose scale hub=1 chrome=10 firefox=10 Prática - Docker Compose Scale
  • 72. Docker-compose.yml nginx: build: . ports: - 80:80 Dockerfile: FROM ubuntu RUN apt-get update && apt-get install -y nginx && echo "daemon off;" >> /etc/nginx/nginx.conf VOLUME ["/etc/nginx", "/usr/share/nginx/html"] EXPOSE 80 CMD service nginx start Prática - Docker Compose Build
  • 73. postgres: image: postgres container_name: postgres restart: always ports: - 5432:5432 environment: - POSTGRES_DB=rafael - POSTGRES_PASSWORD=123456 Prática - Docker Compose Restart