Introdução ao Docker. Desenvolvendo uma imagem simples do Docker para o seu próprio servidor.
A versão russa da tarefa pode ser encontrada no repositório.

Planeta Terra, em algum lugar no meio do mar, hoje.
Você nunca gostava de se mover. Muito barulho, pouca ação. Mas você conseguiu encontrar um ótimo trabalho em outra cidade para mergulhar no mundo do DevOps. E você não é de deixar um pouco de problema arruinar seus planos.
Da janela da sua cabine, você ouve o som das ondas, o navio balançando pacificamente nelas e se lembra do seu romance favorito sobre o mar - "Moby Dick". Embora a trama esteja longe de ser direta, com muitas digressões líricas e reflexões filosóficas, você, como todo mundo, associa este livro principalmente ao próprio Moby Dick - a baleia branca.
"Hmm ... baleia branca ..." É aqui que você se lembra que, durante a longa viagem que queria trabalhar na doca.
O NGINX (pronunciado "Engine-X") é um servidor proxy reverso de código aberto para HTTP, HTTPS, etc. O nginx também é usado como balanceador de carga, servidor da Web e para cache HTTP. O projeto NGINX se concentra no alto paralelismo, alto desempenho e baixo uso de memória.
O NGINX possui um processo principal e vários processos de trabalhador. A tarefa principal do processo principal é ler e verificar a configuração e gerenciar os processos do trabalhador. Os processos do trabalhador executam o processamento real das solicitações.
Como o funcionamento do nginx e seus módulos é definido no arquivo de configuração. Por padrão, o arquivo de configuração é chamado nginx.conf
Um contêiner é um novo "arquivo executável" que inclui todas as dependências que o produto precisa.
A principal vantagem do contêiner é o isolamento de dependências e um único ponto de inicialização de software simples.
Termos básicos:
O Docker é uma plataforma projetada para desenvolver, implantar e executar aplicativos em contêineres. O Docker é a ferramenta de contêinerização padrão 'De-Facto' no setor, mas não é o primeiro ou o último entre as tecnologias de contêinerização.
Os precursores dos recipientes do Docker eram máquinas virtuais. Uma máquina virtual, como um contêiner, isola o aplicativo e suas dependências do ambiente externo. No entanto, os contêineres do Docker têm vantagens sobre as máquinas virtuais. Por exemplo, eles são muito fáceis de portar, consumir menos recursos, iniciar e correr mais rápido.
Uma imagem do Docker consiste em camadas. Cada camada descreve alguma alteração a ser executada nos dados no contêiner em execução. A estrutura dos vínculos entre as camadas é hierárquica. Há uma camada base na qual as outras camadas são "sobrepostas". O DockerFile é usado para criar uma imagem. Cada instrução nele cria uma nova camada.
O Dockle é uma ferramenta de verificação de segurança de imagem de contêiner que pode ser usada para encontrar vulnerabilidades.
Principais recursos e benefícios do Dockle :
Docker Compose é uma ferramenta para lidar com tarefas relacionadas à implantação de projetos. O Docker Compose pode ser útil se vários serviços forem usados para manter o projeto funcionando.
O Docker Compose é usado para gerenciar simultaneamente vários contêineres que fazem parte de um aplicativo. Esta ferramenta oferece os mesmos recursos que o Docker, mas permite trabalhar com aplicativos distribuídos mais complexos, por exemplo, microsserviços.
Como resultado do trabalho, você deve fornecer um relatório sobre as duas primeiras tarefas. Cada parte da tarefa descreve o que deve ser adicionado ao relatório depois de concluído. Isso pode ser respostas para perguntas, capturas de tela, etc.
Como resultado da terceira tarefa, você deve fornecer arquivos de origem para executar o servidor da Web.
Como resultado da quarta e quinta tarefas, você deve fornecer o DockerFiles.
Como resultado da sexta tarefa, você deve fornecer um arquivo docker-compose.yml e o Dockerfiles necessário para executá-lo (se não for fornecido anteriormente).
Como objetivo final de sua pequena prática, você escolheu imediatamente escrever uma imagem do Docker para o seu próprio servidor da Web, então primeiro você precisa lidar com uma imagem pronta para o servidor. Você escolheu um nginx bastante simples.
== tarefa ==
docker pull . docker images . docker run -d [image_id|repository] . docker ps . docker inspect [container_id|container_name] . docker stop [container_id|container_name] . docker ps . docker restart [container_id|container_name] . NOTA: Não carregue arquivos pesados (> 10 MB) para git.
A imagem e o contêiner do docker estão prontos. Agora podemos analisar a configuração do NGINX e o status da página de exibição.
== tarefa ==
docker cp . docker rmi [image_id|repository] sem remover o contêiner primeiro. É hora de fazer uma pequena pausa no Docker para se preparar para o último estágio. É hora de escrever seu próprio servidor.
== tarefa ==
Hello World! . Agora tudo está pronto. Você pode começar a escrever a imagem do Docker para o servidor criado.
== tarefa ==
Ao escrever uma imagem do Docker Evite várias chamadas de instruções de execução
O NGINX pode ser instalado dentro do próprio Docker, ou você pode usar uma imagem pronta com Nginx como base.
docker build , especificando o nome e a tag. docker images que tudo é construído corretamente. *Se tudo for feito corretamente, depois de salvar o arquivo e reiniciar o contêiner, o arquivo de configuração dentro da imagem do Docker deve se atualizar sem nenhuma etapa extra
Depois de escrever a imagem, nunca é uma má idéia verificar a segurança.
== tarefa ==
dockle [image_id|repository] . Lá, você terminou seu aquecimento. Espere um minuto ... por que não tentar experimentar a implantação de um projeto composto por várias imagens do Docker de uma só vez?
== tarefa ==
docker-compose build e docker-compose up . Toque aqui para deixar seu feedback sobre o projeto . A equipe de produtos realmente tenta melhorar sua experiência educacional.