Entendendo Docker e Containers linux de uma vez por todas

image

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.

image

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:

image

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

image

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

image

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:

image

Beleza, imagens deletadas… vamos tentar executar o container baixando diretamente do Docker hub.

image

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.

image