Este artigo complementa uma série de webinars sobre o deploy e a gestão de cargas de trabalho contínuas na nuvem . A série abrange os fundamentos dos contêudos, incluindo a gestão da vida útil dos contêudos, a implantação de aplicativos com múltiplos contêudos, a escalação de cargas de trabalho e o entendimento do Kubernetes, além de destacar práticas melhores para executar aplicativos estáveis.
Este tutorial inclui conceitos e comandos apresentados na primeira sessão da série, Introdução às Containers.
Introdução
O Docker é um plataforma para implantar e gerenciar aplicativos contínuos em recipientes. Os recipientes 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
- Docker Tools
- Docker Registry
O Docker Engine proporciona as capacidades principais de gerenciamento de recipientes. Ele interage com o sistema operativo Linux subjacente para expor APIs simples para lidar com o ciclo de vida de recipientes.
As ferramentas de Docker são um conjunto de ferramentas de linha de comando que se comunicam com a API exposta pelo motor do Docker. Elas são usadas para executar recipientes, criar novas imagens, configurar armazenamento e redes, e muitas outras operações que afetam o ciclo de vida de um recipiente.
Registro do Docker é o lugar onde as imagens de contêiner 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êineres, 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 inicialização de 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 vai ajudar-te 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 Dropleta 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 conectar-se à Dropleta por meio de SSH e rodar os seguintes comandos para remover quaisquer pacotes relacionados ao docker que já possam estar instalados e depois instalar o Docker da repositório oficial:
Depois de instalar o Docker, verifique a instalação com os seguintes comandos:
A seguir, o comando mostra detalhes sobre o motor de contêudos deployado no ambiente. O próximo comando verifica se as ferramentas do Docker estão corretamente instaladas e configuradas. Ele deve imprimir a versão de ambos o Motor e as Ferramentas do Docker.
### Step 2 — Lançando Containers
Os contêudos Docker são lançados a partir de imagens existentes que estão armazenadas na registro. As imagens em 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á muitas imagens que coincidam com o nome hello-world
. Escolha a que tem mais estrelas, indicando a popularidade da imagem.
Verifique as imagens disponíveis na sua ambientação atual com o seguinte comando:
Como não houve nenhuma imagem lançada ainda, 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 então executar ela localmente. Executar o docker images
novamente mostrará que temos a imagem hello-world
disponível localmente.
Vamos lançar um container mais significativo: um servidor Web Apache.
Você pode notar opções adicionais passadas ao comando docker run
. Aqui está a explicação dessas opções:
-p
— Este comando informa ao Motor do Docker que exponha a porta80
do contêiner na porta80
do host. Como o Apache escuta na porta80
, precisamos expor essa porta no host.--name
— Esse switch atribui um nome ao seu contênero em execução. Se omitirmos esta opção, o Motor do Docker irá atribuir um nome aleatoriamente.-d
— Essa opção instrui o Motor do Docker a executar o contênero em modo detachado. Sem essa opção, o contênero será executado no foreground bloqueando acesso à shell. Conseguindo puslando o contênero para o fundo, podemos continuar usando a shell enquanto o contênero estiver rodando.
Para verificar se nosso contênero de fato está rodando no fundo, tente esse comando:
O resultado 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:
Espere um momento e confira se você consegue acessar o servidor web:
Agora veja como parar e remover o contênero que está rodando com os seguintes comandos:
Running docker ps
novamente confirma que o contênero foi terminado.
Os contêudos de um diálogo são efé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, lancemos o diálogo com um novo switch para montar o diretório htdocs
. Apontando ele 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 comanda curl localhost
novamente mostra 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:
Executar 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 Docker a terminar sem parar primeiro.)
Passo 4 — Construir 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 confirmadas 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 verificar isso com o comando curl localhost
.
Antes de commitar o container modificado, é uma boa ideia parar-lo. 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 pesquisa no Docker Hub pelo navegador ou na linha de comandos.
Passo 5 — Lançamento de 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 marcar uma imagem local e enviar-la para o registro privado. Primeiro, vamos fazer o pull da imagem busybox
do Hub Docker. Depois marque-la.
O comando anterior confirma que a imagem busybox
agora está marcada com localhost:5000
, então faça o push da imagem para o registro privado.
Com a imagem enviada para o registro local, vamos tentar removê-la do ambiente e fazer o pull dela novamente do registro.
Veja como completou o ciclo completo de pull da imagem, marcar-la, enviar-la para o registro local e, finalmente, fazer o pull dela de volta.
Há casos em que você poderá querer executar o registro privado em um host dedicado. O Motor do Docker executado em máquinas diferentes conversarão com o registro remoto para pull e push de imagens.
Como o registro não é 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 existir, crie-o.
Adicione a seguinte entrada:
{
"insecure-registries" : ["REMOTE_REGISTRY_HOST:5000"]
}
Substitua REMOTE_REGISTRY_HOST
com o hostname ou IP da infraestrutura de registro remota. 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 os conceitos essenciais incluindo a instalação, gestão de containers, gerenciamento de imagens, armazenamento e registro privado. As sessões subsequentes e artigos deste conjunto ajudarão você a ir além dos fundamentos do Docker.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-docker