O que o Docker faz e quando você deve usá-lo?

Docker é uma ferramenta para executar seus aplicativos dentro de contêineres. Os contêineres empacotam todas as dependências e códigos de que seu aplicativo precisa para ser executado em um único arquivo, que será executado da mesma maneira em qualquer máquina.
O que é Docker?
O Docker é semelhante em conceito às máquinas virtuais, exceto por ser muito mais leve. Em vez de executar um sistema operacional separado inteiro (o que é uma sobrecarga enorme), o Docker executa contêineres, que usam o mesmo sistema operacional host e só virtualizam em nível de software.

O Docker Engine é executado em Linux, Windows e macOS e oferece suporte a Linux e Windows para contêineres Docker. O sabor exato do Linux não importa; a maioria das versões do Linux rodará o mesmo kernel e diferem apenas no software do usuário. O Docker pode instalar este software do usuário no contêiner, permitindo que você execute um contêiner CentOS no Ubuntu. No entanto, você não poderia, por exemplo, executar o FreeBSD no Ubuntu, pois os kernels são diferentes.
A imagem do contêiner do Docker inclui apenas o que seu aplicativo precisa para ser executado. Se o seu aplicativo usa nginx e Node. js, a imagem do contêiner irá incluí-los, mas você não será sobrecarregado com todos os outros aplicativos de área de usuário que geralmente encontra no Linux.
RELACIONADO: Como instalar o Docker e o Docker Compose no Linux
Por que o Docker é tão útil?
O Docker usa o mesmo tipo de controle de versão e pacote que ferramentas como Git e NPM fornecem e permite que você os use para seu software de servidor. Como seu contêiner é uma imagem única, é muito fácil controlar a versão de diferentes compilações de seu contêiner. E, como tudo está contido, torna o gerenciamento de todas as suas dependências muito mais fácil.
Com o Docker, seu ambiente de desenvolvimento será exatamente igual ao ambiente de produção e exatamente igual ao ambiente de desenvolvimento de todos os outros, aliviando o problema de estar quebrado em minha máquina ! ”
Se você quiser adicionar outro servidor ao seu cluster, não precisará se preocupar em reconfigurar esse servidor e reinstalar todas as dependências de que precisa. Depois de construir um contêiner, você pode compartilhar o arquivo do contêiner com qualquer pessoa, e eles podem facilmente ter seu aplicativo instalado e funcionando com alguns comandos. O Docker torna a execução de vários servidores muito fácil, especialmente com mecanismos de orquestração como Kubernetes e Docker Swarm.
O Docker também permite que você organize seu código para implantação em novos serviços. Digamos que você tenha um servidor da web que está usando para o seu aplicativo. Você provavelmente tem um monte de coisas instaladas nesse servidor, você tem um servidor da web nginx para hospedar conteúdo estático, você provavelmente tem um banco de dados para armazenar algumas coisas no back-end, talvez você tenha um servidor de API rodando em Express. js também. O ideal é que você os divida em aplicativos separados para serem executados em servidores separados, mas o desenvolvimento pode ficar confuso.

RELACIONADOO que é Node. JS e para que ele é usado?
O Docker ajuda a limpar isso; você pode empacotar seu servidor web e executá-lo com um contêiner nginx, pode empacotar seu servidor de API e executá-lo com um contêiner Node. js e pode empacotar seu banco de dados e executá-lo em seu próprio contêiner (embora essa possa não ser a melhor ideia, mas é possível). Você pode pegar esses três contêineres Docker e executá-los todos na mesma máquina. Se você precisar trocar de servidor, é tão fácil quanto migrar esses contêineres para um novo servidor. Se precisar escalar, você pode mover um desses contêineres para um novo servidor ou implantá-lo em um cluster de servidores.
O Docker também pode economizar dinheiro se você quiser executar vários aplicativos em um único VPS. Se cada aplicativo tiver dependências diferentes, é muito fácil para o seu servidor ficar desordenado, como um prato de jantar de Ação de Graças com tudo misturado. Com o Docker, você pode executar vários contêineres separados com, por exemplo, versões separadas do PHP, como uma bandeja de lanche de escola com tudo separado.
Como você usa o Docker?
Na produção, há uma abundância de serviços para hospedar contêineres Docker, incluindo AWS ECS, instâncias de contêiner do Azure, DigitalOcean Docker Droplets e muitos outros. Se o seu provedor não oferece hospedagem Docker gerenciada, você pode instalá-la você mesmo em seu VPS.
No desenvolvimento, os contêineres do Docker são simples de executar e requerem apenas alguns comandos. Para começar, você precisará instalar o mecanismo Docker em seu sistema operacional host. Para Windows e macOS, você pode usar o Docker Desktop, mas para o Linux, você precisará instalar a edição da comunidade do Docker a partir do seu gerenciador de pacotes. Para distros baseadas em Debian como Ubuntu, isso seria:
sudo apt-get install docker
Com qualquer método de instalação, você deve ter acesso ao Docker a partir da linha de comando agora. Para verificar se está funcionando, você pode executar:
docker executado hello-world
O Docker deve extrair esta imagem do tutorial do Docker Hub, um repositório online de muitas imagens de contêiner úteis. Você pode usar muitas dessas imagens como base para instalar seus aplicativos.
Vamos criar um servidor web simples baseado no nginx. O Nginx fornece uma base do Docker Hub que podemos usar como ponto de partida. Crie um novo diretório para armazenar os arquivos e abra-o:
mkdir ~ / dockertest & & cd ~ / dockertest
Todas as alterações feitas na imagem base nginx serão feitas com um Dockerfile. Dockerfiles são como makefiles para contêineres, eles definem quais comandos executar quando o Docker constrói a nova imagem com suas alterações. O Dockerfile é simplesmente chamado de Dockerfile, sem extensão. Crie este arquivo com touch Dockerfile e abra-o em um editor de texto. Cole isso em:
DE nginx COPIAR html / usr / share / nginx / html
A primeira linha é um comando do Docker que diz ao Docker para basear essa imagem na imagem nginx do hub. A segunda linha é outro comando que copia sobre um diretório desta pasta local (~ / dockertest / html) para a imagem Docker, neste caso substituindo a pasta HTML por nginx.
Você pode executar muitos comandos no Dockerfiles. Por exemplo, se seu aplicativo precisa instalar dependências, você pode fazer algo como EXECUTAR cd src / & & npm install. Tudo o que seu aplicativo precisa para inicializar a instalação e colocá-lo em funcionamento é definido no Dockerfile.
Ainda não criamos o diretório ./html, então vá em frente e execute:
mkdir html & & toque em html / index. html
Para criar o diretório e o HTML de entrada. Abra index. html e cole em algum HTML fictício:
<! DOCTYPE html > < html > < body > Olá, do nginx, dentro do Docker! Por dentro, seu computador? < / body > < / html >
Agora estamos prontos para cozinhar nossa imagem. Certifique-se de que você está na raiz do projeto (em ~ / dockertest, não na pasta html) e execute:
docker build -t dockertest.
O ponto final significa que usaremos o diretório atual como ponto de partida. O Docker deve encontrar o Dockerfile e começar a trabalhar. No entanto, deve levar apenas alguns segundos e, quando estiver pronto, você pode executá-lo com:
docker run --name DockerTest -p 8080: 80 -d dockertest
Isso iniciará um novo contêiner denominado DockerTest, usando o método “ dockertest ” imagem que criamos. O sinalizador -p vincula uma porta local a uma porta dentro do contêiner, neste caso vinculando a porta HTTP padrão do nginx (porta 80) à porta 8080 em sua máquina local. Abra o localhost: 8080 em seu navegador da web e você verá o nginx em execução.

Se você quiser mais configurações, poderá editar os arquivos de configuração do nginx &’ incluindo COPY nginx. conf /etc/nginx/nginx. conf e escrever seu próprio arquivo de configuração. É mais difícil de configurar do que editar o arquivo de configuração diretamente, já que você terá que reconstruir a imagem a cada edição. Mas para o benefício adicional de poder pegar o mesmo contêiner que você usa no desenvolvimento e implantá-lo na produção, é uma troca bastante justa.
Se desejar um tutorial mais aprofundado sobre rede, implantação e contêiner de aplicativos existentes, recomendamos a leitura deste guia.
Nenhum comentário