docker 101 e ambientes imutáveis

100
Docker 101 e Ambientes imutáveis

Upload: wallison-marra

Post on 24-Jan-2018

45 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Docker 101 e Ambientes Imutáveis

Docker 101 e Ambientes imutáveis

Page 2: Docker 101 e Ambientes Imutáveis

WorkshopQual o nosso propósito com o workshop?

- Docker 101?- Ambientes imutáveis?

Page 3: Docker 101 e 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.

Page 4: Docker 101 e Ambientes Imutáveis

Docker 101

Page 5: Docker 101 e Ambientes Imutáveis

PreloadHoje vivenciamos o uso do Docker graças a 2 peças fundamentais:

- LXC (Um conjunto de ferramentas do linux)- DotCloud (Uma empresa)

Page 6: Docker 101 e Ambientes Imutáveis

LXCLinuX Container

É um conjunto de ferramentas, bibliotecas, templates e controladores de linguagem que nos permite criar e controlar sistemas ou aplicações em container.

Page 7: Docker 101 e Ambientes Imutáveis

LXCOkay, 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

Page 8: Docker 101 e Ambientes Imutáveis

E a DotCloud?DotCloud é uma empresa que possuía vários projetos open source em LXC, e o Docker era um destes projetos.

Page 9: Docker 101 e Ambientes Imutáveis

DotCloudDocker se tornou tão popular que a empresa DotCloud decidiu mudar o nome da empresa para Docker.

Page 10: Docker 101 e Ambientes Imutáveis

DockerDocker 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

Page 11: Docker 101 e Ambientes Imutáveis

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.

Page 12: Docker 101 e Ambientes Imutáveis

Docker vs Virtual Machine

Page 13: Docker 101 e Ambientes Imutáveis

E os containers?

Page 14: Docker 101 e Ambientes Imutáveis
Page 15: Docker 101 e Ambientes Imutáveis
Page 16: Docker 101 e Ambientes Imutáveis

ContainersSão os pequenos "blocos" utilizados para executar tarefas específicas e não mais que isso.

Redis

MySQLPHP

Nginx

HOST

Page 17: Docker 101 e Ambientes Imutáveis

The fluxo

Page 18: Docker 101 e Ambientes Imutáveis
Page 19: Docker 101 e Ambientes Imutáveis

Docker 101Hello World!

Page 20: Docker 101 e Ambientes Imutáveis

Container Exemplo

Page 21: Docker 101 e Ambientes Imutáveis

Container Exemplo

Page 22: Docker 101 e Ambientes Imutáveis

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)

Page 23: Docker 101 e Ambientes Imutáveis

Terminal

Page 24: Docker 101 e Ambientes Imutáveis

Como acessar o terminal?

Page 25: Docker 101 e Ambientes Imutáveis

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)

Page 26: Docker 101 e Ambientes Imutáveis

$ docker run -i ubuntu bash

$ docker run -t ubuntu bash

Testing...

Page 27: Docker 101 e Ambientes Imutáveis

Listando imagens$ docker images

Page 28: Docker 101 e Ambientes Imutáveis

Listando containers$ docker ps

Page 29: Docker 101 e Ambientes Imutáveis

Listando containers$ docker ps -a (all)

Page 30: Docker 101 e Ambientes Imutáveis
Page 31: Docker 101 e Ambientes Imutáveis

Hands On!

Page 32: Docker 101 e Ambientes Imutáveis

$ docker run -ti -p 8080:80 ubuntu:16.04 bash

Interagindo com containers

Page 33: Docker 101 e Ambientes Imutáveis

Interagindo com containers$ apt-get install nano

Page 34: Docker 101 e Ambientes Imutáveis

$ apt-get update

Interagindo com containers

Page 35: Docker 101 e Ambientes Imutáveis

Interagindo com containers$ apt-get install nginx

$ service nginx start

Page 36: Docker 101 e Ambientes Imutáveis

Interagindo com containers

Page 37: Docker 101 e Ambientes Imutáveis

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

Page 38: Docker 101 e Ambientes Imutáveis

Interagindo com containersMas meu terminal tem que ficar aberto pra sempre?

Page 39: Docker 101 e Ambientes Imutáveis

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

Page 40: Docker 101 e Ambientes Imutáveis

Crie o arquivo index.html

- Conteúdo: <h1>Hello Docker</h1>

$ docker pull nginx:alpine

Interagindo com containers

Page 41: Docker 101 e Ambientes Imutáveis

$ docker run --name web-server \-p 8080:80 \-v `pwd`:/usr/share/nginx/html \-d nginx:alpine

Interagindo com containers

Page 42: Docker 101 e Ambientes Imutáveis

Interagindo com containers

Page 43: Docker 101 e Ambientes Imutáveis

$ 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?

Page 44: Docker 101 e Ambientes Imutáveis

Docker 101Imagens de Containers

Page 45: Docker 101 e Ambientes Imutáveis

Imagens de ContainersPara 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

Page 46: Docker 101 e Ambientes Imutáveis

DockerfileArquivo 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...

Page 47: Docker 101 e Ambientes Imutáveis

Gerando uma imagemCrie 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

Page 48: Docker 101 e Ambientes Imutáveis

Gerando uma imagem

Page 49: Docker 101 e Ambientes Imutáveis

Gerando uma imagemEdite 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

Page 50: Docker 101 e Ambientes Imutáveis

Gerando uma imagem$ docker images

Page 51: Docker 101 e Ambientes Imutáveis
Page 52: Docker 101 e Ambientes Imutáveis

E pra onde mando minhas imagens?

Page 53: Docker 101 e Ambientes Imutáveis

Repositório de imagenshub.docker.com (ou store.docker.com)

Page 54: Docker 101 e Ambientes Imutáveis

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)

Page 55: Docker 101 e Ambientes Imutáveis

$ docker images

Publicando imagens

Page 56: Docker 101 e Ambientes Imutáveis

$ docker push wmarra/web-app:1.0

Publicando imagens

Page 57: Docker 101 e Ambientes Imutáveis

$ docker login

$ docker push wmarra/web-app:1.0

Publicando imagens

Page 58: Docker 101 e Ambientes Imutáveis

hub.docker.com

Page 59: Docker 101 e Ambientes Imutáveis

Docker 101 done!

Page 60: Docker 101 e Ambientes Imutáveis

DockerAmbientes Imutáveis

Page 61: Docker 101 e Ambientes Imutáveis

Ambientes imutáveisSã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.

Page 62: Docker 101 e Ambientes Imutáveis

Ambientes imutáveis

Redis

MySQLPHP

Nginx

PC01

Redis

MySQLPHP

Nginx

PC02

Page 63: Docker 101 e Ambientes Imutáveis

Ambientes imutáveisCom 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.

Page 64: Docker 101 e Ambientes Imutáveis

Ambientes imutáveisStarting…

$ git clone [email protected]:wmarra/in-moment-docker-frontend.git

$ git checkout develop

$ git clone [email protected]:wmarra/in-moment-docker-backend.git

$ git checkout develop

Page 65: Docker 101 e Ambientes Imutáveis

$ cd in-moment-docker-frontend/

Ambientes imutáveis

Page 66: Docker 101 e Ambientes Imutáveis

$ docker build -t frontapp .

Ambientes imutáveis

Page 67: Docker 101 e 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

Page 68: Docker 101 e Ambientes Imutáveis

Caso tenha problemas com a interface do frontend, execute o comando abaixo:

$ docker exec container_id npm install

Ambientes imutáveis

Page 69: Docker 101 e Ambientes Imutáveis

Ambientes imutáveis

Page 70: Docker 101 e Ambientes Imutáveis

$ cd in-moment-docker-backend/

Ambientes imutáveis

Page 71: Docker 101 e Ambientes Imutáveis

$ docker build -t backapp .

Ambientes imutáveis

Page 72: Docker 101 e 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

Page 73: Docker 101 e Ambientes Imutáveis

Ambientes imutáveis

Page 74: Docker 101 e Ambientes Imutáveis

Ambientes imutáveisFront-end, back-end…. e o banco de dados?

Page 75: Docker 101 e Ambientes Imutáveis

Calma, estamos quase lá…

$ docker run -d -p 3306:3306 --name dbapp wmarra/in-moment-dbapp

Ambientes imutáveis

Page 76: Docker 101 e Ambientes Imutáveis

Pronto, temos nossos 3 containers =]

Ambientes imutáveis

FRONTAPP BACKAPP DBAPP

Page 77: Docker 101 e Ambientes Imutáveis

Mas não se comunicam ainda =[

Ambientes imutáveis

Page 78: Docker 101 e Ambientes Imutáveis

DockerAmbientes Imutáveis

Linkando Containers

Page 79: Docker 101 e Ambientes Imutáveis

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

Page 80: Docker 101 e 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

Page 81: Docker 101 e 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

Page 82: Docker 101 e Ambientes Imutáveis

Ambientes imutáveis

Page 83: Docker 101 e Ambientes Imutáveis

Ambientes imutáveis

Page 84: Docker 101 e Ambientes Imutáveis

Ambientes imutáveisPara 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

Page 85: Docker 101 e Ambientes Imutáveis

Ambientes imutáveis

Page 86: Docker 101 e Ambientes Imutáveis

Ambientes imutáveisE como orquestrar um ambiente com docker?

- Docker Compose

Page 87: Docker 101 e Ambientes Imutáveis

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

Page 88: Docker 101 e 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

Page 89: Docker 101 e Ambientes Imutáveis

$ cd in-moment-docker-backend/

$ mv docker-compose.yml ../

Ambientes imutáveis

Page 90: Docker 101 e Ambientes Imutáveis

Ambientes imutáveis

Page 91: Docker 101 e 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

Page 92: Docker 101 e Ambientes Imutáveis

$ docker-compose up --build

Ambientes imutáveis

Page 93: Docker 101 e 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

Page 94: Docker 101 e Ambientes Imutáveis

$ docker-compose ps

Ambientes imutáveis

Page 95: Docker 101 e Ambientes Imutáveis

Ambientes imutáveis

Page 96: Docker 101 e Ambientes Imutáveis

Ambientes imutáveis

Page 97: Docker 101 e Ambientes Imutáveis

E assim garantimos nossos ambientes imutáveis!

Ambientes imutáveis

Page 98: Docker 101 e Ambientes Imutáveis

Vlws!

Page 99: Docker 101 e Ambientes Imutáveis

Dúvidas?