{"id":236,"date":"2024-03-11T10:30:17","date_gmt":"2024-03-11T13:30:17","guid":{"rendered":"https:\/\/adrianosantostreina.com.br\/blog\/?p=236"},"modified":"2024-04-06T14:52:23","modified_gmt":"2024-04-06T17:52:23","slug":"desmistificando-o-docker-uma-jornada-detalhada-pelo-mundo-dos-conteineres","status":"publish","type":"post","link":"https:\/\/adrianosantostreina.com.br\/blog\/desmistificando-o-docker-uma-jornada-detalhada-pelo-mundo-dos-conteineres\/","title":{"rendered":"Desmistificando o Docker: Uma Jornada Detalhada pelo Mundo dos Cont\u00eaineres"},"content":{"rendered":"\n<p>No universo da tecnologia, a gest\u00e3o eficiente de ambientes de desenvolvimento, teste e produ\u00e7\u00e3o \u00e9 crucial. O Docker, uma plataforma de cont\u00eaineres de c\u00f3digo aberto, se destaca como uma ferramenta essencial nesse cen\u00e1rio. Este artigo visa desmistificar o Docker, explorando desde seus conceitos fundamentais at\u00e9 exemplos pr\u00e1ticos de uso.<\/p>\n\n\n\n<p>Docker \u00e9 uma plataforma de c\u00f3digo aberto que permite a automa\u00e7\u00e3o, cria\u00e7\u00e3o, gerenciamento e provisionamento de ambientes por meio de cont\u00eaineres. Os cont\u00eaineres s\u00e3o unidades leves e autossuficientes que encapsulam todos os elementos necess\u00e1rios para executar um aplicativo, incluindo c\u00f3digo, bibliotecas, depend\u00eancias e configura\u00e7\u00f5es do ambiente.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Docker simplifica o processo de desenvolvimento, teste e implanta\u00e7\u00e3o de aplicativos, garantindo que eles funcionem consistentemente em diferentes ambientes. Basicamente encapsulamos em uma imagem tudo que \u00e9 necess\u00e1rio para que nossa solu\u00e7\u00e3o funcione, por exemplo: uma API desenvolvida em Delphi que acesse um banco de dados em Firebird, precisa do cliente do FB para acessar o banco, seja local ou externamente. Em uma imagem docker distribuiremos nosso execut\u00e1vel da API juntamente com o client do Firebird. Com base nesse exemplo, podemos entender como poder\u00edamos fazer para distribuir nossas apis em diferentes cen\u00e1rios.<\/p>\n\n\n\n<p><strong>Componentes Principais:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Imagens Docker:<\/strong> S\u00e3o modelos de sistemas de arquivos que cont\u00eam o c\u00f3digo-fonte, as bibliotecas, as depend\u00eancias e outros elementos necess\u00e1rios para executar uma aplica\u00e7\u00e3o. As imagens s\u00e3o a base para a cria\u00e7\u00e3o de cont\u00eaineres.<\/li>\n\n\n\n<li><strong>Cont\u00eaineres Docker:<\/strong> S\u00e3o inst\u00e2ncias em tempo de execu\u00e7\u00e3o de uma imagem Docker. Eles isolam e executam aplicativos de forma consistente, independentemente do ambiente subjacente. Cada cont\u00eainer compartilha o mesmo kernel do sistema operacional, mas \u00e9 isolado do restante do sistema, proporcionando consist\u00eancia e portabilidade.<\/li>\n\n\n\n<li><strong>Dockerfile:<\/strong> \u00c9 um arquivo de configura\u00e7\u00e3o que cont\u00e9m instru\u00e7\u00f5es passo a passo para construir uma imagem Docker. Define o ambiente, as depend\u00eancias e os comandos necess\u00e1rios para configurar o cont\u00eainer.<\/li>\n\n\n\n<li><strong>Docker Hub:<\/strong> \u00c9 um reposit\u00f3rio p\u00fablico de imagens Docker, onde os desenvolvedores podem compartilhar, armazenar e distribuir suas imagens. O Docker Hub simplifica o processo de descoberta e utiliza\u00e7\u00e3o de imagens prontas para uso.<\/li>\n<\/ol>\n\n\n\n<p><strong>Funcionamento:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Isolamento:<\/strong> Docker utiliza recursos do kernel do sistema operacional para fornecer isolamento entre os cont\u00eaineres e o ambiente hospedeiro, garantindo que as depend\u00eancias n\u00e3o entrem em conflito.<\/li>\n\n\n\n<li><strong>Efici\u00eancia:<\/strong> Ao compartilhar o kernel do sistema operacional, os cont\u00eaineres s\u00e3o mais leves e iniciam mais rapidamente do que m\u00e1quinas virtuais tradicionais, tornando o processo de desenvolvimento e implanta\u00e7\u00e3o mais eficiente.<\/li>\n<\/ul>\n\n\n\n<p><strong>Principais Conceitos:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Portabilidade:<\/strong> Cont\u00eaineres garantem que um aplicativo funcione de maneira consistente em diferentes ambientes, desde o desenvolvimento at\u00e9 a produ\u00e7\u00e3o.<\/li>\n\n\n\n<li><strong>Consist\u00eancia:<\/strong> As imagens Docker encapsulam todas as depend\u00eancias, garantindo que a aplica\u00e7\u00e3o se comporte da mesma forma em diferentes est\u00e1gios do ciclo de vida.<\/li>\n\n\n\n<li><strong>Escalabilidade:<\/strong> Docker facilita a escalabilidade horizontal, permitindo a execu\u00e7\u00e3o de v\u00e1rias inst\u00e2ncias de aplicativos de forma r\u00e1pida e eficiente.<\/li>\n<\/ul>\n\n\n\n<p>Docker oferece uma abordagem inovadora para o desenvolvimento e implanta\u00e7\u00e3o de aplicativos, fornecendo consist\u00eancia, portabilidade e efici\u00eancia. Ao encapsular aplica\u00e7\u00f5es em cont\u00eaineres, os desenvolvedores podem garantir que seus aplicativos funcionem de maneira confi\u00e1vel em diversos ambientes, simplificando o processo de desenvolvimento, teste e produ\u00e7\u00e3o.<\/p>\n\n\n\n<p><strong>Quando usar o Docker \u00e9 a melhor op\u00e7\u00e3o?<\/strong> Docker \u00e9 ideal em situa\u00e7\u00f5es onde a consist\u00eancia, portabilidade e efici\u00eancia na implanta\u00e7\u00e3o s\u00e3o cruciais. \u00c9 particularmente \u00fatil em arquiteturas de microsservi\u00e7os, ambientes de desenvolvimento e implanta\u00e7\u00f5es em nuvem.<\/p>\n\n\n\n<p>Costumo citar sempre a Amazon em meus artigos e v\u00eddeos, mas a pedido de leitores e seguidores:<\/p>\n\n\n\n<p><strong>Servi\u00e7os Cloud al\u00e9m do Amazon AWS para Docker:<\/strong> Al\u00e9m da AWS, voc\u00ea pode utilizar o Docker em servi\u00e7os de nuvem como Google Cloud Platform (GCP), Microsoft Azure, IBM Cloud, e diversos provedores de servi\u00e7os especializados em cont\u00eaineres, como o Docker Hub, Google Container Registry, e Azure Container Registry.<\/p>\n\n\n\n<p>Sendo mais detalhista e espec\u00edfico, vejamos um pouco sobre Docker:<\/p>\n\n\n\n<p><strong>Imagens Docker:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Imagens s\u00e3o a espinha dorsal do Docker, contendo o sistema de arquivos com o c\u00f3digo, bibliotecas, depend\u00eancias e configura\u00e7\u00f5es necess\u00e1rias.<\/li>\n\n\n\n<li>Exemplo: <span class=\"crayon-inline lang:delphi decode:true\"><code>docker pull ubuntu:18.04<\/code><\/span><\/li>\n<\/ul>\n\n\n\n<p>O comando acima far\u00e1 o download de uma imagem docker do Ubuntu vers\u00e3o 18:04 para ser usada localmente em um equipamento Windows ou Linux. O comando, evidentemente, \u00e9 executado no Terminal e necessita da instala\u00e7\u00e3o pr\u00e9via do Docker. Veremos mais a seguinte um pouco sobre instala\u00e7\u00e3o.<\/p>\n\n\n\n<p><strong>Cont\u00eaineres Docker:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cont\u00eaineres s\u00e3o inst\u00e2ncias em tempo de execu\u00e7\u00e3o de uma imagem Docker, oferecendo isolamento e efici\u00eancia. Isso quer dizer que podemos ter v\u00e1rias inst\u00e2ncias da mesma imagem docker no ar para realizar diferentes teste ou simular diferentes cen\u00e1rios.<br><br>\u00c9 comum comparar uma imagem docker a uma m\u00e1quina virtual (Veremos mais adiante as diferen\u00e7as), mas o conceito \u00e9 bastante diferente.<\/li>\n\n\n\n<li>Exemplo: <span class=\"crayon-inline lang:delphi decode:true\"><code>docker run -it ubuntu:18.04 \/bin\/bash<\/code><\/span><\/li>\n<\/ul>\n\n\n\n<p>No como acima estamos executando a inst\u00e2ncia docker que baixamos anteriormente e quando iniciada o \/bin\/bash, terminal no Linux, ser\u00e1 executado.<\/p>\n\n\n\n<p><strong>Dockerfile:<\/strong><\/p>\n\n\n\n<p>O Dockerfile \u00e9 o arquivo que criamos e definimos as configura\u00e7\u00f5es, requisitos e tudo que precisa ser executado em um conteiner.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Um arquivo de configura\u00e7\u00e3o que define passo a passo como construir uma imagem Docker.<\/li>\n\n\n\n<li>Exemplo:<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:yaml decode:true \" >FROM ubuntu:18.04\nRUN apt-get update &amp;&amp; apt-get install -y nginx\nCMD [\"nginx\", \"-g\", \"daemon off;\"]<\/pre><\/div>\n\n\n\n<p>No exemplo acima estamos construindo uma imagem baseada em \u00dcbuntu 18.04, fazendo update no Linux e instalando o NGINX (Caso n\u00e3o saiba o que \u00e9 NGINX <a href=\"https:\/\/adrianosantos.link\/NGINX\" target=\"_blank\" rel=\"noreferrer noopener\">leia esse artigo<\/a>) e em seguida executando o NGINX.<\/p>\n\n\n\n<p><strong>Vantagens e Casos de Uso:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Portabilidade e Consist\u00eancia:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Docker garante que o ambiente de desenvolvimento seja id\u00eantico ao de produ\u00e7\u00e3o, eliminando problemas de &#8220;funciona na minha m\u00e1quina&#8221;.<\/li>\n\n\n\n<li>Exemplo: Desenvolver em um ambiente local e implantar em um servidor sem surpresas.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Efici\u00eancia e Escalabilidade:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Cont\u00eaineres compartilham o mesmo kernel, economizando recursos e permitindo a r\u00e1pida escalabilidade horizontal.<\/li>\n\n\n\n<li>Exemplo: Escalar um servi\u00e7o web para suportar aumento de tr\u00e1fego.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Facilidade de Manuten\u00e7\u00e3o:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Atualiza\u00e7\u00f5es e corre\u00e7\u00f5es s\u00e3o aplicadas nas imagens, garantindo consist\u00eancia em todo o ciclo de vida do aplicativo.<\/li>\n\n\n\n<li>Exemplo: Aplicar patches de seguran\u00e7a sem impactar outras partes do sistema.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading has-black-color has-text-color has-link-color wp-elements-9c133ee4b95e9e798f676d9b644b0fb6\"><\/h2>\n\n\n\n<p class=\"has-large-font-size\"><strong>Exemplos Pr\u00e1ticos<\/strong><\/p>\n\n\n\n<p>Existem milhares de exemplos que poderia citar aqui para que ficasse f\u00e1cil o entendimento de onde utilizar o docker. Vejamos um deles. Nesse caso vamos executar um um conteiner <strong>nginx<\/strong>.<\/p>\n\n\n\n<p><strong>Executando um Cont\u00eainer Nginx:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span class=\"crayon-inline lang:delphi decode:true\"><code>docker run -d -p 8080:80<\/code><\/span><\/li>\n\n\n\n<li>Acesse <code>http:\/\/localhost:8080<\/code> para ver o servidor Nginx em execu\u00e7\u00e3o.<\/li>\n<\/ul>\n\n\n\n<p>A partir da execu\u00e7\u00e3o do primeiro comando, run, teremos um conteiner NGINX em execu\u00e7\u00e3o pronto para responder a comandos. Nesse caso ele apenas sobe uma inst\u00e2ncia do NGINX que por sua vez fica dispon\u00edvel na porta 8080, ou seja, a partir do momento que tentarmos acessar o endere\u00e7o http:\/\/localhost:8080, bateremos diretamente na porta de entrada do NGINX exibindo a p\u00e1gina de boas vindas. <\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Um fato interessante aqui. A imagem docker do nginx \u00e9 baixada para o computador onde o comando foi realizado usando <strong>docker pull nginx<\/strong>. Caso n\u00e3o tenha executado esse comando antes, o docker far\u00e1 uma verifica\u00e7\u00e3o e baixar\u00e1 a image no momento do <strong>docker run <\/strong>caso ela n\u00e3o exista localmente.<\/p>\n<\/blockquote>\n\n\n\n<p><strong>Construindo e Executando uma Aplica\u00e7\u00e3o Node.js<\/strong><\/p>\n\n\n\n<p>Como mencionado, podemos e devemos criar nossas iamgems docker. Para isso escrevemos um arquivo chamado Dockerfile (sem extens\u00e3o) e definimos nesse arquivo o que desejamos na imagem que posteriormente se transformar\u00e1 em nosso conteiner.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Crie um arquivo <code>Dockerfile<\/code>:<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:yaml decode:true \" >FROM node:14\nWORKDIR \/app\nCOPY package*.json .\/\nRUN npm install\nCOPY . .\nEXPOSE 3000\nCMD [\"npm\", \"start\"]<\/pre><\/div>\n\n\n\n<p>No c\u00f3digo acima estamos criando uma imagem partindo do <strong>node<\/strong> 14. Definimos um diret\u00f3rio de trabalho e copiamos os pacotes necess\u00e1rios para .\/ a pasta raiz. em seguida instalamos o node usando o comando <strong>npm<\/strong>. Se n\u00e3o est\u00e1 familiarizado com isso, n\u00e3o se preocupe, apenas concentre-se em entender os princ\u00edpios da cria\u00e7\u00e3o da imagem. Em seguida n\u00f3s expomos a porta 3000, onde o Node.js estar\u00e1 rodando, e executamos o CMD.<\/p>\n\n\n\n<p>Uma vez criado arquivo, basta que fa\u00e7amos o build, a constru\u00e7\u00e3o da imagem. <\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:yaml decode:true \" >    docker build -t minha-app-node .\n    docker run -p 3000:3000 minha-app-node<\/pre><\/div>\n\n\n\n<p>O comando build constr\u00f3i a imagem com o nome definido e o comando run a executa.<\/p>\n\n\n\n<p><strong>Diferen\u00e7as entre M\u00e1quinas Virtuais (VMs) e Docker:<\/strong><\/p>\n\n\n\n<p>Ambas as m\u00e1quinas virtuais (VMs) e cont\u00eaineres Docker s\u00e3o tecnologias que visam virtualizar e isolar ambientes de execu\u00e7\u00e3o, mas h\u00e1 diferen\u00e7as significativas em suas abordagens e caracter\u00edsticas. Vamos explorar essas diferen\u00e7as:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Arquitetura:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>VMs:<\/strong> Cada VM inclui um sistema operacional completo, com seu pr\u00f3prio kernel, drivers e recursos. Virtualizadores (como VMware, VirtualBox) gerenciam v\u00e1rias VMs, criando uma camada de virtualiza\u00e7\u00e3o completa.<\/li>\n\n\n\n<li><strong>Docker:<\/strong> Compartilha o kernel do sistema operacional hospedeiro, eliminando a necessidade de m\u00faltiplos sistemas operacionais completos. Cont\u00eaineres compartilham o kernel, mas isolam os processos e recursos, proporcionando uma abordagem mais leve.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Isolamento:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>VMs:<\/strong> Oferecem isolamento completo, j\u00e1 que cada VM possui seu pr\u00f3prio sistema operacional. Isso pode levar a uma utiliza\u00e7\u00e3o mais intensiva de recursos.<\/li>\n\n\n\n<li><strong>Docker:<\/strong> Usa namespaces e cgroups do kernel para isolar processos, redes e sistemas de arquivos. Embora os cont\u00eaineres sejam isolados, eles compartilham o mesmo kernel, tornando-os mais eficientes.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Desempenho:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>VMs:<\/strong> Tendem a ter maior sobrecarga de recursos, devido \u00e0 necessidade de executar m\u00faltiplos sistemas operacionais completos.<\/li>\n\n\n\n<li><strong>Docker:<\/strong> Por compartilhar o kernel, cont\u00eaineres s\u00e3o mais leves e iniciam mais rapidamente. Isso os torna mais eficientes em termos de recursos e tempo de inicializa\u00e7\u00e3o.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Tamanho e Velocidade:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>VMs:<\/strong> Requerem um tamanho consider\u00e1vel de armazenamento para a imagem do sistema operacional completo. O tempo de inicializa\u00e7\u00e3o pode ser mais longo.<\/li>\n\n\n\n<li><strong>Docker:<\/strong> As imagens s\u00e3o menores e mais r\u00e1pidas de baixar, pois cont\u00eam apenas o necess\u00e1rio para executar o aplicativo. Os cont\u00eaineres iniciam rapidamente.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Implanta\u00e7\u00e3o e Escalabilidade:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>VMs:<\/strong> Tendem a ser mais lentas para implantar e escalar devido \u00e0 sobrecarga adicional do sistema operacional completo.<\/li>\n\n\n\n<li><strong>Docker:<\/strong> Facilita a implanta\u00e7\u00e3o r\u00e1pida e a escalabilidade horizontal, permitindo a execu\u00e7\u00e3o de v\u00e1rios cont\u00eaineres em um host.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Gerenciamento de Recursos:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>VMs:<\/strong> Alocam recursos fixos, mesmo que n\u00e3o estejam sendo totalmente utilizados, levando a poss\u00edvel subutiliza\u00e7\u00e3o.<\/li>\n\n\n\n<li><strong>Docker:<\/strong> Usa cgroups para alocar recursos dinamicamente, permitindo um melhor aproveitamento e adapta\u00e7\u00e3o \u00e0s demandas do aplicativo.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/03\/image.png\" alt=\"\" class=\"wp-image-239\" srcset=\"https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/03\/image.png 1024w, https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/03\/image-300x169.png 300w, https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/03\/image-768x432.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/adrianosantos.link\/treinamentos\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"800\" height=\"150\" src=\"https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/02\/Banner-Hotmart-1.png\" alt=\"\" class=\"wp-image-222\" srcset=\"https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/02\/Banner-Hotmart-1.png 800w, https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/02\/Banner-Hotmart-1-300x56.png 300w, https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/02\/Banner-Hotmart-1-768x144.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/figure>\n\n\n\n<p>As VMs e os cont\u00eaineres Docker s\u00e3o ferramentas poderosas, cada uma com suas vantagens e casos de uso espec\u00edficos. Enquanto as VMs oferecem isolamento mais robusto, os cont\u00eaineres Docker se destacam pela efici\u00eancia, velocidade e facilidade de implanta\u00e7\u00e3o. A escolha entre eles depender\u00e1 das necessidades espec\u00edficas do projeto e dos requisitos de recursos. Em muitos casos, a combina\u00e7\u00e3o de ambas as tecnologias \u00e9 adotada para tirar o melhor proveito de suas caracter\u00edsticas individuais.<\/p>\n\n\n\n<p><strong>Instalando o Docker Desktop no Windows: Um Guia Passo a Passo<\/strong><\/p>\n\n\n\n<p>O Docker Desktop \u00e9 uma ferramenta poderosa que permite executar cont\u00eaineres Docker em sistemas Windows de maneira f\u00e1cil e eficiente. Siga este guia passo a passo para instalar o Docker Desktop no seu ambiente Windows:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Devo alert\u00e1-lo de que o Docker Desktop \u00e9 uma execelente alternativa para se estudar docker no Windows, mas infelizmente h\u00e1 um custo. O Docker Desktop pode causar lentid\u00e3o no equipamento, portanto levante o Docker Destkop somente durante os estudos e depois feche a aplica\u00e7\u00e3o e pare no servi\u00e7o no gerenciador de servi\u00e7os do Windows. Uma alternativa \u00e9 instalar o WSL (Windows Subsistema para Linux) no seu Windows 10 ou 11 e nele instalar o Docker, \u00e9 muito mais leve.<\/p>\n<\/blockquote>\n\n\n\n<p><strong>Requisitos do Sistema:<\/strong><\/p>\n\n\n\n<p>Antes de come\u00e7ar, certifique-se de que seu sistema atenda aos requisitos m\u00ednimos para instala\u00e7\u00e3o do Docker Desktop:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Um sistema operacional Windows 10 com suporte a Hyper-V (Pro, Enterprise ou Education).<\/li>\n\n\n\n<li>Virtualiza\u00e7\u00e3o habilitada no BIOS\/UEFI.<\/li>\n\n\n\n<li>No m\u00ednimo, 4 GB de RAM.<\/li>\n<\/ul>\n\n\n\n<p><strong>Passo 1: Fa\u00e7a o Download do Docker Desktop:<\/strong><\/p>\n\n\n\n<p>Acesse o site oficial do Docker para baixar o instalador do Docker Desktop. Abra o navegador e v\u00e1 para: <a>https:\/\/www.docker.com\/products\/docker-desktop<\/a><\/p>\n\n\n\n<p><strong>Passo 2: Baixe o Instalador:<\/strong><\/p>\n\n\n\n<p>Clique no bot\u00e3o &#8220;Get Docker Desktop&#8221; para iniciar o download do instalador. Aguarde at\u00e9 que o download seja conclu\u00eddo.<\/p>\n\n\n\n<p><strong>Passo 3: Execute o Instalador:<\/strong><\/p>\n\n\n\n<p>Ap\u00f3s o download, execute o arquivo de instala\u00e7\u00e3o (normalmente chamado &#8220;Docker Desktop Installer.exe&#8221;).<\/p>\n\n\n\n<p><strong>Passo 4: Configure as Op\u00e7\u00f5es de Instala\u00e7\u00e3o:<\/strong><\/p>\n\n\n\n<p>Durante o processo de instala\u00e7\u00e3o, voc\u00ea ser\u00e1 apresentado a algumas op\u00e7\u00f5es de configura\u00e7\u00e3o:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ative o Hyper-V:<\/strong> O Docker Desktop requer a ativa\u00e7\u00e3o do Hyper-V. Se ainda n\u00e3o estiver ativado, o instalador solicitar\u00e1 permiss\u00f5es para fazer isso. Reinicie o computador, se necess\u00e1rio.<\/li>\n\n\n\n<li><strong>Instala\u00e7\u00e3o do WSL 2:<\/strong> O Docker Desktop usa o Windows Subsystem for Linux 2 (WSL 2). O instalador oferecer\u00e1 a op\u00e7\u00e3o de instalar automaticamente a \u00faltima vers\u00e3o do WSL 2.<\/li>\n\n\n\n<li><strong>Ative o Windows Features:<\/strong> O instalador pode solicitar a ativa\u00e7\u00e3o de recursos do Windows necess\u00e1rios para o Docker Desktop. Concordar com essas solicita\u00e7\u00f5es \u00e9 essencial.<\/li>\n<\/ul>\n\n\n\n<p><strong>Passo 5: Conclua a Instala\u00e7\u00e3o:<\/strong><\/p>\n\n\n\n<p>Aguarde at\u00e9 que o instalador conclua a instala\u00e7\u00e3o do Docker Desktop. Isso pode levar alguns minutos, dependendo da configura\u00e7\u00e3o do seu sistema.<\/p>\n\n\n\n<p><strong>Passo 6: Inicie o Docker Desktop:<\/strong><\/p>\n\n\n\n<p>Ap\u00f3s a conclus\u00e3o da instala\u00e7\u00e3o, o Docker Desktop ser\u00e1 iniciado automaticamente. Um \u00edcone do Docker aparecer\u00e1 na barra de tarefas.<\/p>\n\n\n\n<p><strong>Passo 7: Verifique a Instala\u00e7\u00e3o:<\/strong><\/p>\n\n\n\n<p>Para garantir que a instala\u00e7\u00e3o foi bem-sucedida, abra o PowerShell ou o prompt de comando e execute o seguinte comando para verificar a vers\u00e3o do Docker:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:yaml decode:true \" >docker --version<\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/go.hotmart.com\/N88975572T\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"800\" height=\"150\" src=\"https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/03\/Horse-em-Docker-no-Amazon-AWS.png\" alt=\"\" class=\"wp-image-238\" srcset=\"https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/03\/Horse-em-Docker-no-Amazon-AWS.png 800w, https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/03\/Horse-em-Docker-no-Amazon-AWS-300x56.png 300w, https:\/\/adrianosantostreina.com.br\/blog\/wp-content\/uploads\/2024\/03\/Horse-em-Docker-no-Amazon-AWS-768x144.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/figure>\n\n\n\n<p>Se a instala\u00e7\u00e3o foi bem-sucedida, voc\u00ea ver\u00e1 a vers\u00e3o do Docker instalada no seu sistema.<\/p>\n\n\n\n<p>Agora voc\u00ea est\u00e1 pronto para come\u00e7ar a usar o Docker Desktop no seu ambiente Windows. Explore as capacidades do Docker, crie e execute cont\u00eaineres para facilitar o desenvolvimento e implanta\u00e7\u00e3o de suas aplica\u00e7\u00f5es.<\/p>\n\n\n\n<p>Voc\u00ea pode aprender mais no meu canal do YouTube especificamente nesse v\u00eddeo:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Introdu\u00e7\u00e3o ao WSL, Docker e Horse\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/Tm_YvIabbMc?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><strong>Instalando o Docker no WSL (Windows Subsystem for Linux) no Windows 10 ou 11:<\/strong><\/p>\n\n\n\n<p>Se voc\u00ea deseja utilizar o Docker no WSL. Como mencionei anteriormente \u00e9 mais leve e r\u00e1pido. E um fato importante \u00e9 que nesse caso usar\u00e1 100% de comandos no terminal o que \u00e9 bastante recomendado. <\/p>\n\n\n\n<p><strong>Ativando o WSL:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Certifique-se de que o WSL esteja ativado no Windows. Voc\u00ea pode ativar o recurso WSL nas configura\u00e7\u00f5es do Windows ou usando o PowerShell com privil\u00e9gios elevados:<br><\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:yaml decode:true \" >dism.exe \/online \/enable-feature \/featurename:Microsoft-Windows-Subsystem-Linux \/all \/norestart<\/pre><\/div>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Instalando uma Distribui\u00e7\u00e3o Linux no WSL:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Baixe uma distribui\u00e7\u00e3o Linux da Microsoft Store, como o Ubuntu.<\/li>\n\n\n\n<li>Instale a distribui\u00e7\u00e3o e configure um usu\u00e1rio e senha durante a instala\u00e7\u00e3o.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Atualizando o WSL 2:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Certifique-se de estar usando o WSL 2 para obter melhor desempenho e suporte ao Docker. Voc\u00ea pode atualizar para o WSL 2 seguindo as instru\u00e7\u00f5es na documenta\u00e7\u00e3o oficial da Microsoft.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Instalando o Docker no WSL:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Baixe e instale o Docker Desktop no Windows como mencionado anteriormente.<\/li>\n\n\n\n<li>Durante a instala\u00e7\u00e3o do Docker Desktop, certifique-se de habilitar a integra\u00e7\u00e3o com o WSL e selecione a distribui\u00e7\u00e3o Linux instalada.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Testando a Instala\u00e7\u00e3o no WSL:<\/strong>\n<ul class=\"wp-block-list\">\n<li>No terminal do WSL, execute o comando <code>docker run hello-world<\/code> para testar a instala\u00e7\u00e3o do Docker no ambiente Linux do WSL.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>Com esses passos, voc\u00ea ter\u00e1 o Docker Desktop instalado no Windows e configurado para uso no ambiente Windows Subsystem for Linux (WSL). Essa combina\u00e7\u00e3o oferece uma experi\u00eancia de desenvolvimento eficiente e consistente em ambientes Windows com a flexibilidade e poder do Docker.<\/p>\n\n\n\n<p><strong>Conclus\u00e3o<\/strong><\/p>\n\n\n\n<p>Ao longo deste artigo, exploramos detalhadamente o Docker, uma ferramenta revolucion\u00e1ria que simplifica o desenvolvimento e a implanta\u00e7\u00e3o de aplicativos por meio de cont\u00eaineres. Compreendemos os fundamentos do Docker, destacando suas principais vantagens, como portabilidade, efici\u00eancia e consist\u00eancia, tornando-o uma escolha valiosa para desenvolvedores e equipes de opera\u00e7\u00f5es.<\/p>\n\n\n\n<p>Demos passos pr\u00e1ticos desde a instala\u00e7\u00e3o do Docker Desktop no Windows, uma experi\u00eancia amig\u00e1vel e acess\u00edvel para usu\u00e1rios do sistema operacional da Microsoft. Atrav\u00e9s de exemplos simples, demonstramos como executar cont\u00eaineres Nginx e construir uma aplica\u00e7\u00e3o Node.js, ilustrando a facilidade de uso e a flexibilidade oferecida pelo Docker.<\/p>\n\n\n\n<p>Al\u00e9m disso, exploramos a integra\u00e7\u00e3o do Docker com o Windows Subsystem for Linux (WSL), destacando como essa combina\u00e7\u00e3o proporciona um ambiente de desenvolvimento poderoso e coeso. A instala\u00e7\u00e3o do Docker no WSL abre portas para um ecossistema que harmoniza as vantagens do Windows e as caracter\u00edsticas robustas do Linux, proporcionando uma experi\u00eancia integrada e eficiente.<\/p>\n\n\n\n<p>Ao considerar a instala\u00e7\u00e3o do Docker no Windows, seja nativamente ou atrav\u00e9s do WSL, os desenvolvedores t\u00eam em m\u00e3os uma ferramenta que transcende barreiras de ambientes, garantindo que as aplica\u00e7\u00f5es se comportem de maneira consistente desde o desenvolvimento at\u00e9 a produ\u00e7\u00e3o. A escalabilidade, a manuten\u00e7\u00e3o simplificada e a gest\u00e3o eficiente de recursos s\u00e3o apenas alguns dos benef\u00edcios que o Docker oferece a desenvolvedores e equipes de opera\u00e7\u00f5es.<\/p>\n\n\n\n<p>Portanto, ao embarcar nesta jornada com o Docker no ecossistema Windows, abra\u00e7amos uma abordagem inovadora e eficiente para o desenvolvimento e a implanta\u00e7\u00e3o de aplicativos. Que essa compreens\u00e3o aprofundada e os exemplos pr\u00e1ticos fornecidos sirvam como guia para maximizar o potencial do Docker em suas iniciativas de desenvolvimento, capacitando voc\u00ea a enfrentar os desafios modernos da tecnologia com confian\u00e7a e efici\u00eancia.<\/p>\n\n\n\n<p>Comente o que achou e o que gostaria de aprender mais \ud83d\ude09<\/p>\n\n\n\n<p>Comunidade no <a href=\"https:\/\/t.me\/AdrianoSantosCommunity\">Telegram<\/a><\/p>\n\n\n\n<p>\ud83d\ude80Comente no campo abaixo \ud83d\udc47\ud83d\udc47\ud83d\udc47 o que achou e qual sua d\u00favida.<\/p>\n\n\n\n<p>Te vejo na pr\u00f3xima<\/p>\n\n\n\n<p>Te vejo por ai<\/p>\n\n\n\n<p>Adriano Santos<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>No universo da tecnologia, a gest\u00e3o eficiente de ambientes de desenvolvimento, teste e produ\u00e7\u00e3o \u00e9 crucial. O Docker, uma plataforma de cont\u00eaineres de c\u00f3digo aberto, se destaca como uma ferramenta essencial nesse cen\u00e1rio. Este artigo visa desmistificar o Docker, explorando desde seus conceitos fundamentais at\u00e9 exemplos pr\u00e1ticos de uso. Docker \u00e9 uma plataforma de c\u00f3digo [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":240,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-236","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/236","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/comments?post=236"}],"version-history":[{"count":10,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/236\/revisions"}],"predecessor-version":[{"id":473,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/236\/revisions\/473"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media\/240"}],"wp:attachment":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media?parent=236"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/categories?post=236"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/tags?post=236"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}