Upload
marcelo-santos
View
206
Download
0
Embed Size (px)
Citation preview
Iniciando com
Viagem ao mundo dos containers!1
Apresentação
● Graduado em Análise de Sistemas pela FATENE
● Programador de Sistemas de Informação Prefeitura de Fortaleza
https://br.linkedin.com/in/marcelo-santos-03528020
2
Docker● História
● Introdução
● Explorando
● Trabalhando com imagens
● Vamos de nginx
● Rede, link seus containers
3
História● Revolução da Virtualização
● Revolução dos Containers
● Já é realidade, os DevOps que o digam!
● Pretendo mostrar um preview inicial do poder do Docker e Container
4
Introdução● O que é?
● Container vs Máquina Virtual
● Namespaces
● Cgroups
● Union file systems
5
O que é Docker● Processo de desenvolvimento e deploy
○ O Servidor é um Navio Carregado de Containers e cada Container possui mercadorias
○ O Docker é a ferramenta para criar e manter esses containers, ou melhor, ele fica
responsável por armazenar vários serviços de forma isolada do SO Host, como: web server,
banco de dados, aplicação etc.
○ Seu back-end é baseado no LXC (Linux Containers), este isola processos do sistema
operacional host. Muito leve, pois não é preciso fazer emulação ou suporte a hardware.
Permite execução de sistemas linux de forma isolada, por isso o nome: Container. Utiliza o
mesmo Kernel do servidor Host, performático.6
Container vs Máquina Virtual● Bare Metal
○ O software de virtualização é instalado no hardware, como: Xen, VMWare e Hyper-V.
■ Maior isolamento e sobrecarga, cada VM executará seu próprio Kernel e SO.
● Hosted
○ O software de virtualização é executado sobre um SO, como o VirtualBox.
● O que o LXC oferece com os Containers é uma virtualização menos isolada,
compartilhando o kernel do host, reduz a sobrecarga.7
Containers vs VM
8
O que é Namespaces?● Docker faz uso deste recurso para prover um espaço de trabalho isolado
para os containers, cada instância de container criada possui um conjunto de
namespaces respectivamente. (Camada de isolamento para grupo de
processos)
○ pid – isolamento de processos (PID)○ net – controle de interfaces de rede○ ipc – controle dos recursos de IPC (InterProcess Communication)○ mnt – gestão de pontos de montagem○ uts – UTS (Unix Timesharing System) isolar recursos do kernel
9
Cgroups● Docker faz uso deste recurso para compartilhar recursos de hardware
existentes no host com os containers, podendo-se definir limites e restrições.
Union file systems● Sistema de arquivos que funcionam por meio de criação de camadas, sendo
bem leves e rápidos. Esse tipo de sistema de arquivos é utilizado pelo
Docker para construir as imagens utilizadas na criação de containers.
10
Explorando o Docker● Como baseia-se no LXC, o Docker funciona apenas no Linux, sendo
necessário ter uma máquina virtual com Linux, para funcionar em outros SO.
○ Instalação■ Ubuntu
● https://docs.docker.com/engine/installation/linux/ubuntulinux/
11
Hello World Docker● Como nosso primeiro teste, vamos apenas criar um container que roda um
comando bash.
● my-user$ docker run ubuntu /bin/echo Hello World, Docker!!!
12
● Entendendo o comando, o Docker vai baixar uma imagem base ubuntu,
instanciou um novo container, configurou a rede e IP para ele, em seguida
selecionou o sistema de arquivos para o container criado e executou o
comando /bin/echo, retornando o resultado do comando.
Comandos Docker● Podemos rodar um comando que mostra os detalhes sobre o docker
○ $ docker version
13
Comandos Docker● No comando abaixo o parâmentro -i indica que vamos usar interatividade
com o container e o -t faz o link ao terminal do container, ubuntu é a imagem que será utilizada e por fim o comando /bin/bash com argumento.
○ $ docker run -i -t ubuntu /bin/bash
14
O docker vai tentar localizar alguma imagem “ubuntu” localmente, caso não encontre fará o donwload do docker hub.
No caso para conferir executei um comando que mostra a distro que estou usando, veja que no container ele mostrou o Ubuntu 16.04
Comandos Docker● Mostrando os containers em execução
○ $ docker ps
15
Note que aqui eu usei o parâmetro -d quando executei container, com isso o container vai rodar em background caso saia do mo
● Acessando o terminal de um container que está em background pelo nome do container
○ $ docker exec -it reverent_lovelace bash$ docker ps -a mostra todos os containers$ docker stats ID ou NAME detalhes de recursos$ docker logs mostra-nos output do container$ docker stop ID ou NAME termina a execução de um container$ docker rm ID or NAME remove um container
Trabalhando com imagens Docker● Quando criamos nosso container citei que o docker baixou uma imagem do
ubuntu visto que ela não existia localmente, podemos listar com o comando:○ $ docker images
16
Vamos de nginx● Veremos um pouco mais sobre containers, algumas opções de controle,
vamos criar nosso novo container○ $ docker run -it --name vamos_de_nginx ubuntu
17
Usamos o parâmetro --name para especificar o nome do container
● Atualizando repositórios e instalando o nginx○ $ apt-get update○ $ apt-get install -y nginx○ $ nginx -v
Dando tudo certo veremos a versão do nginx instalado
Commit com nova imagem nginx● O que fazemos nos containers duram apenas no ciclo de vida do container,
ou seja, se pararmos e iniciarmos novamente o container, o que fizemos não terá efeito, a menos que façamos um commit, o Docker possui um recurso de versionamento semelhante ao Git, ao realizarmos um commit, salvamos o estado atual do container na imagem utilizada.
○ $ docker commit vamos_de_nginx ubuntu/nginx
18
Criando container temporário● Podemos criar um container que seja removido automáticamente ao término
de sua execução, para isso usaremos a opção --rm ○ $ docker run -it --rm -p 8080:80 ubuntu/nginx /bin/bash
19
Com a opção -p informamos ao Docker que a porta 8080 do host será mapeada para a 80 do container. Iniciando o serviço do nginx$ service nginx start
Como estou rodando no Mac OS, acessei pelo IP que o Docker me fornece, se você estiver no linux o localhost roda de boa!
Obrigado à todos!
20
● Referências○ https://www.docker.com/○ https://docs.docker.com/○ https://linuxcontainers.org/○ https://www.nginx.com/