{"id":10344,"date":"2026-09-26T23:09:57","date_gmt":"2026-09-27T03:09:57","guid":{"rendered":"https:\/\/morais.eti.br\/?p=10344"},"modified":"2026-09-26T23:09:57","modified_gmt":"2026-09-27T03:09:57","slug":"docker-compose-swarm-kubernetes-guia-windows-linux","status":"publish","type":"post","link":"https:\/\/morais.eti.br\/index.php\/2026\/09\/26\/docker-compose-swarm-kubernetes-guia-windows-linux\/","title":{"rendered":"Docker, Docker Compose, Docker Swarm e Kubernetes: guia completo para Windows e Linux"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/morais.eti.br\/wp-content\/uploads\/2026\/09\/2a3ddc2e-8043-4c64-b01f-4ce012f29502-1024x576.png\" alt=\"\" class=\"wp-image-10345\" srcset=\"https:\/\/morais.eti.br\/wp-content\/uploads\/2026\/09\/2a3ddc2e-8043-4c64-b01f-4ce012f29502-1024x576.png 1024w, https:\/\/morais.eti.br\/wp-content\/uploads\/2026\/09\/2a3ddc2e-8043-4c64-b01f-4ce012f29502-300x169.png 300w, https:\/\/morais.eti.br\/wp-content\/uploads\/2026\/09\/2a3ddc2e-8043-4c64-b01f-4ce012f29502.png 1672w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Docker, Docker Compose, Docker Swarm e Kubernetes: guia completo para Windows e Linux<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Docker, Docker Compose, Docker Swarm e Kubernetes<\/strong> fazem parte de um dos ecossistemas mais importantes da computa\u00e7\u00e3o moderna. Eles permitem empacotar aplica\u00e7\u00f5es, reproduzir ambientes, executar servi\u00e7os isolados, automatizar implanta\u00e7\u00f5es e administrar aplica\u00e7\u00f5es distribu\u00eddas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O que \u00e9 um container?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um container \u00e9 um ambiente isolado no qual uma aplica\u00e7\u00e3o pode ser executada com suas depend\u00eancias. Containers normalmente s\u00e3o mais leves que m\u00e1quinas virtuais porque n\u00e3o precisam carregar um sistema operacional completo para cada aplica\u00e7\u00e3o.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502              COMPUTADOR              \u2502\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510   \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u2502\n\u2502  \u2502 Container  \u2502   \u2502 Container  \u2502    \u2502\n\u2502  \u2502   Nginx    \u2502   \u2502 PostgreSQL \u2502    \u2502\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518   \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2502\n\u2502             Docker Engine            \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Docker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Docker<\/strong> \u00e9 uma plataforma para desenvolver, distribuir e executar aplica\u00e7\u00f5es utilizando containers.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Docker CLI \u2192 Docker API \u2192 Docker Daemon\n                         \u251c\u2500\u2500 Images\n                         \u251c\u2500\u2500 Containers\n                         \u251c\u2500\u2500 Networks\n                         \u2514\u2500\u2500 Volumes<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Imagens<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Uma imagem Docker \u00e9 um modelo somente leitura utilizado para criar containers.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker search nginx\ndocker pull nginx\ndocker images\ndocker run nginx<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Containers<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run -d --name meu-nginx -p 8080:80 nginx\ndocker ps\ndocker logs meu-nginx\ndocker stop meu-nginx\ndocker start meu-nginx\ndocker rm meu-nginx<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Depois do comando, acesse <code>http:\/\/localhost:8080<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Dockerfile<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para criar uma imagem pr\u00f3pria:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM nginx:alpine\nCOPY .\/site \/usr\/share\/nginx\/html<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>docker build -t meu-site:1.0 .\ndocker run -d -p 8080:80 meu-site:1.0<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Registry<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Um registry armazena imagens para distribui\u00e7\u00e3o.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker login\ndocker push usuario\/minha-aplicacao:1.0\ndocker pull usuario\/minha-aplicacao:1.0<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Volumes<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para dados persistentes, utilize volumes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker volume create dados-postgres\ndocker volume ls\ndocker run -v dados-postgres:\/var\/lib\/postgresql\/data postgres<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Redes<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>docker network create minha-rede\ndocker run -d --name banco --network minha-rede postgres\ndocker run -d --name api --network minha-rede minha-api<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Docker Compose<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Docker Compose<\/strong> permite definir e executar aplica\u00e7\u00f5es compostas por m\u00faltiplos containers utilizando YAML.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Crie <code>compose.yaml<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>services:\n  web:\n    image: nginx:alpine\n    ports:\n      - \"8080:80\"\n  redis:\n    image: redis:alpine<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose up -d\ndocker compose ps\ndocker compose logs\ndocker compose down<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">API + PostgreSQL<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>services:\n  api:\n    build: .\/api\n    ports:\n      - \"8000:8000\"\n    environment:\n      DATABASE_URL: postgresql:\/\/app:senha@db:5432\/app\n    depends_on:\n      - db\n  db:\n    image: postgres:17\n    environment:\n      POSTGRES_DB: app\n      POSTGRES_USER: app\n      POSTGRES_PASSWORD: senha\n    volumes:\n      - postgres_data:\/var\/lib\/postgresql\/data\nvolumes:\n  postgres_data:<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dentro da rede criada pelo Compose, <code>db<\/code> \u00e9 o nome do servi\u00e7o e pode ser utilizado como hostname.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Docker Swarm<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O <strong>Docker Swarm Mode<\/strong> \u00e9 o mecanismo integrado ao Docker Engine para administrar um cluster de Docker Engines. Managers participam do controle do cluster e Workers executam tarefas.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker swarm init\ndocker node ls<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nos demais n\u00f3s, utilize o comando <code>docker swarm join<\/code> mostrado pelo manager.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker service create --name web --publish 8080:80 --replicas 3 nginx\ndocker service ls\ndocker service ps web\ndocker service scale web=5<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Kubernetes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Kubernetes<\/strong>, ou K8s, \u00e9 uma plataforma open source para gerenciar workloads e servi\u00e7os containerizados. Seu modelo \u00e9 declarativo: voc\u00ea descreve o estado desejado e o Kubernetes trabalha para mant\u00ea-lo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>                 Control Plane\n        \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n        \u2502 API Server                \u2502\n        \u2502 etcd                      \u2502\n        \u2502 scheduler                 \u2502\n        \u2502 controller-manager        \u2502\n        \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                      \u2502\n          \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n        Node        Node        Node\n          \u2502           \u2502           \u2502\n        Pods        Pods        Pods<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Pod<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pod \u00e9 a menor unidade implant\u00e1vel do Kubernetes e pode conter um ou mais containers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Deployment<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: nginx\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: nginx\n  template:\n    metadata:\n      labels:\n        app: nginx\n    spec:\n      containers:\n        - name: nginx\n          image: nginx:alpine\n          ports:\n            - containerPort: 80<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl apply -f deployment.yaml\nkubectl get deployments\nkubectl get pods<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Service<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apiVersion: v1\nkind: Service\nmetadata:\n  name: nginx\nspec:\n  selector:\n    app: nginx\n  ports:\n    - port: 80\n      targetPort: 80<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl apply -f service.yaml\nkubectl get services<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">kubectl<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl get nodes\nkubectl get pods\nkubectl get services\nkubectl describe pod NOME\nkubectl logs NOME\nkubectl apply -f arquivo.yaml\nkubectl delete -f arquivo.yaml<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Compara\u00e7\u00e3o<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tecnologia<\/th><th>Escopo<\/th><th>Principal finalidade<\/th><\/tr><\/thead><tbody><tr><td>Docker<\/td><td>Container<\/td><td>Criar e executar aplica\u00e7\u00f5es isoladas<\/td><\/tr><tr><td>Docker Compose<\/td><td>Aplica\u00e7\u00e3o<\/td><td>Executar m\u00faltiplos containers<\/td><\/tr><tr><td>Docker Swarm<\/td><td>Cluster Docker<\/td><td>Orquestrar servi\u00e7os Docker<\/td><\/tr><tr><td>Kubernetes<\/td><td>Cluster<\/td><td>Gerenciar workloads containerizados<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Tutorial: Docker no Windows<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Uma maneira simples de come\u00e7ar no Windows \u00e9 utilizar Docker Desktop com WSL 2.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">WSL 2<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>wsl --install\nwsl --update\nwsl --version<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Docker Desktop<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Instale o Docker Desktop e utilize a integra\u00e7\u00e3o com WSL 2 quando dispon\u00edvel.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker version\ndocker run hello-world<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Primeiro container<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run -d --name nginx -p 8080:80 nginx\ndocker ps\ndocker stop nginx\ndocker rm nginx<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Acesse <code>http:\/\/localhost:8080<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Compose no Windows<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir docker-demo\ncd docker-demo\ndocker compose up -d\ndocker compose ps\ndocker compose down<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Kubernetes no Windows<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para aprendizado, op\u00e7\u00f5es pr\u00e1ticas incluem Kubernetes integrado ao Docker Desktop, Minikube e kind.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl version --client\nkubectl get nodes\nminikube start\nminikube status<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Tutorial: Docker no Linux<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">No Linux podemos instalar diretamente o Docker Engine. O exemplo abaixo utiliza Ubuntu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Remover vers\u00f5es conflitantes<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Configurar reposit\u00f3rio<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt install ca-certificates curl\nsudo install -m 0755 -d \/etc\/apt\/keyrings\nsudo curl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg -o \/etc\/apt\/keyrings\/docker.asc\nsudo chmod a+r \/etc\/apt\/keyrings\/docker.asc\nsudo apt update<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Em uma instala\u00e7\u00e3o oficial pelo reposit\u00f3rio Docker, configure o arquivo de reposit\u00f3rio seguindo a documenta\u00e7\u00e3o da sua vers\u00e3o do Ubuntu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Instalar Docker Engine<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\nsudo systemctl status docker\nsudo systemctl start docker\nsudo docker run hello-world<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Executar sem sudo<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo usermod -aG docker $USER<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Depois encerre a sess\u00e3o e entre novamente. O grupo <code>docker<\/code> concede privil\u00e9gios elevados sobre o daemon Docker e deve ser usado conscientemente em servidores compartilhados.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Compose no Linux<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose version\ndocker compose up -d\ndocker compose ps\ndocker compose down<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Docker Swarm no Linux<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>docker swarm init\ndocker node ls\ndocker service create --name web --publish 8080:80 --replicas 3 nginx\ndocker service ls\ndocker service ps web<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Kubernetes no Linux<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para aprendizado, Minikube \u00e9 uma op\u00e7\u00e3o simples e kind \u00e9 outra alternativa para clusters locais.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>minikube start\nkubectl get nodes\nkind create cluster\nkubectl get nodes<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Deploy Kubernetes completo<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>apiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: web\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: web\n  template:\n    metadata:\n      labels:\n        app: web\n    spec:\n      containers:\n        - name: web\n          image: nginx:alpine\n          ports:\n            - containerPort: 80\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: web\nspec:\n  selector:\n    app: web\n  ports:\n    - port: 80\n      targetPort: 80<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl apply -f app.yaml\nkubectl get pods\nkubectl get service\nkubectl scale deployment web --replicas=5\nkubectl rollout status deployment\/web\nkubectl rollout history deployment\/web\nkubectl rollout undo deployment\/web<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">No Minikube, uma forma simples de acesso \u00e9 <code>minikube service web<\/code>. Outra op\u00e7\u00e3o \u00e9 <code>kubectl port-forward service\/web 8080:80<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Docker n\u00e3o \u00e9 Kubernetes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Docker \u00e9 principalmente uma plataforma de containers. Kubernetes \u00e9 uma plataforma de gerenciamento de workloads containerizados em clusters. Kubernetes n\u00e3o depende exclusivamente do Docker Engine como runtime; ele utiliza um runtime de containers compat\u00edvel.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quando utilizar cada tecnologia?<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Docker:<\/strong> containers individuais, imagens, testes e padroniza\u00e7\u00e3o de ambientes.<\/li>\n\n\n\n<li><strong>Docker Compose:<\/strong> aplica\u00e7\u00f5es locais ou ambientes relativamente simples com v\u00e1rios servi\u00e7os.<\/li>\n\n\n\n<li><strong>Docker Swarm:<\/strong> clusters Docker com gerenciamento integrado de servi\u00e7os e r\u00e9plicas.<\/li>\n\n\n\n<li><strong>Kubernetes:<\/strong> clusters com m\u00faltiplos servi\u00e7os e n\u00f3s, escalabilidade, deployments, alta disponibilidade, service discovery, configura\u00e7\u00e3o declarativa e ambientes cloud-native.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Boas pr\u00e1ticas<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>N\u00e3o coloque senhas diretamente nas imagens.<\/li>\n\n\n\n<li>Use imagens pequenas quando apropriado.<\/li>\n\n\n\n<li>Use tags expl\u00edcitas quando previsibilidade for importante.<\/li>\n\n\n\n<li>Evite processos desnecessariamente executados como root.<\/li>\n\n\n\n<li>Mantenha Dockerfiles, compose.yaml e manifests Kubernetes no Git.<\/li>\n\n\n\n<li>Fa\u00e7a backup dos dados persistentes.<\/li>\n\n\n\n<li>Monitore logs, recursos e sa\u00fade dos servi\u00e7os em produ\u00e7\u00e3o.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Comandos essenciais<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Docker<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>docker version\ndocker info\ndocker images\ndocker ps\ndocker ps -a\ndocker pull nginx\ndocker run nginx\ndocker logs &lt;container&gt;\ndocker exec -it &lt;container&gt; sh\ndocker build -t minha-imagem .\ndocker volume ls\ndocker network ls<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Compose<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose up\ndocker compose up -d\ndocker compose down\ndocker compose ps\ndocker compose logs\ndocker compose restart\ndocker compose build\ndocker compose up -d --build<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Swarm<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>docker swarm init\ndocker swarm join\ndocker node ls\ndocker service create\ndocker service ls\ndocker service ps\ndocker service logs\ndocker service scale\ndocker service update\ndocker service rm<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Kubernetes<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl cluster-info\nkubectl get nodes\nkubectl get pods\nkubectl get deployments\nkubectl get services\nkubectl describe pod &lt;nome&gt;\nkubectl logs &lt;nome&gt;\nkubectl exec -it &lt;nome&gt; -- sh\nkubectl apply -f arquivo.yaml\nkubectl delete -f arquivo.yaml\nkubectl scale deployment &lt;nome&gt; --replicas=3\nkubectl rollout status deployment\/&lt;nome&gt;\nkubectl rollout undo deployment\/&lt;nome&gt;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Docker mudou a forma como aplica\u00e7\u00f5es podem ser empacotadas e executadas com containers. Docker Compose organiza aplica\u00e7\u00f5es multi-container. Docker Swarm adiciona gerenciamento de clusters Docker. Kubernetes oferece uma plataforma declarativa de orquestra\u00e7\u00e3o para workloads containerizados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma sequ\u00eancia pr\u00e1tica de aprendizado \u00e9 <strong>Docker \u2192 Dockerfile \u2192 Volumes e Networks \u2192 Docker Compose \u2192 Docker Swarm \u2192 Kubernetes \u2192 Deployments e Services \u2192 Storage, Secrets e ConfigMaps \u2192 Observabilidade e seguran\u00e7a<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Refer\u00eancias oficiais<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.docker.com\/\">Docker Documentation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.docker.com\/engine\/\">Docker Engine<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.docker.com\/compose\/\">Docker Compose<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.docker.com\/engine\/swarm\/\">Docker Swarm<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/kubernetes.io\/docs\/\">Kubernetes Documentation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/kubernetes.io\/docs\/concepts\/\">Kubernetes Concepts<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/kubernetes.io\/docs\/reference\/kubectl\/\">kubectl<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/kubernetes.io\/docs\/setup\/learning-environment\/\">Kubernetes Learning Environment<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Guia completo sobre Docker, Docker Compose, Docker Swarm e Kubernetes, com conceitos, arquitetura, comandos e tutoriais pr\u00e1ticos para Windows e Linux.<\/p>\n","protected":false},"author":1,"featured_media":10345,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38,31,32,2],"tags":[],"class_list":["post-10344","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devsecops","category-infraestrutura","category-open-source","category-softwarelivre"],"_links":{"self":[{"href":"https:\/\/morais.eti.br\/index.php\/wp-json\/wp\/v2\/posts\/10344","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/morais.eti.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/morais.eti.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/morais.eti.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/morais.eti.br\/index.php\/wp-json\/wp\/v2\/comments?post=10344"}],"version-history":[{"count":1,"href":"https:\/\/morais.eti.br\/index.php\/wp-json\/wp\/v2\/posts\/10344\/revisions"}],"predecessor-version":[{"id":10346,"href":"https:\/\/morais.eti.br\/index.php\/wp-json\/wp\/v2\/posts\/10344\/revisions\/10346"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/morais.eti.br\/index.php\/wp-json\/wp\/v2\/media\/10345"}],"wp:attachment":[{"href":"https:\/\/morais.eti.br\/index.php\/wp-json\/wp\/v2\/media?parent=10344"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/morais.eti.br\/index.php\/wp-json\/wp\/v2\/categories?post=10344"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/morais.eti.br\/index.php\/wp-json\/wp\/v2\/tags?post=10344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}