SlideShare uma empresa Scribd logo
1 de 100
Baixar para ler offline
Docker 101 e Ambientes
imutáveis
Workshop
Qual o nosso propósito com o workshop?
- Docker 101?
- Ambientes imutáveis?
Wallison Marra
- Em 2006 iniciei meu caminho pelo mundo da web.
- DevOps Engineer na Hotmart.
- Entusiasta da tecnologia.
- Games, família e uma boa cerveja.
Docker 101
Preload
Hoje vivenciamos o uso do Docker graças a 2 peças fundamentais:
- LXC (Um conjunto de ferramentas do linux)
- DotCloud (Uma empresa)
LXC
LinuX Container
É um conjunto de ferramentas, bibliotecas, templates e controladores de
linguagem que nos permite criar e controlar sistemas ou aplicações em container.
LXC
Okay, but what is container?
Linux Container é considerado algo entre o chroot e uma máquina virtual
propriamente dita, e neste meio é onde conseguimos criar "ambientes virtuais"
(containers) sem a necessidade de um novo kernel.
linuxcontainers.org/lxc
E a DotCloud?
DotCloud é uma empresa que possuía vários projetos open source em LXC, e o
Docker era um destes projetos.
DotCloud
Docker se tornou tão popular que a empresa DotCloud decidiu mudar o nome da
empresa para Docker.
Docker
Docker vem dominando o mercado de conteinerização desde seu surgimento, e
hoje possui várias comunidades além de vários eventos pelo mundo.
https://www.docker.com/community/events
Docker
- Hoje é utilizado por desenvolvedores para criação de ambiente imutáveis
evitando a frase "Na minha máquina funciona!".
- Utilizado por DevOps para gerenciamento de aplicações de ponta-a-ponta
isolando processos, adquirindo performance computacional.
Docker vs Virtual Machine
E os containers?
Containers
São os pequenos "blocos" utilizados para executar tarefas específicas e não mais
que isso.
Redis
MySQLPHP
Nginx
HOST
The fluxo
Docker 101
Hello World!
Container Exemplo
Container Exemplo
O que foi feito?
$ docker run hello-world
- docker
- run (utilizando para criar e executar um container)
- hello-world (imagem a ser utilizada para a criação do container)
Terminal
Como acessar o terminal?
O que foi feito?
$ docker run -ti ubuntu bash
- docker (executável)
- run (utilizando para criar e executar um container)
- -ti (-t abre terminal no container e -i mantém o terminal interativo)
- ubuntu (imagem utilizada para criar o container)
- bash (comando a ser executado pelo container - bash mantém o terminal
aberto)
$ docker run -i ubuntu bash
$ docker run -t ubuntu bash
Testing...
Listando imagens
$ docker images
Listando containers
$ docker ps
Listando containers
$ docker ps -a (all)
Hands On!
$ docker run -ti -p 8080:80 ubuntu:16.04 bash
Interagindo com containers
Interagindo com containers
$ apt-get install nano
$ apt-get update
Interagindo com containers
Interagindo com containers
$ apt-get install nginx
$ service nginx start
Interagindo com containers
O que ocorreu?
$ docker run -ti -p 8080:80 ubuntu:16.04 bash
- docker (deamon docker)
- run (utilizando para criar e executar um container)
- -ti (-t abre terminal no container e -i mantém o terminal interativo)
- -p 8080:80 (Expõe porta do container baseado em uma porta do host)
- 8080 (porta do host)
- 80 (porta do container)
- ubuntu:16.04 (Imagem utilizada para criar o container)
- bash (comando a ser executado quando o container for iniciado)
Interagindo com containers
Interagindo com containers
Mas meu terminal tem que ficar aberto pra sempre?
Com a tela do terminal aberto pressione a tecla control e aperte p + q.
$ docker ps
$ docker attach bed7185d03bb (ID do container)
Interagindo com containers
Crie o arquivo index.html
- Conteúdo: <h1>Hello Docker</h1>
$ docker pull nginx:alpine
Interagindo com containers
$ docker run --name web-server 
-p 8080:80 
-v `pwd`:/usr/share/nginx/html 
-d nginx:alpine
Interagindo com containers
Interagindo com containers
$ docker run --name web-server -p 8080:80 
-v `pwd`:/usr/share/nginx/html: -d nginx:alpine
- docker (daemon)
- --name webserver (concede um nome para o container)
- -v `pwd`:/usr/share/nginx/html (baseado em um diretório do host, cria um
volume no container)
- -d (executa o container em background e informa seu ID)
- nginx:alpine (nome da imagem utilizada para criar o container)
O que ocorreu?
Docker 101
Imagens de Containers
Imagens de Containers
Para cada serviço a ser utilizado, e para cada versão de uma aplicação,
possuímos uma imagem.
jenkins-2.58 jenkins-2.57
jenkins-2.56 jenkins-2.46.2
Dockerfile
Arquivo utilizado para criar imagens para containers em Docker. Local onde
iremos informar o que nosso container deve possuir, além de:
- Instalar pacotes e bibliotecas.
- Criar variáveis de ambiente.
- Expor portas.
- Copiar arquivos.
- Configurar comando base do container.
- Etc...
Gerando uma imagem
Crie um arquivo chamado Dockerfile na mesma pasta do arquivo index.html que
criamos anteriormente.
$ docker build -t web-app:1.0 .
$ docker run -d -p 8080:80 web-app:1.0
Gerando uma imagem
Gerando uma imagem
Edite o arquivo index.html e insira a linha <h2>V2</h2>.
$ docker build -t web-app:2.0 .
$ docker run -d -p 8080:80 web-app:2.0
Gerando uma imagem
$ docker images
E pra onde mando minhas imagens?
Repositório de imagens
hub.docker.com (ou store.docker.com)
Publicando imagens
$ docker tag web-app:1.0 repo_name/web-app:1.0
- docker
- tag (adiciona tag a uma imagem)
- web-app:1.0 (nome da imagem a ser adicionado uma tag)
- repo_name/web-app:1.0 (nome da tag a ser adicionada)
$ docker images
Publicando imagens
$ docker push wmarra/web-app:1.0
Publicando imagens
$ docker login
$ docker push wmarra/web-app:1.0
Publicando imagens
hub.docker.com
Docker 101 done!
Docker
Ambientes Imutáveis
Ambientes imutáveis
São ambientes que não sofrem alterações, mesmo quando executados em outros
computadores.
- Configurações idênticas.
- Ambiente portável
- Deploy em minutos, e até em segundos.
Ambientes imutáveis
Redis
MySQLPHP
Nginx
PC01
Redis
MySQLPHP
Nginx
PC02
Ambientes imutáveis
Com estes ambientes ganhamos segurança, e agilidade no processo de
desenvolvimento de aplicações.
- Segurança: ambientes idênticos.
- A frase: "Na minha máquina funciona", deixa de existir.
- Ambiente de desenvolvimento = produção
- Agilidade: automatização de processos.
Ambientes imutáveis
Starting…
$ git clone git@github.com:wmarra/in-moment-docker-frontend.git
$ git checkout develop
$ git clone git@github.com:wmarra/in-moment-docker-backend.git
$ git checkout develop
$ cd in-moment-docker-frontend/
Ambientes imutáveis
$ docker build -t frontapp .
Ambientes imutáveis
$ docker run -d 
-v `pwd`:/usr/share/nginx/html 
-p 8080:80 frontapp
- -v `pwd`:/usr/share/nginx/html
(cria um volume no container com o conteúdo da pasta
/Users/marra/Projects/in-moment-docker-frontend do host dentro de
/usr/share/nginx/html no container)
Ambientes imutáveis
Caso tenha problemas com a interface do frontend, execute o comando abaixo:
$ docker exec container_id npm install
Ambientes imutáveis
Ambientes imutáveis
$ cd in-moment-docker-backend/
Ambientes imutáveis
$ docker build -t backapp .
Ambientes imutáveis
$ docker run -d 
-v `pwd`:/usr/src/app 
-p 3000:3000 backapp sh -c 'npm install && npm start'
- sh -c 'npm install && npm start' (sh -c executa um comando shell dentro do
container)
E por que não "...backapp npm install && npm start"?
Ambientes imutáveis
Ambientes imutáveis
Ambientes imutáveis
Front-end, back-end…. e o banco de dados?
Calma, estamos quase lá…
$ docker run -d -p 3306:3306 --name dbapp wmarra/in-moment-dbapp
Ambientes imutáveis
Pronto, temos nossos 3 containers =]
Ambientes imutáveis
FRONTAPP BACKAPP DBAPP
Mas não se comunicam ainda =[
Ambientes imutáveis
Docker
Ambientes Imutáveis
Linkando Containers
Preparando nosso ambiente:
$ cd in-moment-docker-backend && git checkout master
$ cd in-moment-docker-frontend && git checkout master
$ docker rm -f $(docker ps -aq) - (remove todos os containers ativos e inativos)
Ambientes imutáveis
$ docker run -d --name dbapp -p 3306:3306 wmarra/in-moment-dbapp
$ cd in-moment-docker-backend
$ docker run -i --name backapp_dbapp 
--link dbapp:mysql -d -p 3000:3000 
-v `pwd`:/usr/src/app 
backapp sh -c 'npm install && npm start'
Ambientes imutáveis
Quando os containers estão linkados eles se conectam em um rede própria, e se
comunicam pelos seus nomes.
--link dbapp:mysql (dbapp é o nome do container e o outro mysql é o apelido do
container a ser visível quando for linkado)
Ambientes imutáveis
Network
BACKAPP DBAPP
Mysql
Ambientes imutáveis
Ambientes imutáveis
Ambientes imutáveis
Para completar, vamos iniciar nosso frontend:
$ cd in-moment-docker-frontend/
$ git checkout master
$ docker run -d -p 8080:80 -v `pwd`:/usr/share/nginx/html frontapp
Ambientes imutáveis
Ambientes imutáveis
E como orquestrar um ambiente com docker?
- Docker Compose
Docker compose é utilizado para orquestrar container de maneira simples.
Com ele conseguimos fazer todos os passos mostrados anteriormente, facilitando
e muito nossa vida.
Ambientes imutáveis
$ docker rm -f $(docker ps -aq)
- docker
- rm -f (rm remove um container, -f força a remoção)
- $(docker ps -aq) (ps lista os containers, -a lista all containers e -q retorna o
id de all containers)
$ docker rmi -f $(docker images)
- docker
- rmi -f (força a remoção de todas as imagens)
- $(docker images) (lista todas imagens disponíveis)
Ambientes imutáveis
$ cd in-moment-docker-backend/
$ mv docker-compose.yml ../
Ambientes imutáveis
Ambientes imutáveis
O que fizemos?
- version (versão do docker-compose a ser utilizado)
- services (declaração dos serviço - containers).
- container_name (nome do container)
- image (imagem a ser utilizada para criar o container)
- ports (mapeamento de portas)
- links (quais containers serão linkados entre si)
- depends_on (dependência de container)
- command (comando a ser executado pelo container)
Ambientes imutáveis
$ docker-compose up --build
…
Ambientes imutáveis
O que fizemos?
$ docker-compose up --build
- docker-compose (docker-compose command)
- up (cria todo o ambiente configurado do docker-compose.yml)
- --build (builda ou rebuild as imagens do docker-compose.yml)
Ambientes imutáveis
$ docker-compose ps
Ambientes imutáveis
Ambientes imutáveis
Ambientes imutáveis
E assim garantimos nossos ambientes imutáveis!
Ambientes imutáveis
Vlws!
Dúvidas?
www.docker.com
hub.docker.com
https://www.youtube.com/user/linuxtipscanal
Referências

Mais conteúdo relacionado

Mais procurados

Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers DockerMatheus Fidelis
 
Docker - minicurso utfpr 2017
Docker -  minicurso utfpr 2017Docker -  minicurso utfpr 2017
Docker - minicurso utfpr 2017Fabio Janiszevski
 
Vagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerVagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerWellington Silva
 
Docker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimentoDocker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimentoSérgio Lima
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida realFernando Ike
 
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
 
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
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...Renato Groff
 
Docker de containers a orquestração
Docker de containers a orquestraçãoDocker de containers a orquestração
Docker de containers a orquestraçãoItalo José
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneosFernando Ike
 

Mais procurados (20)

Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers Docker
 
Oficina docker
Oficina dockerOficina docker
Oficina docker
 
Docker - minicurso utfpr 2017
Docker -  minicurso utfpr 2017Docker -  minicurso utfpr 2017
Docker - minicurso utfpr 2017
 
Vagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerVagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + docker
 
Docker compose
Docker composeDocker compose
Docker compose
 
Apresentação docker
Apresentação dockerApresentação docker
Apresentação docker
 
Docker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimentoDocker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimento
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida real
 
Rancher e ansible
Rancher e ansibleRancher e ansible
Rancher e ansible
 
Introdução à plataforma Docker
Introdução à plataforma DockerIntrodução à plataforma Docker
Introdução à plataforma Docker
 
5. rodando containers docker na aws
5. rodando containers docker na aws5. rodando containers docker na aws
5. rodando containers docker na aws
 
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
 
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
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
 
Bem vindo ao Docker
Bem vindo ao DockerBem vindo ao Docker
Bem vindo ao Docker
 
Docker
DockerDocker
Docker
 
Apresentacao docker
Apresentacao dockerApresentacao docker
Apresentacao docker
 
Docker volumes
Docker volumesDocker volumes
Docker volumes
 
Docker de containers a orquestração
Docker de containers a orquestraçãoDocker de containers a orquestração
Docker de containers a orquestração
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneos
 

Semelhante a Docker 101 e Ambientes imutáveis

Introdução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfIntrodução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfdadalt1
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaMatheus Fidelis
 
O que é o Docker afinal? (Workshop Novatec)
O que é o Docker afinal? (Workshop Novatec)O que é o Docker afinal? (Workshop Novatec)
O que é o Docker afinal? (Workshop Novatec)Wellington Silva
 
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 - Tutorial for beginners
Docker - Tutorial for beginnersDocker - Tutorial for beginners
Docker - Tutorial for beginnersRafael Chiavegatto
 
TDC 2016 Floripa - Workshop docker
TDC 2016 Floripa - Workshop dockerTDC 2016 Floripa - Workshop docker
TDC 2016 Floripa - Workshop dockerRafael Gomes
 
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
 
Docker - Essa baleia vai te conquistar
Docker - Essa baleia vai te conquistarDocker - Essa baleia vai te conquistar
Docker - Essa baleia vai te conquistarVinícius Feitosa
 
JavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorldJavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorldThiago Soares
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao dockerBenicio Ávila
 
Re pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersRe pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersFrancisco Gonçalves
 
O docker vai mudar tudo na sua infra estrutura-ti
O docker vai mudar tudo na sua infra estrutura-tiO docker vai mudar tudo na sua infra estrutura-ti
O docker vai mudar tudo na sua infra estrutura-tiFrancisco Gonçalves
 
Docker 1.12 - Swarm Mode
Docker 1.12 - Swarm ModeDocker 1.12 - Swarm Mode
Docker 1.12 - Swarm ModeRafael Gomes
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação DockerAndré Justi
 

Semelhante a Docker 101 e Ambientes imutáveis (20)

Introdução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfIntrodução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdf
 
Aulão de docker
Aulão de dockerAulão de docker
Aulão de docker
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG Cabreúva
 
O que é o Docker afinal? (Workshop Novatec)
O que é o Docker afinal? (Workshop Novatec)O que é o Docker afinal? (Workshop Novatec)
O que é o Docker afinal? (Workshop Novatec)
 
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
 
Docker - Tutorial for beginners
Docker - Tutorial for beginnersDocker - Tutorial for beginners
Docker - Tutorial for beginners
 
TDC 2016 Floripa - Workshop docker
TDC 2016 Floripa - Workshop dockerTDC 2016 Floripa - Workshop docker
TDC 2016 Floripa - Workshop 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
 
Docker para maiores
Docker para maioresDocker para maiores
Docker para maiores
 
Docker - Essa baleia vai te conquistar
Docker - Essa baleia vai te conquistarDocker - Essa baleia vai te conquistar
Docker - Essa baleia vai te conquistar
 
JavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorldJavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorld
 
Docker
DockerDocker
Docker
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Olá docker
Olá dockerOlá docker
Olá docker
 
Re pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersRe pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containers
 
O docker vai mudar tudo na sua infra estrutura-ti
O docker vai mudar tudo na sua infra estrutura-tiO docker vai mudar tudo na sua infra estrutura-ti
O docker vai mudar tudo na sua infra estrutura-ti
 
Vamos falar de docker
Vamos falar de dockerVamos falar de docker
Vamos falar de docker
 
Docker 1.12 - Swarm Mode
Docker 1.12 - Swarm ModeDocker 1.12 - Swarm Mode
Docker 1.12 - Swarm Mode
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação Docker
 

Docker 101 e Ambientes imutáveis