Entendendo Docker e Containers linux de uma vez por todas
Este é o primeiro post exclusivo do blog e para dar um pontapé inicial eu vou começar com uma série de posts de assuntos e ferramentas iniciais no mundo DevOps. Hoje vamos entender de uma vez por todas, o que é Container Linux e Docker
Containers
Um container é basicamente um conjunto de arquivos e binários utilizados para rodar seu código, configurações e dependências mas de maneira isolada do sistema operacional. Imagine um navio cargueiro com vários containers, agora imagine que um desses container é danificado.. Os outros containers serão afetados? O navio será afetado??? Essa é a mesma proposta dos container, os processos rodam de maneira isolada onde se um falhar, não ocorre um efeito cascata derrubando todos os serviços do host.
É comum a comparação entre containers e máquinas virtuais então veja a imagem abaixo para ter uma noção da diferença.
Perceba que no cenário de containers, a camada do sistemas operacional hóspede não existe, isso acontece por que os containers compartilham apenas o Kernel do host e não precisam replicar outro sistema operacional inteiro, visto que vários recursos seriam inúteis dependendo da aplicação a ser executada no container.
Docker
Docker é uma plataforma open-source criada pelo Google feita para desenvolvedores e administradores de sistemas que facilita o processo criar, testar e implantar aplicações de forma distribuída em containers .
A idéia é que o desenvolvedor crie containers para rodar e testar a sua aplicação e este mesmo container possa ser reaplicado quantas vezes for necessário em um cloud provider fazendo com que o ambiente do Dev seja o mesmo ambiente de Produção só que replicado várias vezes (Isso se chama Orquestração de Container mas isso é assunto para um outro post).
Sabe aquela história de “Ah mas na minha máquina funciona…” Então, é só levar o container do Dev para produção agora.
Para fazer a instalação basta seguir os passos da própria documentação “https://docs.docker.com/get-docker/"
Mas caso você esteja usando ubuntu como eu, pode executar o comando abaixo para a instalação:
curl -fsSL https://get.docker.com/ | sh
Antes de criar e executar um container nós precisamos entender só mais dois componentes da estrutura do Docker, são Imagens e Registry.
Imagem Docker
Uma imagem docker é como um container todo configurado, só que parado. Para criarmos uma imagem é bastante simples, a imagem é definida em um arquivo de nome “Dockerfile”, assim mesmo sem extensão… segue um exemplo:
FROM - Imagem base para o container RUN - Comandos a serem executados no build do container CMD - Comando a ser executado na inicialização do container
Para buildar esta imagem basta o comando com a seguinte sintaxe:
docker build -t nome_do_container ./local/do/Dockerfile
Neste momento, o container não está em execução somente a imagem dele está configurada e salva localmente.
Registry
O docker registry é um repositório de imagens de container. O Registry principal da Docker é o Docker HUB onde você pode dar um push nas suas imagens, mas lembre-se, “O Docker HUB é público e qualquer imagem disponibilizada nele pode ser baixado por qualquer pessoa”.
Existem diversas opções de Registry privados e futuramente vou fazer um post das opções que eu já utilizei.
Vamos fazer a publicação da imagem que criamos para o Docker Hub e para isso é necessário criar uma conta pessoal. Isso é bem simples então não vou enrolar ensinando isso aqui.
Partindo do ponto que você já criou a sua conta, faça login no Docker Hub com o seguinte comando.
docker login
Será solicitado o seu usuário e senha do Docker Hub.
Para publicar a imagem é necessário adaptar o nome dela para o Hub saber de quem é essa imagem. Vamos renomear o nome da imagem colocando o nosso usuário + o nome da imagem com o seguinte comando.
docker tag nome_da_imagem usuario/nome_da_image
docker tag quebrada anderondev/quebrada
Agora é só dar o push na imagem com o seguinte comando e depois já pode verificar sua imagem no Docker Hub:
docker push anderondev/quebrada
Docker run
Agora que criamos uma imagem e jogamos ela para um Registry, vamos fazer um teste…. Vamos apagar ela do nosso ambiente local e tentar rodar. O docker deve identificar que não temos esta imagem na máquina, vai baixar ela do Docker Hub e vai executar o container.
Para apagar as duas imagens, use os comandos abaixo
docker rmi username/nome_image
docker rmi nome_image
No meu caso eu rodei assim:
Beleza, imagens deletadas… vamos tentar executar o container baixando diretamente do Docker hub.
Sucesso. Para descontrair um pouco mais eu recomendo você executar o comando abaixo no seu terminar e depois acessar o seu navegador no endereço “localhost:8080”, divirta-se…
docker run -p 8080:8080 pengbai/docker-supermario
Por enquanto é isso pessoal, ainda tem muito conteúdo sobre containers que pretendo abordar aqui no blog, no próximo post vamos falar sobre Docker Compose e vamos começar a falar sobre Orquestração.