{"id":5784,"date":"2024-10-21T16:00:00","date_gmt":"2024-10-21T19:00:00","guid":{"rendered":"https:\/\/geekblogti.wpengine.com\/?p=5784"},"modified":"2025-02-12T09:57:51","modified_gmt":"2025-02-12T12:57:51","slug":"docker-na-pratica-como-construir-uma-aplicacao","status":"publish","type":"post","link":"https:\/\/www.geekhunter.com/pt/blog\/docker-na-pratica-como-construir-uma-aplicacao\/","title":{"rendered":"Como construir uma aplica\u00e7\u00e3o com Docker?"},"content":{"rendered":"\r\n<p class=\"wp-block-paragraph\">Independente de voc\u00ea estar planejando iniciar sua <a href=\"https:\/\/www.geekhunter.com/pt/blog\/tudo-sobre-devops-iniciantes\/\"><strong>carreira em DevOps<\/strong><\/a> ou j\u00e1 estar nela, o Docker precisa estar listado em seu curr\u00edculo.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Pois Docker \u00e9 uma das habilidades essenciais para quem est\u00e1 na arena dos DevOps atualmente.<br \/><br \/>Hoje, estou aqui para falar sobre o tema que \u00e9 bastante relevante para quem desenvolve aplica\u00e7\u00f5es e realiza publica\u00e7\u00e3o em provedores de nuvem como <a href=\"https:\/\/geekblogti.wpengine.com\/tudo-sobre-cloud-computing-azure-aws-gcp\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>AWS, Azure, Google Cloud Platform<\/strong><\/a> e outros.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-o-que-e-docker\">O que \u00e9 Docker<\/h2>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Em termos simples, o Docker \u00e9 uma <strong>plataforma de software que simplifica o processo de constru\u00e7\u00e3o, execu\u00e7\u00e3o, gerenciamento e distribui\u00e7\u00e3o de aplicativos<\/strong>.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ele faz isso <strong>virtualizando o sistema operacional do computador<\/strong> no qual est\u00e1 instalado e sendo executado.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ele permite que os usu\u00e1rios criem ambientes independentes e isolados para iniciar e implantar seus aplicativos. Esses ambientes s\u00e3o chamados de <strong>cont\u00eaineres<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Isso permitir\u00e1 que o desenvolvedor execute um cont\u00eainer em qualquer m\u00e1quina.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Com o Docker, <strong>n\u00e3o h\u00e1 mais problemas de depend\u00eancia ou compila\u00e7\u00e3o<\/strong>. Tudo que voc\u00ea precisa fazer \u00e9 iniciar seu cont\u00eainer e seu aplicativo ser\u00e1 iniciado imediatamente.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O Docker \u00e9 um programa open source desenvolvido pela Docker Inc. com a linguagem de programa\u00e7\u00e3o GO.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Sua primeira edi\u00e7\u00e3o foi lan\u00e7ada em 13 de mar\u00e7o de 2013 e, desde seu lan\u00e7amento, se tornou um software important\u00edssimo no mundo do desenvolvimento de tecnologia.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Podemos dizer que as palavras chaves para o\u00a0<strong>Docker\u00a0<\/strong>s\u00e3o: construir, entregar e rodar em qualquer ambiente (<strong><em>build<\/em><\/strong><em>,\u00a0<\/em><strong><em>ship<\/em><\/strong><em>\u00a0and\u00a0<\/em><strong><em>run<\/em><\/strong><em>\u00a0anywhere<\/em>).<\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\">\r\n<figure class=\"aligncenter\"><img fetchpriority=\"high\" decoding=\"async\" width=\"464\" height=\"296\" class=\"wp-image-5785\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/06\/docker-na-pratica-como-construir-uma-aplicacao-1.png\" alt=\"grafico da arquitetura do docker\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/docker-na-pratica-como-construir-uma-aplicacao-1.png 464w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/docker-na-pratica-como-construir-uma-aplicacao-1-150x96.png 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/docker-na-pratica-como-construir-uma-aplicacao-1-100x64.png 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/docker-na-pratica-como-construir-uma-aplicacao-1-450x287.png 450w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/docker-na-pratica-como-construir-uma-aplicacao-1-300x191.png 300w\" sizes=\"(max-width: 464px) 100vw, 464px\" \/>\r\n<figcaption>Gr\u00e1fico que representa a arquitetura de Docker.<\/figcaption>\r\n<\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Veja em detalhes nesse v\u00eddeo do LINUXtips sobre &#8220;O que \u00e9 Docker&#8221; para depois seguir sua leitura!<\/p>\r\n\r\n\r\n\r\n<p><iframe src=\"https:\/\/www.youtube.com\/embed\/Noi4MOHrZAc\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-vantagens-e-desvantagens\">Vantagens e desvantagens<\/h2>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-vantagens-em-utilizar-docker\">Vantagens em utilizar Docker<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Mas o Docker n\u00e3o \u00e9 um sistema operacional completo numa m\u00e1quina virtual.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O Docker s\u00f3 compartilhar\u00e1 os recursos da m\u00e1quina host para executar seus ambientes.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00c9 uma ferramenta que pode realmente mudar o dia a dia de um desenvolvedor.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ent\u00e3o escrevemos uma lista dos benef\u00edcios que voc\u00ea encontrar\u00e1 no software:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>O Docker \u00e9 r\u00e1pido.<\/strong> Ao contr\u00e1rio de uma m\u00e1quina virtual, seu aplicativo inicializa em alguns segundos e para com a mesma rapidez.<\/li>\r\n<li><strong>O Docker \u00e9 multiplataforma<\/strong>. Voc\u00ea pode iniciar seu cont\u00eainer em qualquer sistema.<\/li>\r\n<li>Os cont\u00eaineres podem ser constru\u00eddos e exclu\u00eddos mais r\u00e1pido do que em uma m\u00e1quina virtual.<\/li>\r\n<li><strong>N\u00e3o h\u00e1 mais dificuldades em configurar seu ambiente de trabalho. <\/strong>Depois que seu Docker estiver configurado, voc\u00ea nunca mais ter\u00e1 que reinstalar suas depend\u00eancias manualmente mesmo se mudar seu computador.<\/li>\r\n<li><strong>Voc\u00ea mant\u00e9m seu espa\u00e7o de trabalho limpo<\/strong>, pois cada um de seus ambientes ser\u00e1 isolado e voc\u00ea pode exclu\u00ed-los a qualquer momento, sem impactar o resto.<\/li>\r\n<li><strong>\u00c9 mais f\u00e1cil<\/strong> implantar seu projeto no servidor para coloc\u00e1-lo online.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-desvantagens-em-utilizar-docker\">Desvantagens em utilizar Docker<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Bom, nenhum software \u00e9 perfeito e sempre apresenta alguma limita\u00e7\u00e3o, ent\u00e3o vejamos a seguir algumas das principais cr\u00edticas de desenvolvedores:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>H\u00e1 uma tonelada de solicita\u00e7\u00f5es de recursos para upgrade que ainda est\u00e3o em andamento (como capacidade de autorregistro e autoinspe\u00e7\u00e3o de cont\u00eaineres, c\u00f3pia de arquivos do host para o cont\u00eainer e muito mais).<\/li>\r\n<li>H\u00e1 momentos em que um container fica inativo, ent\u00e3o depois disso, ele precisa de uma estrat\u00e9gia de backup e recupera\u00e7\u00e3o, embora existam v\u00e1rias solu\u00e7\u00f5es, mas que n\u00e3o s\u00e3o automatizadas ou nem muito escal\u00e1veis ainda.<\/li>\r\n<li>Em compara\u00e7\u00e3o com as m\u00e1quinas virtuais, os cont\u00eaineres Docker oferecem menos sobrecarga, mas n\u00e3o sobrecarga zero.<\/li>\r\n<li>O principal problema \u00e9 que se um aplicativo projetado para ser executado em um cont\u00eainer do Docker no Windows, ele n\u00e3o pode ser executado no Linux ou vice-versa. No entanto, as m\u00e1quinas virtuais n\u00e3o est\u00e3o sujeitas a essa limita\u00e7\u00e3o.<\/li>\r\n<li>Podemos dizer que, para aplicativos que requerem interfaces ricas, o Docker n\u00e3o \u00e9 uma boa solu\u00e7\u00e3o.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Resumidamente<\/strong>, \u00e9 preciso avaliar os riscos de seguran\u00e7a espec\u00edficos do Docker para garantir que voc\u00ea poder\u00e1 lidar com eles antes de mover as cargas de trabalho para o Docker.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-arquitetura-do-docker\">Arquitetura do Docker<\/h2>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Os principais componentes da arquitetura envolvem:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>Docker<\/strong>\u00a0para Mac, Linux e Windows \u2013 vers\u00f5es que permitem instalar e executar containers nos sistemas operacionais de forma isolada.<\/li>\r\n<li><strong>Docker Daemon<\/strong>\u00a0\u2013 Software que roda na m\u00e1quina onde o Docker est\u00e1 instalado. Usu\u00e1rio n\u00e3o interage diretamente com o daemon.<\/li>\r\n<li><strong>Docker Client<\/strong>\u00a0\u2013 CLI ou REST API que aceita comandos do usu\u00e1rio e repassa estes comandos ao Docker daemon.<\/li>\r\n<li><strong>Docker Image<\/strong>\u00a0\u2013 \u00c9 um template. Uma imagem cont\u00e9m todos os dados e metadados necess\u00e1rios para executar <em>containers <\/em>a partir de uma imagem.<\/li>\r\n<li><strong>Docker Container<\/strong>\u00a0\u2013 \u00a0Det\u00e9m tudo que \u00e9 necess\u00e1rio para uma aplica\u00e7\u00e3o ser executada. Cada <em>container<\/em> \u00e9 criado a partir de uma imagem. Cada container \u00e9 uma aplica\u00e7\u00e3o isolada independente.<\/li>\r\n<li><strong>Docker Engine<\/strong>\u00a0\u2013 Usado para criar imagens e containers.<\/li>\r\n<li><strong>Docker Registry<\/strong>\u00a0\u2013 Uma cole\u00e7\u00e3o de imagens hospedadas e rotuladas que juntas permitem a cria\u00e7\u00e3o do sistema de arquivos de um container. Um registro pode ser p\u00fablico ou privado.<\/li>\r\n<li><strong>Docker Hub<\/strong>\u00a0\u2013 Este \u00e9 um registro usado para hospedar e baixar diversas imagens. Pode ser visto como uma plataforma SAAS de compartilhamento e gerenciamento de imagens.<\/li>\r\n<li><strong>Dockerfile<\/strong>\u00a0\u2013 \u00a0Um arquivo texto contendo uma sintax simples para cria\u00e7\u00e3o de novas imagens.<\/li>\r\n<li><strong>Docker Compose<\/strong>\u00a0\u2013 Usado para definir aplica\u00e7\u00f5es usando diversos containers.<\/li>\r\n<li><strong>Docker Swarm<\/strong>\u00a0\u2013 \u00c9 uma ferramenta que permite o agrupamento (<em>clustering<\/em>) de Containers Docker.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\">\r\n<figure class=\"aligncenter\"><img decoding=\"async\" width=\"355\" height=\"275\" class=\"wp-image-5786\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/06\/arquitetura-do-docker.png\" alt=\"grafico da arquitetura do docker\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/arquitetura-do-docker.png 355w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/arquitetura-do-docker-150x116.png 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/arquitetura-do-docker-100x77.png 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/arquitetura-do-docker-300x232.png 300w\" sizes=\"(max-width: 355px) 100vw, 355px\" \/><\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-docker-image\"><strong>Docker<\/strong> Image<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nesta etapa, voc\u00ea escreve um Dockerfile que cria uma imagem do Docker. A imagem cont\u00e9m todas as depend\u00eancias que o aplicativo Python precisa, incluindo o pr\u00f3prio Python.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ent\u00e3o, no diret\u00f3rio do projeto, crie um arquivo chamado Dockerfile e cole o seguinte:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code># syntax=docker\/dockerfile:1\r\nFROM python:3.7-alpine\r\nWORKDIR \/code\r\nENV FLASK_APP=app.py\r\nENV FLASK_RUN_HOST=0.0.0.0\r\nRUN apk add --no-cache gcc musl-dev linux-headers\r\nCOPY requirements.txt requirements.txt\r\nRUN pip install -r requirements.txt\r\nEXPOSE 5000\r\nCOPY . .\r\nCMD [\"flask\", \"run\"]<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Isso vai dizer ao Docker para:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Criar uma imagem come\u00e7ando com a imagem do Python 3.7.<\/li>\r\n<li>Definir o diret\u00f3rio de trabalho para \/code.<\/li>\r\n<li>Definir as vari\u00e1veis de ambiente usadas pelo comando flask.<\/li>\r\n<li>Instalar o gcc e outras depend\u00eancias<\/li>\r\n<li>Copiar o requirements.txt e instalar as depend\u00eancias do Python.<\/li>\r\n<li>Adicionar metadados \u00e0 imagem para descrever que o cont\u00eainer est\u00e1 escutando na porta 5000<\/li>\r\n<li>Copiar o diret\u00f3rio atual no projeto para o workdir\u00a0na imagem.<\/li>\r\n<li>Definir o comando padr\u00e3o para o cont\u00eainer para flask run.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-docker-compose\"><strong>Docker compose<\/strong><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Crie um arquivo chamado docker-compose.yml no diret\u00f3rio do projeto e cole o seguinte:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>version: \"3.9\"\r\nservices:\r\nweb:\r\nbuild: .\r\nports:\r\n- \"5000:5000\"\r\nredis:\r\nimage: \"redis:alpine\"<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Esse arquivo Compose define dois servi\u00e7os web e redis.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O servi\u00e7o da Web usa uma imagem criada a partir do Dockerfile no diret\u00f3rio atual.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Em seguida, ele vincula o cont\u00eainer e a m\u00e1quina hospedeira \u00e0 porta exposta, 5000.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Este servi\u00e7o de exemplo usa a porta padr\u00e3o para o servidor web Flask, 5000.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">J\u00e1 o servi\u00e7o redis usa uma imagem p\u00fablica do Redis extra\u00edda do registro do Docker Hub.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Por exemplo, se no diret\u00f3rio do projeto voc\u00ea iniciar seu aplicativo executando docker-compose up, o Compose extrai uma imagem do Redis, cria uma imagem para seu c\u00f3digo e inicia os servi\u00e7os que voc\u00ea definiu.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nesse caso, o c\u00f3digo \u00e9 copiado estaticamente na imagem em tempo de compila\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-diferenca-entre-maquina-virtuais-e-docker\">Diferen\u00e7a entre m\u00e1quina virtuais e Docker<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Se formos compara com a tecnologia de virtualiza\u00e7\u00e3o teremos o seguinte cen\u00e1rio:<\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\">\r\n<figure class=\"aligncenter\"><img decoding=\"async\" width=\"478\" height=\"275\" class=\"wp-image-5787\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/06\/vm-ou-docker.png\" alt=\"grafico da arquitetura do docker\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/vm-ou-docker.png 478w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/vm-ou-docker-150x86.png 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/vm-ou-docker-100x58.png 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/vm-ou-docker-450x259.png 450w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/vm-ou-docker-300x173.png 300w\" sizes=\"(max-width: 478px) 100vw, 478px\" \/><\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00c9 poss\u00edvel perceber que esta nova arquitetura simplifica bastante o uso de recursos e a sobrecarga do sistema para podermos configurar e distribuir nossas aplica\u00e7\u00f5es, independentemente do provedor que estaremos hospedando.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A principal vantagem desta arquitetura \u00e9 que n\u00e3o \u00e9 necess\u00e1rio ter hardware extra para o sistema operacional hospedeiro. Tudo ser\u00e1 tratado como Container.<\/p>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p>Leitura recomendada:<strong>\u00a0<a href=\"https:\/\/www.geekhunter.com/pt/blog\/orquestracao-de-conteineres-docker-swarm-portainer\/\" target=\"_blank\" rel=\"noreferrer noopener\">Orquestra\u00e7\u00e3o de cont\u00eaineres<\/a><\/strong><\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-uso-de-docker-na-sua-empresa\">Uso de Docker na sua empresa<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Uma regra geral \u00e9 que, <strong>se voc\u00ea for uma organiza\u00e7\u00e3o que usa m\u00e1quinas virtuais<\/strong>, provavelmente se dar\u00e1 melhor com a estrat\u00e9gia de cont\u00eaineres.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Deve-se observar que seus <strong>desenvolvedores individuais podem se beneficiar do uso do Docker<\/strong>, mesmo que voc\u00ea decida n\u00e3o adot\u00e1-lo em toda a empresa para o fluxo completo de DevOps.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Geralmente, os desafios a seguir indicam que sua organiza\u00e7\u00e3o pode se beneficiar de uma estrat\u00e9gia de cont\u00eainer:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>O fluxo atual de DevOps est\u00e1 gerando um alto custo de infraestrutura por conta do uso excessivo de recursos necess\u00e1rios \u00e0s m\u00e1quinas virtuais;<\/li>\r\n<li>\u00c9 dif\u00edcil para a empresa gerenciar a infraestrutura do Sitecore devido \u00e0s depend\u00eancias variadas entre as diferentes vers\u00f5es;<\/li>\r\n<li>A empresa est\u00e1 perdendo muito tempo configurando ambientes Sitecore;<\/li>\r\n<li>Os v\u00e1rios ambientes s\u00e3o implantados em ambientes de hospedagem em nuvem diversos;<\/li>\r\n<li>A equipe precisa ser capaz de replicar ambientes espec\u00edficos rapidamente, como dar suporte para problemas de produ\u00e7\u00e3o relatados;<\/li>\r\n<li>A equipe precisa trabalhar em diferentes sites\/solu\u00e7\u00f5es\/projetos, que tamb\u00e9m podem usar diferentes vers\u00f5es do Sitecore e exigir diferentes depend\u00eancias (vers\u00f5es do SQL Server, sistemas operacionais, vers\u00f5es do Solr, etc.);<\/li>\r\n<li>Os desenvolvedores mudam de um projeto Sitecore para outro, precisando come\u00e7ar rapidamente e depois desmont\u00e1-lo rapidamente;<\/li>\r\n<li>A equipe est\u00e1 lutando para encontrar uma maneira de testar isoladamente antes da implanta\u00e7\u00e3o.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-como-instalar-na-sua-maquina\">Como instalar na sua m\u00e1quina<\/h2>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-instalar-docker-no-linux-ubuntu\">Instalar Docker no Linux (Ubuntu)<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Se o seu sistema operacional for linux, Ubuntu, por exemplo, voc\u00ea deve seguir os seguintes passos:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>1. Para instalar o Docker Engine, voc\u00ea precisa da vers\u00e3o de 64 bits de uma destas vers\u00f5es do Ubuntu:<\/strong><\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Ubuntu Impish 21.10<\/li>\r\n<li>Ubuntu Hirsute 21.04<\/li>\r\n<li>Ubuntu Focal 20.04 (LTS)<\/li>\r\n<li>Ubuntu Bionic 18.04 (LTS)<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>2. Abra o terminal com o atalho Ctrl + Alt + T. Baixe as \u00faltimas atualiza\u00e7\u00f5es do sistema.<\/strong><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> <strong>$ sudo apt update &amp;&amp; sudo apt upgrade<\/strong><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>3. Instale utilizando o reposit\u00f3rio do Ubuntu 18.04<\/strong><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> <strong>$ sudo apt install docker.io<\/strong> <\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">4<strong>. Inicie o Docker<\/strong><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> <strong>$ sudo systemctl start docker<\/strong> <\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>5. Entretanto, garanta que ele seja iniciado ap\u00f3s a reinicializa\u00e7\u00e3o<\/strong><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"><strong>$ sudo systemctl enable docker<\/strong> <\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">6<strong>. Caso queira verificar a vers\u00e3o instalada<\/strong><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"><strong>$ docker -v<\/strong> <\/pre>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-instalar-docker-no-macos\"><strong>Instalar Docker no MacOS<\/strong><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Se voc\u00ea estiver utilizando MacOS, certifique-se de estar utilizando MAC OS X Sierra 10.12 ou superior.<\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li><strong><a href=\"https:\/\/download.docker.com\/mac\/beta\/Docker.dmg\" target=\"_blank\" rel=\"noreferrer noopener\">Baixe o Docker para Mac<\/a><\/strong>;<\/li>\r\n<li>D\u00ea duplo clique no arquivo DMG, autorize a instala\u00e7\u00e3o e informe sua senha de administrador, depois d\u00ea um duplo clique em Docker.app para iniciar.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ap\u00f3s baixar, rode em uma janela do terminal os seguintes comandos para verificar se est\u00e1 tudo ok:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"><strong>$ docker --version\r\n$ docker-compose --version\r\n$ docker-machine --version<\/strong><\/pre>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-instalar-docker-no-windows\">Instalar Docker no Windows<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Se voc\u00ea estiver utilizando Windows, siga os seguintes passos:<\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li>Verifique se o suporte a virtualiza\u00e7\u00e3o est\u00e1 habilitado em seu computador;<\/li>\r\n<li>Seu Windows deve ser 64bits vers\u00e3o 1607 e build: 14393.0;<\/li>\r\n<li>Voc\u00ea deve habilitar o recurso do hyper-v;<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong><a href=\"https:\/\/download.docker.com\/win\/beta\/InstallDocker.msi\" target=\"_blank\" rel=\"noreferrer noopener\">Baixe o Docker para Windows.<\/a><\/strong><\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-docker-cli-utilitario-de-linha-de-comando\">Docker CLI: Utilit\u00e1rio de linha de comando<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Depois de entender a arquitetura e realizar a instala\u00e7\u00e3o, \u00e9 chegada a hora de conhecer o utilit\u00e1rio de linha de comando. Utilizar o docker consiste em informar a ele op\u00e7\u00f5es e argumentos da seguinte forma:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"><strong>$ docker [option] [command] [arguments]<\/strong><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Para exibir as informa\u00e7\u00f5es globais de sistema sobre o Docker, digite:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"><strong>$ docker info<\/strong><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Caso deseje ver todos os subcomandos do utilit\u00e1rio digite no terminal:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"><strong>$ docker<\/strong><\/pre>\r\n\r\n\r\n\r\n<figure class=\"wp-block-table\">\r\n<table>\r\n<tbody>\r\n<tr>\r\n<td><strong>attach \u00a0\u00a0\u00a0<\/strong>Attach to a running container<br \/><strong>build \u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>Build an image from a Dockerfile<strong><br \/>commit\u00a0<\/strong>Create a new image from a container\u2019s changes<strong><br \/>cp\u00a0<\/strong>Copy files\/folders between a container and the local filesystem<br \/><strong>create \u00a0\u00a0\u00a0<\/strong>Create a new container<br \/><strong>diff \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>Inspect changes on a container\u2019s filesystem<strong><br \/>events \u00a0\u00a0\u00a0<\/strong>Get real time events from the server<strong><br \/>exec \u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>Run a command in a running container<strong><br \/>export \u00a0<\/strong>Export a container\u2019s filesystem as a tar archive<strong><br \/>history \u00a0<\/strong>Show the history of an image<strong><br \/>images \u00a0\u00a0<\/strong>List images<strong><br \/>import\u00a0<\/strong>Import the contents from a tarball to create a filesystem image<br \/><strong>info \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>Display system-wide information<strong><br \/>inspect\u00a0<\/strong>Return low-level information on a container or image<strong><br \/>kill \u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>Kill a running container<strong><br \/>load \u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>Load an image from a tar archive or STDIN<br \/><strong>login \u00a0\u00a0\u00a0\u00a0<\/strong>Log in to a Docker registry<strong><br \/>logout \u00a0<\/strong>Log out from a Docker registry<strong><br \/>logs \u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>Fetch the logs of a container<strong><br \/>network \u00a0\u00a0<\/strong>Manage Docker networks<strong><br \/>pause \u00a0\u00a0<\/strong>Pause all processes within a container<strong><br \/>port \u00a0\u00a0\u00a0\u00a0<\/strong>List port mappings or a specific mapping for the CONTAINER<strong><br \/>ps \u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>List containers<strong><br \/>pull \u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>Pull an image or a repository from a registry<strong><br \/>push \u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>Push an image or a repository to a registry<strong><br \/>rename \u00a0<\/strong>Rename a container<strong><br \/>restart \u00a0\u00a0<\/strong>Restart a container<br \/><strong>rm \u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>Remove one or more containers<strong><br \/>rmi \u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>Remove one or more images<strong><br \/>run \u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>Run a command in a new container<strong><br \/>save \u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>Save one or more images to a tar archive<br \/><strong>search \u00a0<\/strong>Search the Docker Hub for images<strong><br \/>start \u00a0\u00a0\u00a0\u00a0<\/strong>Start one or more stopped containers<strong><br \/>stats \u00a0\u00a0\u00a0\u00a0<\/strong>Display a live stream of container(s) resource usage statistics<strong><br \/>stop \u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>Stop a running container<br \/><strong>tag \u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>Tag an image into a repository<strong><br \/>top \u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>Display the running processes of a container<strong><br \/>unpause \u00a0<\/strong>Unpause all processes within a container<strong><br \/>update \u00a0\u00a0\u00a0<\/strong>Update configuration of one or more containers<strong><br \/>version \u00a0\u00a0<\/strong>Show the Docker version information<strong><br \/>volume \u00a0\u00a0\u00a0<\/strong>Manage Docker volumes<strong><br \/>wait \u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>Block until a container stops, then print its exit code<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Para conhecer as op\u00e7\u00f5es adicionais de um comando espec\u00edfico de seu interesse, digite:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"><strong>$ docker subcomando --help<\/strong><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Agora vamos rodar um container da imagem do Ubuntu, para aquecer os motores e iniciar nossa jornada nesse novo mundo. Em uma janela do terminal ou\u00a0<em>prompt<\/em>\u00a0de comando, digite:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"><strong>$ docker run -t -i ubuntu \/bin\/bash<\/strong> <\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A sa\u00edda resultante do comando acima, deve indicar que o Docker est\u00e1 executando corretamente a imagem do Ubuntu, em modo interativo, note que executei um comando top para listar os processos que est\u00e3o executando internamente ao container:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"653\" height=\"251\" class=\"wp-image-5788\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/06\/tela-comandos-docker.png\" alt=\"imagem de um conteiner de programacao\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/tela-comandos-docker.png 653w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-150x58.png 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-100x38.png 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-600x231.png 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-450x173.png 450w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-300x115.png 300w\" sizes=\"(max-width: 653px) 100vw, 653px\" \/><\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Neste ponto voc\u00ea j\u00e1 pode executar qualquer comando dentro do container, n\u00e3o \u00e9 preciso utilizar usu\u00e1rio sudo, porque voc\u00ea j\u00e1 est\u00e1 operando com privil\u00e9gio de super usu\u00e1rio (root).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Teste, executando os comandos:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"><strong>$ apt-get update <\/strong> <\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u2026e depois instale o\u00a0<strong><em>node.js<\/em><\/strong>\u00a0para fazer um breve teste:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> <strong>$ apt-get install -y nodejs<\/strong><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Repare que utilizamos o comando run do utilit\u00e1rio e as op\u00e7\u00f5es\u00a0<br \/>-i -t:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"633\" height=\"193\" class=\"wp-image-5790\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-2-1.png\" alt=\"imagem de programacao com docker\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-2-1.png 633w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-2-1-150x46.png 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-2-1-100x30.png 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-2-1-600x183.png 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-2-1-450x137.png 450w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-2-1-300x91.png 300w\" sizes=\"(max-width: 633px) 100vw, 633px\" \/><\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Em outro terminal rode o comando abaixo para listar os Containers:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"><strong>$ docker ps<\/strong><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A sa\u00edda resultante ser\u00e1:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"105\" class=\"wp-image-5791\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-3.png\" alt=\"imagem de programacao com docker\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-3.png 629w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-3-150x25.png 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-3-100x17.png 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-3-600x100.png 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/tela-comandos-docker-3-450x75.png 450w\" sizes=\"(max-width: 629px) 100vw, 629px\" \/><\/figure>\r\n\r\n<p><!--StartFragment--><\/p>\r\n\r\n<p class=\"wp-block-paragraph\">Para exibir o \u00faltimo containers criado, informe ao comando a chave -l:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> <strong>$ docker ps -l<\/strong><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Se quiser exibir todos os containers \u2013 ativos e inativos, passe ao comando a chave -a:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> <strong>$ docker ps -a<\/strong> <\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Para exibir um container executado ou ativo \u00e9 s\u00f3 digitar:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> <strong>$ docker stop id-do-container<\/strong> <\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O container-id pode ser encontrado na sa\u00edda do comando docker ps.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Se ap\u00f3s realizar uma s\u00e9rie de configura\u00e7\u00f5es de uma imagem docker voc\u00ea quiser disponibiliz\u00e1-la ou at\u00e9 mesmo hosped\u00e1-la no\u00a0<strong>Docker Hub<\/strong>\u00a0para uso futuro, voc\u00ea pode.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Basta criar uma conta no Docker Hub e, depois de efetuar login, fa\u00e7a o carregamento da imagem para o reposit\u00f3rio.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> <strong>$ docker login -u username-docker<\/strong> <\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ap\u00f3s efetuar o login no Docker Hub voc\u00ea poder\u00e1 ent\u00e3o enviar a imagem que desejar, utilizando:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> <strong>S docker push username-docker\/nome-da-imagem<\/strong><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ap\u00f3s finalizar o upload da imagem, voc\u00ea poder\u00e1 acessar no endere\u00e7o do Docker Hub.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-criar-uma-aplicacao-com-docker\">Criar uma aplica\u00e7\u00e3o com Docker<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Suponha que voc\u00ea queira criar uma aplica\u00e7\u00e3o que possua todas as depend\u00eancias do Node.js j\u00e1 instalados, sem instalar as depend\u00eancias manualmente ou diretamente em sua m\u00e1quina.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Usando Docker voc\u00ea pode fazer isso de maneira isolada com alguns comandos declarados no arquivo de configura\u00e7\u00e3o. Isso se chama \u201cDockerfile\u201d.<\/p>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p>Leitura recomendada: <strong><a href=\"https:\/\/geekblogti.wpengine.com\/kubernetes-a-arquitetura-de-um-cluster\/\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Kubernetes: a arquitetura de um cluster<\/em><\/a><\/strong><\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-develop-ship-e-run\">Develop, Ship e Run<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Veja um exemplo de conte\u00fado de um Dockerfile:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> \r\n<strong>FROM node:10-alpine\r\nRUN mkdir -p \/home\/node\/app\/node_modules &amp;&amp; chown -R node:node \/home\/node\/app\r\nWORKDIR \/home\/node\/app\r\n# Install app dependencies\r\nCOPY package*.json .\/\r\nUSER node\r\nRUN npm install\r\nCOPY --chown=node:node . .\r\nEXPOSE 8080\r\nCMD [ \"node\", \"app.js\" ]<\/strong><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Se olharmos para o arquivo app.js que define uma aplica\u00e7\u00e3o b\u00e1sica em Node.js e express, n\u00f3s teremos:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"><strong>const express = require('express');\r\nconst app = express();\r\napp.get('\/', function (req, res) {\r\nres.send('Geek Hunter!');\r\n});\r\napp.listen(3000, function () {\r\n console.log('Servidor Geek Hunter rodando na porta 3000!');\r\n});<\/strong><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Agora que j\u00e1 definimos nossa aplica\u00e7\u00e3o em app.js e j\u00e1 temos nosso Dockerfile, vamos criar uma imagem para poder rodar nossa aplica\u00e7\u00e3o e realizar o <em>deploy <\/em>na imagem que ser\u00e1 carregada no <em>container<\/em>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Vamos criar uma imagem executando o comando:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"><strong>$ docker build -t vmoll\/nodejs-image-demo .<\/strong><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A op\u00e7\u00e3o -t serve para informarmos uma tag para a imagem que estamos criando.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ap\u00f3s a cria\u00e7\u00e3o ser\u00e1 poss\u00edvel rodar a aplica\u00e7\u00e3o utilizando o seguinte comando:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"><strong>$ docker run -it -p 3000:3000 -h instance-hostname --rm --name nodejs-image-demo vmoll\/nodejs-image-demo:latest<\/strong><\/pre>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"621\" height=\"255\" class=\"wp-image-5793\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/06\/develop-ship-run-1.png\" alt=\"tela de programacao com docker\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/develop-ship-run-1.png 621w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/develop-ship-run-1-150x62.png 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/develop-ship-run-1-100x41.png 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/develop-ship-run-1-600x246.png 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/develop-ship-run-1-450x185.png 450w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/develop-ship-run-1-300x123.png 300w\" sizes=\"(max-width: 621px) 100vw, 621px\" \/><\/figure>\r\n\r\n<p><!--StartFragment--><\/p>\r\n\r\n<p class=\"wp-block-paragraph\">No comando que acabamos de executar informamos -p . 3000:3000.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Esse comando \u00e9 respons\u00e1vel por realizar o bind ou vincula\u00e7\u00e3o da porta local para uma porta externa do servi\u00e7o, que ser\u00e1 disponibilizado na m\u00e1quina que est\u00e1 hospedando a aplica\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Veja como a aplica\u00e7\u00e3o est\u00e1 funcional e operante, acessando\u00a0<strong>http:\/\/localhost:3000<\/strong>, e receber\u00e1 a mensagem \u201c<em>Hello Geeks!<\/em>\u201d:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"644\" height=\"123\" class=\"wp-image-5803\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/06\/local-host-docker-1.png\" alt=\"\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/local-host-docker-1.png 644w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/local-host-docker-1-150x29.png 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/local-host-docker-1-100x19.png 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/local-host-docker-1-600x115.png 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/local-host-docker-1-450x86.png 450w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/local-host-docker-1-640x123.png 640w\" sizes=\"(max-width: 644px) 100vw, 644px\" \/><\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Todo o\u00a0<strong><a href=\"https:\/\/github.com\/vmoll\/geekhunter-docker-nodejsapp\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"c\u00f3digo da aplica\u00e7\u00e3o de exemplo (abre numa nova aba)\">c\u00f3digo da aplica\u00e7\u00e3o de exemplo<\/a><\/strong>, juntamente com seu Dockerfile, est\u00e3o dispon\u00edveis na minha p\u00e1gina do Github, linkada acima.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Observa\u00e7\u00e3o importante:<\/strong>\u00a0criei aqui uma aplica\u00e7\u00e3o bem simples, apenas para demonstrar que \u00e9 poss\u00edvel realizar o deploy na imagem que criamos. Nosso foco principal \u00e9 a cria\u00e7\u00e3o e execu\u00e7\u00e3o de containers usando Docker.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Caso queira criar uma aplica\u00e7\u00e3o completa, voc\u00ea pode utilizar algum gerador como o express-generator. Para isso execute o seguintes comandos:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"><strong>$ npm install express-generator -g\r\n$ express minhaAplicacao\r\n$ cd minhaAplicacao\r\n$ npm install\r\n$ npm start<\/strong> <\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ap\u00f3s isso abra uma janela do browser em: http:\/\/localhost:3000<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Como \u00faltima dica, gostaria de deixar aqui um link onde existem diversos exemplos de aplica\u00e7\u00f5es e recomenda\u00e7\u00f5es que podem ser estudados e seguidos para uma melhor utiliza\u00e7\u00e3o. Acesse aqui:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>&gt;&gt;\u00a0<a href=\"https:\/\/github.com\/docker\/labs\" target=\"_blank\" rel=\"noreferrer noopener\">Projetos Docker<\/a><\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Galera, espero ter ajudado voc\u00eas a compreenderem de maneira simples os benef\u00edcios da utiliza\u00e7\u00e3o do Docker em nossas aplica\u00e7\u00f5es.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Creio que, se voc\u00ea ainda n\u00e3o est\u00e1 fazendo uso dessa tecnologia, logo passar\u00e1 a utiliz\u00e1-la em seus novos projetos.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-cursos-e-materiais-para-aprender-docker\"><strong>Cursos e materiais para aprender Docker<\/strong><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Com o ecossistema Docker evoluindo e mudando a uma velocidade enorme, muitos tutoriais, livros e outros materiais instrucionais tendem a ficar desatualizados rapidamente.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Mas saiba que aprender Docker \u00e9 r\u00e1pido, em geral leva algumas horas apenas e se manter atualizado(a), como sabemos, \u00e9 um trabalho do dia a dia para todo dev.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ent\u00e3o vamos dar uma olhada em materiais atuais e alguns que continuam sendo atualizados constantemente:<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-cursos-e-tutoriais-em-portugues\"><strong>Cursos e tutoriais em portugu\u00eas<\/strong><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O canal Full Cycle ofere uma aula gr\u00e1tis para voc\u00ea come\u00e7ar a<strong> <a href=\"https:\/\/www.youtube.com\/watch?v=-l_SBd3AreM\">aprender Docker do zero<\/a><\/strong> e eles t\u00eam muito mais v\u00eddeos detalhados sobre Docker no canal.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O canal <strong><a href=\"https:\/\/www.youtube.com\/watch?v=Kzcz-EVKBEQ\">Programador a Bordo oferece uma explica\u00e7\u00e3o rel\u00e2mpago<\/a><\/strong>, em apenas 22 minutos, sobre o que \u00e9 Docker e como construir 3 tipos de aplica\u00e7\u00f5es, al\u00e9m de ter <a href=\"https:\/\/www.youtube.com\/watch?v=HxPz3eLnXZk\"><strong>um v\u00eddeo s\u00f3 sobre Docker Compose<\/strong><\/a>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O Insight Lab oferece <strong><a href=\"https:\/\/www.youtube.com\/watch?v=j9vfSaCIyPI\">seis aulas gratuitas para iniciantes em Docker<\/a><\/strong>, ministradas por especialistas bastante gabaritados.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A Alura, grande plataforma de cursos para devs, oferece uma<strong><a href=\"https:\/\/www.alura.com.br\/curso-online-docker-e-docker-compose\"> forma\u00e7\u00e3o em seis m\u00f3dulos para se iniciar no uso do Docker<\/a><\/strong>.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-cursos-e-tutoriais-em-ingles\"><strong>Cursos e tutoriais em ingl\u00eas<\/strong><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">No mundo da tecnologia n\u00f3s sabemos que a maioria dos materiais mais atuais est\u00e3o em ingl\u00eas, ent\u00e3o se voc\u00ea puder absorver essas informa\u00e7\u00f5es pode ter uma vantagem enorme no mercado de trabalho.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O pr\u00f3prio <strong><a href=\"https:\/\/docs.docker.com\/engine\/install\/ubuntu\/\">Docker possui uma documenta\u00e7\u00e3o bastante extensa <\/a><\/strong>que inclui tutoriais que evoluem \u00e0 medida que o Docker evolui, al\u00e9m da <strong><a href=\"https:\/\/docker-curriculum.com\/\">se\u00e7\u00e3o Docker Curriculum<\/a><\/strong>, mais <em>user friendly<\/em>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O Coursera, plataforma com cursos gratuitos em diversas l\u00ednguas, tem diversos <strong><a href=\"https:\/\/pt.coursera.org\/courses?query=docker\">cursos para iniciantes em Docker em ingl\u00eas<\/a><\/strong>, r\u00e1pidos e muito bem avaliados.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Na Udemy existem diversos cursos sobre Docker, mas <strong><a href=\"https:\/\/www.udemy.com\/course\/docker-tutorial-for-devops-run-docker-containers\/?LSNPUBID=JVFxdTr9V80&amp;ranEAID=JVFxdTr9V80&amp;ranMID=39197&amp;ranSiteID=JVFxdTr9V80-XBETDurPOfxeJfrFEltkbQ&amp;utm_medium=udemyads&amp;utm_source=aff-campaign\">um que se destaca \u00e9 o do Tao W, James Lee junto da Level Up<\/a><\/strong>.A plataforma <strong><a href=\"https:\/\/www.educative.io\/courses\/docker-for-developers?affiliate_id=5073518643380224\">Educative oferece um curso para iniciantes em Docker <\/a><\/strong>em 10 m\u00f3dulos, e \u00e9 poss\u00edvel usar a plataforma gratuitamente por um per\u00edodo de teste.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Links \u00fateis e refer\u00eancias:<\/strong><\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li><strong><a href=\"https:\/\/docs.docker.com\/engine\/installation\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (abre numa nova aba)\">Como instalar <\/a><\/strong><\/li>\r\n<li><strong><a href=\"https:\/\/docs.docker.com\/compose\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (abre numa nova aba)\">Como instalar o Docker Compose<\/a><\/strong><\/li>\r\n<li><strong><a href=\"https:\/\/hub.docker.com\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (abre numa nova aba)\">Docker Hub<\/a><\/strong><\/li>\r\n<li><strong><a href=\"https:\/\/docs.docker.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Documenta\u00e7\u00e3o <\/a><\/strong><\/li>\r\n<li><strong>Exemplos de aplica\u00e7\u00f5es<\/strong><\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Um abra\u00e7o e at\u00e9 a pr\u00f3xima!<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Crie um perfil na GeekHunter e receba propostas alinhadas ao seu perfil. S\u00e3o mais de 1000 vagas abertas, inclusive\u00a0<a href=\"https:\/\/www.geekhunter.com.br\/vagas-docker\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (abre numa nova aba)\">Vagas Docker<\/a><\/strong>.<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>Independente de voc\u00ea estar planejando iniciar sua carreira em DevOps ou j\u00e1 estar nela, o Docker precisa estar listado em seu curr\u00edculo. Pois Docker \u00e9 uma das habilidades essenciais para quem est\u00e1 na arena dos DevOps atualmente. Hoje, estou aqui para falar sobre o tema que \u00e9 bastante relevante para quem desenvolve aplica\u00e7\u00f5es e realiza [&hellip;]<\/p>\n","protected":false},"author":167,"featured_media":5806,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[18],"tags":[],"class_list":["post-5784","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimiento-de-software"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.3 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Docker na Pr\u00e1tica: o que \u00e9 e como construir uma aplica\u00e7\u00e3o?<\/title>\n<meta name=\"description\" content=\"Voc\u00ea conhece as vantagens de usar Docker? Neste artigo voc\u00ea vai aprender Docker na pr\u00e1tica! Veja o passo a passo de como criar uma aplica\u00e7\u00e3o!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.geekhunter.com\/pt\/blog\/docker-na-pratica-como-construir-uma-aplicacao\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como construir uma aplica\u00e7\u00e3o com Docker?\" \/>\n<meta property=\"og:description\" content=\"Independente de voc\u00ea estar planejando iniciar sua carreira em DevOps ou j\u00e1 estar nela, o Docker precisa estar listado em seu curr\u00edculo. Pois Docker \u00e9 uma\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.geekhunter.com\/pt\/blog\/docker-na-pratica-como-construir-uma-aplicacao\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Geekhunter\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/geekhunterbr\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-21T19:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-12T12:57:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/docker-na-pratica-como-construir-uma-aplicacao-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"800\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Geekhunter\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@geekhunterbr\" \/>\n<meta name=\"twitter:site\" content=\"@geekhunterbr\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Geekhunter\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/docker-na-pratica-como-construir-uma-aplicacao\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/docker-na-pratica-como-construir-uma-aplicacao\\\/\"},\"author\":{\"name\":\"Geekhunter\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/person\\\/9f62b173345139f7bbdaf55312c3d400\"},\"headline\":\"Como construir uma aplica\u00e7\u00e3o com Docker?\",\"datePublished\":\"2024-10-21T19:00:00+00:00\",\"dateModified\":\"2025-02-12T12:57:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/docker-na-pratica-como-construir-uma-aplicacao\\\/\"},\"wordCount\":3191,\"publisher\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/docker-na-pratica-como-construir-uma-aplicacao\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/docker-na-pratica-como-construir-uma-aplicacao-2.png\",\"articleSection\":[\"Desenvolvimiento de software\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/docker-na-pratica-como-construir-uma-aplicacao\\\/\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/docker-na-pratica-como-construir-uma-aplicacao\\\/\",\"name\":\"Docker na Pr\u00e1tica: o que \u00e9 e como construir uma aplica\u00e7\u00e3o?\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/docker-na-pratica-como-construir-uma-aplicacao\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/docker-na-pratica-como-construir-uma-aplicacao\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/docker-na-pratica-como-construir-uma-aplicacao-2.png\",\"datePublished\":\"2024-10-21T19:00:00+00:00\",\"dateModified\":\"2025-02-12T12:57:51+00:00\",\"description\":\"Voc\u00ea conhece as vantagens de usar Docker? Neste artigo voc\u00ea vai aprender Docker na pr\u00e1tica! Veja o passo a passo de como criar uma aplica\u00e7\u00e3o!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/docker-na-pratica-como-construir-uma-aplicacao\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/docker-na-pratica-como-construir-uma-aplicacao\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/docker-na-pratica-como-construir-uma-aplicacao\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/docker-na-pratica-como-construir-uma-aplicacao-2.png\",\"contentUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/docker-na-pratica-como-construir-uma-aplicacao-2.png\",\"width\":1200,\"height\":800,\"caption\":\"logo da marca docker\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/docker-na-pratica-como-construir-uma-aplicacao\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mundo TI\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/category\\\/mundo-ti\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Desenvolvimiento de software\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/category\\\/mundo-ti\\\/desenvolvimiento-de-software\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Como construir uma aplica\u00e7\u00e3o com Docker?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/\",\"name\":\"Blog de TI\",\"description\":\"Dicas para o RH e profissionais da \u00e1rea TI\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\",\"name\":\"GeekHunter\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/icon-1.png\",\"contentUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/icon-1.png\",\"width\":300,\"height\":300,\"caption\":\"GeekHunter\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/geekhunterbr\\\/\",\"https:\\\/\\\/x.com\\\/geekhunterbr\",\"https:\\\/\\\/www.instagram.com\\\/geekhunterbr\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/geekhunter-brasil\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@GeekHunterOfficial\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/person\\\/9f62b173345139f7bbdaf55312c3d400\",\"name\":\"Geekhunter\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"caption\":\"Geekhunter\"},\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/author\\\/matias\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Docker na Pr\u00e1tica: o que \u00e9 e como construir uma aplica\u00e7\u00e3o?","description":"Voc\u00ea conhece as vantagens de usar Docker? Neste artigo voc\u00ea vai aprender Docker na pr\u00e1tica! Veja o passo a passo de como criar uma aplica\u00e7\u00e3o!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.geekhunter.com\/pt\/blog\/docker-na-pratica-como-construir-uma-aplicacao\/","og_locale":"pt_BR","og_type":"article","og_title":"Como construir uma aplica\u00e7\u00e3o com Docker?","og_description":"Independente de voc\u00ea estar planejando iniciar sua carreira em DevOps ou j\u00e1 estar nela, o Docker precisa estar listado em seu curr\u00edculo. Pois Docker \u00e9 uma","og_url":"https:\/\/www.geekhunter.com\/pt\/blog\/docker-na-pratica-como-construir-uma-aplicacao\/","og_site_name":"Blog Geekhunter","article_publisher":"https:\/\/www.facebook.com\/geekhunterbr\/","article_published_time":"2024-10-21T19:00:00+00:00","article_modified_time":"2025-02-12T12:57:51+00:00","og_image":[{"width":1200,"height":800,"url":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/docker-na-pratica-como-construir-uma-aplicacao-2.png","type":"image\/png"}],"author":"Geekhunter","twitter_card":"summary_large_image","twitter_creator":"@geekhunterbr","twitter_site":"@geekhunterbr","twitter_misc":{"Escrito por":"Geekhunter","Est. tempo de leitura":"19 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/docker-na-pratica-como-construir-uma-aplicacao\/#article","isPartOf":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/docker-na-pratica-como-construir-uma-aplicacao\/"},"author":{"name":"Geekhunter","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/person\/9f62b173345139f7bbdaf55312c3d400"},"headline":"Como construir uma aplica\u00e7\u00e3o com Docker?","datePublished":"2024-10-21T19:00:00+00:00","dateModified":"2025-02-12T12:57:51+00:00","mainEntityOfPage":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/docker-na-pratica-como-construir-uma-aplicacao\/"},"wordCount":3191,"publisher":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/docker-na-pratica-como-construir-uma-aplicacao\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/docker-na-pratica-como-construir-uma-aplicacao-2.png","articleSection":["Desenvolvimiento de software"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/docker-na-pratica-como-construir-uma-aplicacao\/","url":"https:\/\/www.geekhunter.com\/pt\/blog\/docker-na-pratica-como-construir-uma-aplicacao\/","name":"Docker na Pr\u00e1tica: o que \u00e9 e como construir uma aplica\u00e7\u00e3o?","isPartOf":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/docker-na-pratica-como-construir-uma-aplicacao\/#primaryimage"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/docker-na-pratica-como-construir-uma-aplicacao\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/docker-na-pratica-como-construir-uma-aplicacao-2.png","datePublished":"2024-10-21T19:00:00+00:00","dateModified":"2025-02-12T12:57:51+00:00","description":"Voc\u00ea conhece as vantagens de usar Docker? Neste artigo voc\u00ea vai aprender Docker na pr\u00e1tica! Veja o passo a passo de como criar uma aplica\u00e7\u00e3o!","breadcrumb":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/docker-na-pratica-como-construir-uma-aplicacao\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.geekhunter.com/pt/blog\/docker-na-pratica-como-construir-uma-aplicacao\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/docker-na-pratica-como-construir-uma-aplicacao\/#primaryimage","url":"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2019\/06\/docker-na-pratica-como-construir-uma-aplicacao-2.png","contentUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/06\/docker-na-pratica-como-construir-uma-aplicacao-2.png","width":1200,"height":800,"caption":"logo da marca docker"},{"@type":"BreadcrumbList","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/docker-na-pratica-como-construir-uma-aplicacao\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/www.geekhunter.com/pt/blog\/"},{"@type":"ListItem","position":2,"name":"Mundo TI","item":"https:\/\/www.geekhunter.com/pt/blog\/category\/mundo-ti\/"},{"@type":"ListItem","position":3,"name":"Desenvolvimiento de software","item":"https:\/\/www.geekhunter.com/pt/blog\/category\/mundo-ti\/desenvolvimiento-de-software\/"},{"@type":"ListItem","position":4,"name":"Como construir uma aplica\u00e7\u00e3o com Docker?"}]},{"@type":"WebSite","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#website","url":"https:\/\/www.geekhunter.com\/pt\/blog\/","name":"Blog de TI","description":"Dicas para o RH e profissionais da \u00e1rea TI","publisher":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.geekhunter.com/pt/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization","name":"GeekHunter","url":"https:\/\/www.geekhunter.com\/pt\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2024\/10\/icon-1.png","contentUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2024\/10\/icon-1.png","width":300,"height":300,"caption":"GeekHunter"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/geekhunterbr\/","https:\/\/x.com\/geekhunterbr","https:\/\/www.instagram.com\/geekhunterbr\/","https:\/\/www.linkedin.com\/company\/geekhunter-brasil\/","https:\/\/www.youtube.com\/@GeekHunterOfficial"]},{"@type":"Person","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/person\/9f62b173345139f7bbdaf55312c3d400","name":"Geekhunter","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","caption":"Geekhunter"},"url":"https:\/\/www.geekhunter.com\/pt\/blog\/author\/matias\/"}]}},"_links":{"self":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts\/5784","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/users\/167"}],"replies":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/comments?post=5784"}],"version-history":[{"count":0,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts\/5784\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/media\/5806"}],"wp:attachment":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/media?parent=5784"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/categories?post=5784"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/tags?post=5784"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}