Docker visão geral (Parte 1)
Atualmente é muito comum ouvir falar sobre Docker, mas o que é isso? como funciona? e como começar a usar?
Essas são as perguntas que pretendo responder nesta publicação.
O que é
Docker é uma plataforma aberta para desenvolvimento, publicação e execução de aplicações. Que se divide três serviço, cliente e servidor de imagens, que permite o empacotamento e execução de uma aplicação em um ambiente minimalista e isolado chamado container.
Essa plataforma é dividida em duas grandes frentes Docker Engine e Docker Registry:
- Docker Engine:
Docker Engine é uma aplicação client-server com esses principais componentes:
- Um servidor, acessivel pelo comando dockerd;
- Command Line Interface(CLI) cliente(o comando docker).
- Docker Registry:
Docker Registry armazena imagens Docker. O Docker Hub é um Registry público.
Diferença entre conteinerização e virtualização
A melhor forma de entender o conceito de container é compará-lo com uma máquina virtual, e nesse caso uma imagem pode ser bem esclarecedora.
Emboras estejam isolados os containers compartilham recursos com o host o que faz com eles tenham desempenho muito melhor comparado com as máquinas virtuais.
Objetos do Docker
Agora que já entendemos como é formada a plataforma Docker e qual a diferença de um container para uma máquina virtual. Esta na hora de entender os objetos do Docker e como utiliza-los.
Quando você usa Docker, você está criando imagens, containers, networks, volumes, plugins, etc. Aqui vamos falar um pouco sobre alguns desses objetos.
- Imagens:
Uma imagem docker é um template somente leitura com instruções para a criação de containers.
- Container
Um container docker é uma instância executável de uma imagem.
Dockerfile
É o arquivo usando para criação de imagens docker, sendo formado por instruções como as mostradas a seguir:
- Instruções do dockerfile:
- FROM — referencia a imagem que será usada como base
- RUN — executa comandos bash durante a construção da imagem
- WORKDIR — aponta qual diretório raiz dentro da imagem
- CMD — executa comandos bash ao iniciar o container
- COPY — copia arquivos para a imagem
Tanto para criação quanto manuseio de imagens e containers se faz necessário o uso de comandos no terminal como os apresentados abaixo:
- Comandos:
- pull — baixa imagens do servidor de imagens
- build — cria imagem a partir do dockerfile
- run — cria/executa um container a partir de uma imagem
- rm — remove um ou mais containers
- rmi — remove uma ou mais imagens
- log — exibe os logs da aplicação executada pelo container
- start — inicia um ou mais containers que estejam parados
- stop — para um ou mais containers que estejam em execução
- restart — reinicia um ou mais containers que estejam em execução
Mão na massa
Com esses conceitos a mão, veremos exemplos de uso dessa ferramenta, que dão uma ideia de por que ela ficou tão popular.
Começaremos com comandos básicos, usando ferramentas que estão completas no Docker hub, prontas para uso. E avançaremos para a criação de nossas próprias imagens. Não levarei em consideração o passo a passo da instalação já que no site oficial já existe, e pode ser encontrado aqui https://docs.docker.com/install/#supported-platforms.
- Ferramentas no docker hub:
Para utilizar uma ferramenta que está completa no Docker hub é muito simples basta usar o comando docker pull
, para demonstrar isso vamos utilizar duas ferramentas o Redmine e o Jenkins.
- MySQL:
O MySQL é um banco de dados relacional, sua imagem pode ser encontrada aqui https://hub.docker.com/_/mysql. Para fazer download da imagem basta utilizar o comando: docker pull redmine
, aguardar o download que será algo parecido com isso:
Depois que o download estiver concluído é possível visualizar a imagem usando o comando docker images
que mostrará algo parecido com isso:
Agora que temos a imagem do MySQL basta executar o container para ter acesso ao banco de dados. Para isso usaremos o comando:
Onde: docker run <parameters> image <command>
-d
define que o container será executa em background e não impedirá que outros comando sejam executado no terminal depois disso.
--name
define o nome do container, sem isso será gerado um nome pelo docker.
-e
é usado para passar variáveis de ambiente para o container.
-p
faz com que o host tenha acesso a porta que o container abriu.
mysql
é o nome da imagem que foi baixada anteriormente.
Para ver os containers em execução basta executar o comando docker ps
e a saída do comando vai ser algo como a imagem abaixo:
Agora o MySQL já está em execução, para acessa-lo basta usar o client de sua preferencia. No exemplo abaixo usei o MySQL Workbench:
Como esse texto já está ficando muito longo, vou dividir em 2 partes. Para continuar lendo basta clicar aqui https://medium.com/passei-direto-product-and-technology/docker-visao-geral-parte-2-27c62ca32b51?source=friends_link&sk=7d88b19489ec784cbd6ec900690e960c