Você está na página 1de 36

Docker – Solução de Container

Índice

• Sobre o Instrutor
• Sobre o Curso
• Evolução do Host de aplicação
• Virtualização
• Container
• Instando o Docker
• Hello-World Docker
Instrutor

• André Stato Filho


• Certificações: LPI 1,2,3, Novell CLA, NCLP, RHCSA,
RHCE, CCNA, Zabbix Specialist,...
• Livros Editados:
• Domine Mikrotik Router OS
• pfSense Expert
• Certificação Linux: LPI 1
Sobre o Curso
Estudaremos a tecnologia de containers, para soluções de
deploy confiável e rápido. Veremos a diferença entre
virtualização e containers, utilizando-se da ferramenta
Docker.
Será visto como funciona o docker, criar, dimensionar,
remover containers com o docker.
Veremos como baixar imagens prontos do Docker Hub, além
de gerar nossas próprias imagens.
E por fim veremos a comunicação entre containers e o docker
compose.
A Evolução do Host de Aplicação
Antigamente, quando queríamos montar o nosso sistema, com vários
serviços (bancos de dados, proxy, etc) e aplicações, acabávamos tendo
vários servidores físicos, cada um com um serviço ou aplicação do
nosso sistema, por exemplo:
A Evolução do Host de Aplicação
E claro, não conseguimos instalar os serviços diretamente no
hardware do servidor, ou seja, precisamos de um
intermediário entre as aplicações e o hardware, que é o
sistema operacional. Ou seja, devemos instalar sistemas
operacionais em cada servidor, e os sistemas poderiam ser
diferentes:
A Evolução do Host de Aplicação
E se quisermos que uma aplicação se comunique com outra ou faça
qualquer comunicação externa, devemos conectar os servidores à rede.
Além disso, para eles funcionarem, precisamos ligá-los à eletricidade.
Logo, havia diversos custos de eletricidade, rede e configuração dos
servidores.
Além disso, o processo era lento, já que a cada nova aplicação,
deveríamos comprar/montar o servidor físico, instalar o sistema
operacional, configurá-lo e subir a aplicação
Uso da Capacidade
Outro grande problema era o desperdício computacional. Muito
comum termos servidores com alta capacidade de processamento, com
subutilização, onde uma única aplicação estava sendo executado.
Normalmente os servidor era subutilizado, e quando necessário
em ocasiões pontuais, utilizava-se de seu poder de processamento, e o
restante do tempo esse poder era disperdiçãdo.
Virtualização
Para aproveitar o uso ocioso destes servidores, e resolver o
problema de alto tempo para subir e manter aplicações em servidores
fisicos, surgiu a solução de virtualização.
Através da tecnologia de Hypervisor, podemos então compartilhar
recursos físicos (HD, memória, CPU) com sistemas virtualizados em nosso
Host (Servidor), criando márquinas virtuais e usando nossos aplicações.
Virtualização
Assim, reduzimos a quantidade de servidores e consequentemente os
custos com luz e rede. Além disso, dividimos melhor o nosso hardware,
aproveitando melhor os seus recursos e diminuindo a ociosidade.
Comparação
Problemas com Virtualização
Resolvemos o problema de nosso servidor físico, mas temos novos problemas.
• Cada aplicação necessita de um sistema operacional, que podem ser diferentes.
• Custo de memória, disco e processamento (minimo para manter o sistema e a
aplicação).
• Custo de Configuração (Portas, bibliotecas, SO, atualização, segurança)
Problemas com Virtualização
Muitas vezes, o tempo voltado para a manutenção das máquinas virtuais era o
mesmo tempo voltado para a nossa aplicação em si. Ou seja, acabávamos dividindo
o valor da nossa empresa, ao invés de focar somente nas aplicações, dividíamos o
trabalho com a manutenção dos sistemas operacionais.
Como Melhorar

Utilizando containers
Container
O projeto LXC (Linux Container) nasceu em agosto de 2008, no
inicio, o site oficial trazia a seguinte frase: LXC, chroot com esteroides. O
objetivo do projeto era ser uma alternativa a já consolidada tecnologia de
chroot, sendo um meio termo entre máquina virtual e chroot, possibilitando
a criação de um ambiente mais próximo possível de uma instalação Linux
sem a necessidade de um kernel separado.

Através do chroot é possível encapsular um sistema inteiro dentro


de uma estrutura de diretório, fazendo com que o sistema hospede não
acesse nada além daquilo que é definido dentro dessa arquitetura. Isso é
muito útil pois elimina a sobrecarga de uma máquina virtual inteira para
executar um processo ou serviço simples.
Container
O projeto LXC (Linux Container) nasceu em agosto de 2008, no
inicio, o site oficial trazia a seguinte frase: LXC, chroot com esteroides. O
objetivo do projeto era ser uma alternativa a já consolidada tecnologia de
chroot, sendo um meio termo entre máquina virtual e chroot, possibilitando
a criação de um ambiente mais próximo possível de uma instalação Linux
sem a necessidade de um kernel separado.

Através do chroot é possível encapsular um sistema inteiro dentro


de uma estrutura de diretório, fazendo com que o sistema hospede não
acesse nada além daquilo que é definido dentro dessa arquitetura. Isso é
muito útil pois elimina a sobrecarga de uma máquina virtual inteira para
executar um processo ou serviço simples.
Features do LXC
• Kernel Namespaces
• Apparmor and SELinux
• Seccomp policies
• Chroots (pivot_root)
• Kernel Capabilities
• Cgroups
Container
Um container Linux® é um conjunto de processos que são isolados do
resto do sistema. Esses processos são executados a partir de uma imagem
distinta que fornece todos os arquivos necessários a eles. Por fornecer uma
imagem que contém todas as dependências de um aplicativo, o container é
portátil e consistente durante todas as etapas desde o desenvolvimento,
teste e, por fim, produção.

Os containers compartilham o mesmo kernel do sistema operacional e


isolam os processos da aplicação do restante do sistema
Container
Não temos mais um sistema operacional para cada aplicação, já que agora
as aplicações estão dividindo o mesmo sistema operacional, que está em
cima do nosso hardware. Os próprios containers terão a lógica que se
encarregará dessa divisão.

Assim, com somente um sistema operacional, reduzimos os custos de


manutenção e de infraestrutura como um todo.
Virtualização X Containers

Mas isso não é o mesmo que virtualização?


Sim e não. Veja uma maneira fácil de distinguir ambos:

Com a virtualização, é possível executar muitos sistemas operacionais


simultaneamente em um único sistema.
Os containers compartilham o mesmo kernel do sistema operacional e
isolam os processos da aplicação do restante do sistema.
Vantagens do Container

Por não ter possuir um sistema operacional, o container é muito


mais leve e não possui o custo de manter múltiplos sistemas operacionais,
já que só teremos um sistema operacional, que será dividido entre os
containers.

Além disso, por ser mais leve, o container é muito rápido de subir,
subindo em questão de segundos. Logo, o container é uma solução para
suprir o problema de múltiplas máquinas virtuais em um hardware físico,
já que com o container, nós dividimos o sistema operacional entre as
nossas aplicações.
Por que usar Containers
Mas por que precisamos dos containers, não podemos
simplesmente instalar as aplicações no nosso próprio sistema
operacional? Até por que já fazemos isso, já que no nosso
sistema operacional temos um editor de texto, terminal,
navegador, etc.
Por que usar Containers

No caso das nossas aplicações, essa abordagem pode ter alguns


problemas. Por exemplo, se dois aplicativos precisarem utilizar a mesma
porta de rede? Precisaremos de algo para isolar uma aplicação da outra. E
se uma aplicação consumir toda a CPU, a ponto de prejudicar o
funcionamento das outras aplicações? Isso acontece se não limitarmos a
aplicação. Outro problema que pode ocorrer é cada aplicação precisar de
uma versão específica de uma linguagem, por exemplo, uma aplicação
precisa do Java 7 e outra do Java 8. Além disso, uma aplicação pode acabar
congelando todo o sistema. Por isso é bom ter essa separação das
aplicações, isolar uma da outra, e isso pode ser feito com os containers.
Por que usar Containers

Com os containers, conseguimos limitar o consumo de CPU das


aplicações, melhorando o controle sobre o uso de cada recurso do nosso
sistema (CPU, rede, etc). Também temos uma facilidade maior em
trabalhar com versões específicas de linguagens/bibliotecas, além de ter
uma agilidade maior na hora de criar e subir containers, já que eles são
mais leves que as máquinas virtuais.
Docker

A palavra "DOCKER" abrange muitas definições. Isso inclui um


projeto da comunidade open source, as ferramentas resultantes desse
projeto, a empresa Docker Inc., principal apoiadora do projeto, e as
ferramentas para quais a empresa formalmente oferece suporte. As
tecnologias e a empresa compartilham o mesmo nome, e isso pode causar
uma certa confusão.
Docker

Veja uma simples explicação:

• O software de TI "Docker” é uma tecnologia de containerização que


permite a criação e o uso de containers® Linux.
• A comunidade open source do Docker trabalha gratuitamente para
melhorar essas tecnologias em benefício de todos os usuários.
• A empresa, Docker Inc., desenvolve a tecnologia com base no trabalho
realizado pela comunidade do Docker, tornando-o mais seguro, e
compartilha os avanços com a comunidade em geral. Então, ela oferece
aos clientes corporativos o suporte necessário para as tecnologias que
foram aprimoradas e fortalecidas.
Docker

Com o DOCKER, é possível lidar com os containers como se fossem


máquinas virtuais modulares e extremamente leves. Além disso, os
containers oferecem maior flexibilidade. Com eles, é possível criar,
implantar, copiar e migrá-los de um ambiente para outro.
Como Funciona

A tecnologia Docker usa o kernel do Linux e recursos do kernel,


como Cgroups e namespaces, para segregar processos de modo que eles
possam ser executados de maneira independente. O objetivo dos containers
é criar essa independência: a habilidade de executar diversos processos e
aplicativos separadamente para utilizar melhor a infraestrutura e, ao
mesmo tempo, manter a segurança que você teria em sistemas separados.
Como Funciona
As ferramentas de container, incluindo o Docker, fornecem um
modelo de implantação com base em imagem. Isso facilita o
compartilhamento de um aplicativo ou conjunto de serviços, incluindo
todas as suas dependências, em vários ambientes. O Docker também
automatiza a implantação do aplicativo (ou de conjuntos de processos que
constituem um aplicativo) dentro desse ambiente de container.

Essas ferramentas desenvolvidas baseadas nos containers Linux


(o que faz com que o Docker seja exclusivo e fácil de usar) oferecem aos
usuários acesso sem precedentes a aplicativos, além da habilidade de
implantar com rapidez e de ter total controle sobre as versões e
distribuição.
Instalando o Docker

O docker pode ser instalado em:


• Windows
• Mac
• Linux
Docker no Windows
Existem duas possibilidades de instalação de docker no Windows:
• Docker for windows:
https://download.docker.com/win/stable/InstallDocker.msi
• Docker ToolBox:
https://download.docker.com/win/stable/DockerToolbox.exe

Pré-requisitos:
• Arquitetura 64 Bits.
• Versão Pro, Enterprise ou Education.
• Virtualização Habilitada
Docker for Mac

Para instalar o docker no Windows:


• Docker for mac:
https://download.docker.com/mac/stable/Docker.dmg

Pré-requisitos:
• Modelo 2010 ou mais recente.
• Versão OS X EL Capitain 10.11 ou superior.
• Mínimo de 4 GB memória RAM.
• Virtual BOX instalado em versão 4.3.30 ou anterior é incompatível.
Docker no Linux
A primeira coisa é remover os pacotes já instalado, usaremos como base
um Ubuntu 64 bits.

apt-get remove docker docker-engine docker.io


apt-get update

Adicionar ao sistema a chave GPG oficial do repositório do Docker:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-


key add –
Docker no Linux

Adicionar o repositório do docker:

add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

apt-get install docker-ce


Verificando instalação do Docker

Para verificarmos se o docker foi instalado com sucesso execute o seguinte


comando:

docker version

Caso esteja executando os comandos com usuário comum.

usermod –aG docker $(whoami)


Executando o Docker
Vamos executar o docker pela primeira vez, utilizando a imagem Hello
Word.

docker run hello-world