Este artigo complementa uma série de webinars sobre a implantação e gerenciamento de cargas de trabalho em contêineres na nuvem. A série abrange os fundamentos de containers, incluindo gerenciamento de ciclo de vida de containers, implantação de aplicações de múltiplos containers, dimensionamento de cargas de trabalho e entendimento do Kubernetes, além de destacar melhores práticas para execução de aplicações estado-afetadas.
Este tutorial inclui os conceitos e comandos abordados na primeira sessão da série, Iniciando com Contêineres.
Introdução
O Docker é uma plataforma para implantar e gerenciar aplicações em contêineres. Contêineres são populares entre desenvolvedores, administradores e engenheiros de DevOps por causa da flexibilidade que oferecem.
O Docker tem três componentes essenciais:
- Docker Engine
- Ferramentas do Docker
- Registro do Docker
O Docker Engine fornece as capacidades centrais de gerenciamento de containers. Ele se interface com o sistema operacional Linux subjacente para expor APIs simples para lidar com o ciclo de vida de containers.
As Ferramentas do Docker são um conjunto de ferramentas de linha de comando que se comunicam com a API exposta pelo Docker Engine. Elas são usadas para executar os containers, criar novos imagens, configurar armazenamento e redes e realizar muitas outras operações que afetam o ciclo de vida de um container.
Registro do Docker é o lugar onde as imagens de contêneros são armazenadas. Cada imagem pode ter múltiplas versões identificadas através de etiquetas únicas. Os usuários pulam imagens existentes do registro e push novas imagens para ele. Docker Hub é um registro hospedado gerenciado por Docker, Inc.. É também possível executar um registro dentro de suas próprias ambientações para mantê-los mais próximos do motor.
Ao final deste tutorial, você terá instalado o Docker em uma Dropleta DigitalOcean, gerenciado contêneres, trabalhado com imagens, adicionado persistência, e configurado um registro privado.
Pré-requisitos
Para seguir este tutorial, você precisará de:
-
Uma Dropleta Ubuntu 16.04 configurada seguindo esta tutorial de configuração inicial do servidor Ubuntu 16.04, incluindo um usuário não root com sudo e um firewall.
- A conta no Docker Hub. Este resumo do Docker Hub ajudará você a começar.
Por padrão, o comando docker
requer privilégios de root. No entanto, você pode executar o comando sem o prefixo sudo
se executar o docker
como um usuário da grupo docker.
Para configurar sua Droplets desta maneira, execute o comando sudo usermod -aG docker ${USER}
. Isso adicionará o usuário atual ao grupo docker
. Então, execute o comando su - ${USER}
para aplicar a nova membresia do grupo.
Esta guia de instruções assume que seu servidor está configurado para executar o comando docker
sem o prefixo sudo
.
Passo 1 — Instalando o Docker
Após SSH em uma Droplet, execute os seguintes comandos para remover quaisquer pacotes relacionados ao docker que já possam estar instalados e então instalar o Docker do repositório oficial:
Após instalar o Docker, verifique a instalação com os seguintes comandos:
A partir desta linha de comandos, você pode ver os detalhes da instalação do Docker Engine implantada no ambiente. O próximo comando verifica se as ferramentas do Docker estão corretamente instaladas e configuradas. Ele deve imprimir as versões do Docker Engine e das Ferramentas Docker.
### Step 2 — Lançando Containers
Os containers do Docker são lançados a partir de imagens já existentes que são armazenadas na registro. As imagens no Docker podem ser armazenadas em repositórios privados ou públicos. Repositórios privados requerem autenticação antes de seus usuários puxarem imagens. Imagens públicas podem ser acessadas por qualquer um.
Para buscar uma imagem chamada hello-world
, execute o seguinte comando:
Há possíveis múltiplos resultados para o nome hello-world
. Escolha a imagem com o número mais alto de estrelas, indicando a popularidade da imagem.
Verifique as imagens disponíveis na sua instância local com o seguinte comando:
Como não houve nenhuma imagem lançada até agora, não haverá nenhuma imagem disponível. Podemos agora baixar a imagem e executar ela localmente:
Se executarmos o comando docker run
sem primeiro baixar a imagem, o motor do Docker irá primeiro baixar a imagem e depois executar ela localmente. Executar o docker images
novamente mostra que temos a imagem hello-world
disponível localmente.
Vamos lançar um container mais significativo: um servidor Web Apache.
Você pode observar opções adicionais passadas ao comando docker run
. Aqui está a explicação dessas opções:
-p
— Este comando indica ao motor do Docker Engine que exponha a porta80
do contênero na porta80
do host. Como o Apache escuta na porta80
, precisamos expor essa porta no host.--name
— Este switch atribui um nome ao seu contênero em execução. Se omitirmos esta opção, o motor do Docker Engine irá atribuir um nome aleatorio.-d
— Essa opção instrui o motor do Docker Engine a executar o contênero em modo detachado. Sem essa opção, o contênero será executado na frente bloqueando acesso à shell. Pushando o contênero para o fundo, podemos continuar usando a shell enquanto o contênero está ainda rodando.
Para verificar se o nosso contênero de fato está rodando em fundo, tente esse comando:
A saída mostra que o contênero chamado web
está rodando com a porta 80
mapeada para a porta 80
do host.
Agora acesse o servidor web:
Experimente acessar o servidor web:
Para parar e remover o contênero que está rodando, use os seguintes comandos:
Running docker ps
novamente confirma que o contênero foi terminado.
Step 3 — Adicionando Armazenamento ao Contênero
Os contêudos de um diálogo são epímeros, o que significa que qualquer informação armazenada dentro de um diálogo será perdida quando o diálogo for terminado. Para manter dados além do tempo de vida de um diálogo, precisamos anexar uma volumem ao diálogo. Um volume é diretório da sistema de arquivos do host.
Comece criando um novo diretório no host:
Agora, lance o diálogo com um novo switch para montar o diretório htdocs
. Apontando-o para a raiz do servidor Web do Apache:
O -v
switch aponta o diretório htdocs
dentro do diálogo para o sistema de arquivos do host. Qualquer alteração feita neste diretório será visível em ambas as locais.
Acesso ao diretório do diálogo pela execução da seguinte comanda:
Esta comanda conecta sua consola à shell do diálogo em modo interativo. Você deve ver que você foi depositado dentro do diálogo.
Navegue para o diretório htdocs
e crie um simples arquivo HTML. Finalmente, saia da shell do diálogo:
Executando a seguinte comanda curl localhost
mostra novamente que o servidor Web está retornando a página que você criou.
Veja que não somente pode acessar esta página do diálogo, mas também a modificar:
Executando novamente a curl localhost
confirma que o servidor Web está exibindo a página criada do host.
Termine o diálogo com a seguinte comanda. (O -f
força o Docker a terminar sem parar primeiro.)
Passo 4 — Construindo Imagens
Além de executar imagens existentes do registro, você pode criar suas próprias imagens e armazená-las no registro.
Você pode criar novas imagens a partir de containers existentes. As alterações feitas ao container são primeiro cometidas e então as imagens são marcadas e enviadas para o registro.
Lancemos o container httpd
novamente e modifique o arquivo padrão index.html
:
O container agora está rodando com um index.html
personalizado. Você pode verificá-lo com o comando curl localhost
.
Antes de cometer o container modificado, é uma boa ideia parar ele. Depois que ele seja parado, execute o comando de commit:
Confira a criação da imagem com o comando docker images
. Ele mostra a imagem doweb
que acabou de ser criada.
Para marcar e armazenar esta imagem no Docker Hub, execute os seguintes comandos para enviar sua imagem para o registro público:
Veja a nova imagem na busca no Docker Hub na linha de comandos ou na web.
Passo 5 — Lançando um Registro Privado
É possível executar o registro de imagens em ambientes privados para manter as imagens mais seguras. Isso também reduz a latência entre o Motor do Docker e o repositório de imagens.
O Registro do Docker está disponível como um contêiner que pode ser lançado como qualquer outro contêiner. Como o registro armazena múltiplas imagens, é uma boa ideia anexar um volume de armazenamento à ele.
Observe que o contênero foi lançado no fundo com a porta 5000
exposta e o diretório registry
mapeado ao sistema de arquivos do host. Você pode verificar que o contênero está rodando executando o comando docker ps
.
Agora você pode verificar se o contênero está rodando executando o comando docker ps
. Nota que o contênero agora está marcado com localhost:5000
, então você pode conferir que a imagem busybox
foi marcada com o registro privado.
O comando anterior confirma que o contênero busybox
agora está marcado com localhost:5000
, então vamos enviar a imagem para o registro privado.
Com a imagem enviada para o registro local, vamos tentar removê-la do ambiente e fazer uma pull dela novamente do registro.
Veja como você passou por todo o ciclo de pull da imagem, marcar a imagem, enviá-la para o registro local e, finalmente, fazer um pull dela de volta.
Há casos em que você poderia desejar rodar o registro de imagens em um hospedeiro dedicado. O Motor do Docker rodando em máquinas diferentes conversarão com o registro remoto para pull e push das imagens.
Como o registro não está seguro, precisamos modificar as configurações do Motor de Imagens do Docker para permitir acesso ao registro sem segurança. Para fazer isso, edite o arquivo /etc/docker/daemon.json
. Se o arquivo não existe, crie-o.
Adicione a seguinte entrada:
{
"insecure-registries" : ["REMOTE_REGISTRY_HOST:5000"]
}
Substitua REMOTE_REGISTRY_HOST
com o hostname ou IP da instância do registro remoto. Restarte o Motor de Imagens do Docker para garantir que as alterações na configuração sejam aplicadas.
##Conclusão
Este tutorial teve como objetivo ajudar você a começar com o Docker. Ele abordou conceitos essenciais incluindo a instalação, gerenciamento de containers, gerenciamento de imagens, armazenamento e registro privado. As sessões e artigos subsequentes desta série lhe ajudarão a ir além dos fundamentos do Docker.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-docker