Docker - Receita de Bolo
Docker - Receita de Bolo
Docker - Receita de Bolo
0 - Antes de começar…
Configurações de rede e conectividade com a internet
Verifica o endereço IP da máquina
$ ifconfig
Configurar o DNS
Essa configuração é diferente pro Ubuntu Server
$ sudo nano /etc/resolvconf/resolv.conf.d/head
$ sudo resolvconf -u
$ cat /etc/resolv.conf
Testes de conectividade
$ ping google.com
$ ping 8.8.8.8
$ nslookup
2 - LXC
LXC (LinuX Containers) é um tipo de virtualização em nível de sistema operacional que
proporciona a execução de vários sistemas Linux de forma isolada (containers) em um
único host de controle. Em outras palavras é uma alternativa para virtualização completa e
muito leve se comparada aos hypervisors KVM, Xen e Vmware.
O Kernel Linux possui o recurso Cgroups que é utilizado para limitar e isolar o uso de (CPU,
memória, disco, rede, etc) e também o isolamento de namespace que basicamente separa
grupos de processos de modo que eles não enxerguem os recursos de outros grupos, ou
seja:
3 - Namespaces
Namespaces foi adicionado no kernel Linux na versão 2.6.24 e é ele que permite o
isolamento de processos quando estamos utilizando o Docker.
Ele é o responsável por fazer com que cada container possua seu próprio environment, ou
seja, cada container terá a sua árvore de processos, interface de rede, pontos de
montagens, etc... Fazendo com que um container não interfira na execução de outro.
Vamos saber um pouco mais sobre alguns namespaces utilizados pelo Docker:
4 - História
Solomon Hykes iniciou o desenvolvimento do docker em um projeto interno na dotCloud, um
provider de PAAS (Plataform as a service), com contribuições iniciais por outros
engenheiros da dotCloud incluindo Andrea Luzzardi e François-Xavier Bourlet. Jeff Lindsay
também se envolveu como um colaborador independente. Docker representa uma evolução
da tecnologia proprietária dotCloud, que é em si construída em projetos open-source
anteriores, como pequenas nuvens. Docker foi lançado como código aberto em março de
2013.
Spotfy
Spotify é um serviço sueco de streaming de música comercial, podcast, vídeo e que fornece
os direitos digitais conteúdo de gravadoras e empresas de mídia, incluindo a BBC, Sony,
EMI, Warner Music Group e Universal com restrição de gestão.
Desafio
Spotify tem dezenas de milhões de usuários, de modo que o seu apoio back-end precisa
apoiar escala e crescimento de sua base de usuários. Usando uma abordagem micro
serviços. A empresa tem 100 ou mais serviços de back-end distintos, Auth, streaming e
reprodução de música. Gerir todas estes serviços, gera um grande workload. Na verdade,
eles tinham cerca de 300 servidores diferentes para cada engenheiro. Eles precisavam
tornar mais fácil em sua área Ops teams.Uma em particular tornou-se um importante
exemplo, implantação. Antes do Docker, o dev, teste e processo de produção era
extremamente difícil. Para complicar as coisas, eles também sofreram um número frequente
de falhas de implantação.
Solução
Repetibilidade foi um enorme razão pela qual Spotify optou por utilizar Docker. Com Docker
eles podem construir uma imagem, testar essa imagem e, em seguida, usar a mesma
imagem em produção. Agora, a empresa pode garantir que todos os seus serviços
permanecem em funcionamento, proporcionando uma boa experiência para o usuário. Eles
também construíram uma nova plataforma chamada Helios baseado em Docker para
implantar e orquestrar seus servidores.
6 - Docker X Virtualização
É possível visualizar no diagrama abaixo como a questão do físico passa para a máquina
virtual e como a máquina virtual para para os containers.
7 - Instalação
Para realizar a instalação do Docker em máquinas Linux é bastante simples, precisamos
somente observar alguns pontos:
● O Docker não suporta processadores 32bits;
● O Docker é suportado somente nas versões do Kernel 3.8 ou superior;
● O kernel deve ter suporte aos sistemas de arquivos utilizados pelo Docker como o
AUFS, DeviceMapper, OverlayFS, etc…
● O kernel deverá ter suporte a cgroups e namespaces, o que normalmente já vem por
default habilitado na maioria das distros;
8 - Iniciando os trabalhos
Após o processo de instalação ter ocorrido, precisamos iniciar os trabalhos no ambiente
com o docker instalado, na realidade, se faz necessário um planejamento, até mesmo por
sabermos que o ambiente precisa de continuidade, então planejar se faz estritamente
necessário.
Modo “Interativo”
Existem algumas maneiras de criar e executar containers. Nos primeiros casos, vamos criar
containers utilizando imagens “prontas”, como debian, centos, mysql, postgresql e etc. Mas
quando precisamos criar imagens personalizadas, ou então, alterar alguma imagens
existente, é preciso iniciar o container com modo iterativo. (Não obrigado, porém, mais fácil).
Modo “Daemon”
Com o parâmetro “-d” conseguimos daemonizar o container, fazendo com que ele seja
executado como um processo. Quando temos um container que não será necessário
acessar por “shell”, por exemplo um container de Mysql, crie o container “daemonzizado”.
Quando o processo finalizar, já é possível identificar que o container está instalado e já
estamos dentro do container, para saber disso, vamos utilizar os comandos abaixo para que
possamos confirmar que estamos dentro do container.
hostname
ip a
cat /etc/debian_version
Uma vez dentro do container e verificando com os comandos acima que realmente estamos
dentro dele, precisamos sair e voltar para o servidor hospedeiro, para isso, podemos utilizar
os seguintes comandos:
ctrl+d, exit ou logout
Problemas ? Sim né ? Ao sairmos do container, utilizando os comandos acima, o container
será desligado ! Porque ? Por estar rodando apenas o interpretador de comandos /bin/bash.
É possível ver com os comandos abaixo:
$ docker ps
Mas ao digitarmos o comando abaixo, é possível perceber que o container está criado e
apenas está desligado por não ter nenhum interpretador de comandos rodando.
$ docker ps -a
Dessa maneira, precisamos saber como sair do container sem desligar ele, deixando ele
funcionando e em possível produção.
Para sair do container sem que ele desligue, a forma correta seria:
ctrl+pq
Dessa forma, o container fica rodando e podemos fazer os devidos acessos, quer seja pela
rede ou acessando o container diretamente.
Campo Descrição
Baixando Imagens
docker pull debian
Com esse comando, apenas a imagem é baixada e não é criado nenhum container.
Conectando em container
docker attach ID
Verificando os processos
docker top ID
Campo Descrição
Net Permite configurar qual o modo de rede que você usará com o
container. Temos 04 opções, porém a mais conhecida e utilizada é a "
net=host". Onde o container utilizará a rede do host para se comunicar
e não "containerizara" a rede do container
# Qual imagem
FROM debian:latest
# Autor
MAINTAINER Prof. Esp. Alex Sandro Silva at [email protected]
# Update and install apache
RUN apt-get update -y && apt-get install -y apache2 && apt-get
clean
Campo Descrição
Bem, por enquanto está bem básico, apenas indicando qual será a nossa imagem base,
nesse exemplo vamos utilizar o Debian. Também informamos quem é o autor da imagem e
por fim vamos instalar o Apache2 via apt-get. Agora vamos “buildar”.
docker build -t alexhctp/apache:1.0 .
Vamos criar um container a partir desta imagem que criamos.
docker run -ti alexhctp/apache:1.0 /bin/bash
docker attach $ID
ps aux
/etc/init.d/apache start
ps aux
Lindo, não?