<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Felipe Oliveira (pt-BR)</title>
    <description>The latest articles on DEV Community by Felipe Oliveira (pt-BR) (@felipeboliveiraptbr).</description>
    <link>https://dev.to/felipeboliveiraptbr</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F9184%2F264496bf-d33c-4931-9ff5-de33ae6e77bc.jpg</url>
      <title>DEV Community: Felipe Oliveira (pt-BR)</title>
      <link>https://dev.to/felipeboliveiraptbr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/felipeboliveiraptbr"/>
    <language>en</language>
    <item>
      <title>Docker: Parte 2 - Criação de Imagens e Execução de Containers</title>
      <dc:creator>Felipe Oliveira</dc:creator>
      <pubDate>Tue, 24 Sep 2024 02:39:01 +0000</pubDate>
      <link>https://dev.to/felipeboliveiraptbr/docker-parte-2-criacao-de-imagens-e-execucao-de-containers-3mb3</link>
      <guid>https://dev.to/felipeboliveiraptbr/docker-parte-2-criacao-de-imagens-e-execucao-de-containers-3mb3</guid>
      <description>&lt;p&gt;Olá, venho anotando os meus estudos no Notion e aos poucos postando aqui também, meu objetivo puro e simples é transmitir conhecimento e ter algum local de referência para buscas.&lt;/p&gt;

&lt;p&gt;Seguindo nessa segunda parte de estudos sobre o Docker vamos a algumas observações:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Se não existe nenhum processo rodando dentro do container o mesmo é finalizado.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ao executarmos os containers através do docker, sem usar extensões como o Docker-compose que veremos mais a frente, temos que passar manualmente os parâmetros sobre o container com informações como nome, portas, variáveis de ambiente, etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Dockerfile
&lt;/h3&gt;

&lt;p&gt;Esse arquivo reune as informações necessárias para a execução da nossa aplicação, como o Node do Javascript ou Maven para aplicações Java. &lt;/p&gt;

&lt;p&gt;Nele configuramos em scripts os mesmos passos que executamos para rodar a aplicação, indicamos o diretório a ser trabalho, rodamos ‘npm install’, copiamos os arquivos do build e inicializamos o servidor.&lt;/p&gt;

&lt;p&gt;Exemplo simplificado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Imagem base. Essa versão 'alpine' é uma versão de tamanho reduzido.&lt;/span&gt;
&lt;span class="c"&gt;# Ao subirmos uma imagem na nuvem somos cobrados pelo tamanho da mesma então&lt;/span&gt;
&lt;span class="c"&gt;# quanto menor, melhor, nesse caso temos uma redução de mais de 1GB para cerca de &lt;/span&gt;
&lt;span class="c"&gt;# 500mb nas imagens alpine.&lt;/span&gt;
FROM node:20-alpine

&lt;span class="c"&gt;# Cria o diretório&lt;/span&gt;
WORKDIR /app

&lt;span class="c"&gt;# Adiciona variáveis de ambiente&lt;/span&gt;
ENV &lt;span class="nv"&gt;DB_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;postgres

&lt;span class="c"&gt;# Um asterisco é usado para garantir que tanto o package.json quanto o &lt;/span&gt;
&lt;span class="c"&gt;# package-lock.json serão copiados&lt;/span&gt;
COPY package&lt;span class="k"&gt;*&lt;/span&gt;.json ./

&lt;span class="c"&gt;# Instala as dependências da aplicação&lt;/span&gt;
RUN npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Copia o código-fonte da aplicação&lt;/span&gt;
COPY &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# Cria uma pasta "dist" com o build de produção&lt;/span&gt;
RUN npm run build

&lt;span class="c"&gt;# Expõe a porta 3000&lt;/span&gt;
EXPOSE 3000

&lt;span class="c"&gt;# Inicia o servidor usando o build de produção&lt;/span&gt;
CMD &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"node"&lt;/span&gt;, &lt;span class="s2"&gt;"dist/main.js"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Também possuimos um arquivo ignore para que o Docker não inclua eles no build da imagem. &lt;/p&gt;

&lt;p&gt;*Como a imagem executará os mesmos passos que executamos para iniciar o projeto, não precisaremos incluir a pasta node_modules, pois a mesma será gerada&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Dockerfile
.dockerignore
node_modules
npm-debug.log
dist
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Gerando uma imagem a partir do Dockerfile
&lt;/h3&gt;

&lt;p&gt;Com o Dockerfile configurado, conseguimos gerar a imagem com o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Aonde "-t" é a tag1.0 é a versão e o ponto especifica a raiz aonde o nosso &lt;/span&gt;
&lt;span class="c"&gt;# arquivo Dockerfile está localizado, sendo nesse caso na raiz de onde estamos &lt;/span&gt;
&lt;span class="c"&gt;# executando o comando.&lt;/span&gt;
&lt;span class="c"&gt;# O "." indica que o Dockerfile está na raiz do meu diretório aonde estou&lt;/span&gt;
&lt;span class="c"&gt;# executando o comando.&lt;/span&gt;
docker build &lt;span class="nt"&gt;-t&lt;/span&gt; nome-da-imagem:1.0 &lt;span class="nb"&gt;.&lt;/span&gt;

docker build &lt;span class="nt"&gt;-t&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;nome-da-imagem]:[tag] &lt;span class="o"&gt;[&lt;/span&gt;caminho]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Executando um Container
&lt;/h3&gt;

&lt;p&gt;O container possui uma interface de rede separada do host, para conseguir acessá-lo precisamos passar um comando ao executa-lo fazendo o mapeamento das portas do container para as portas do host.&lt;/p&gt;

&lt;p&gt;Aonde do lado direito temos a porta do container e do lado esquerdo a porta do host.&lt;/p&gt;

&lt;p&gt;*Se possuirmos alguma variável de ambiente a mesma também deverá ser informada no comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;## Executar um container&lt;/span&gt;

&lt;span class="c"&gt;# Mapeando a porta definida no EXPOSE do Dockerfile para uma porta aleatoria &lt;/span&gt;
&lt;span class="c"&gt;# no host&lt;/span&gt;
docker run &lt;span class="nt"&gt;-p&lt;/span&gt; my-image:1.0

&lt;span class="c"&gt;# Mapeando a porta 8080 do container para a porta 3000 no meu host&lt;/span&gt;
docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 3000:8080 my-image:1.0

&lt;span class="c"&gt;# Com variáveis de ambiente&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 3000:3000 &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;NODE_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;development &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;DB_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;db.example.com &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;DB_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5432 &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;DB_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;myuser &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;DB_PASS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mypassword &lt;span class="nt"&gt;--name&lt;/span&gt; my-node-app my-node-app-image

docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 3000:3000 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;NODE_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;development &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;DB_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;db.example.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;DB_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5432 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;DB_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;myuser &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;DB_PASS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mypassword &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; my-node-app &lt;span class="se"&gt;\&lt;/span&gt;
  my-node-app-image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Melhores Práticas do Dockerfile:
&lt;/h3&gt;

&lt;p&gt;Por fim, deixo aqui um resumo de algumas práticas indicadas na documentação.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use Multi-Stage builds&lt;/strong&gt;
Quando temos multiplos FROM separando os diferentes estágios do build que podem ser carregados do anterior para o próximo, a fim de organizar o arquivo e deixar definido as responsabilidades.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Selecione a imagem base correta&lt;/strong&gt;
Escolha uma imagem pequena e local confiável (Docker Hub, Verified Publisher, Docker Sponsored Open Source)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reconstrua (rebuild) suas imagens com frequência&lt;/strong&gt;
As imagens são imutáveis. Ao fazer um build, tiramos um “snapshot” daquele momento, portanto, qualquer alteração subsequente necessita de um novo build na imagem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Podemos usar um arquivo .dockerignore&lt;/strong&gt;
Podemos inserir arquivos não relevantes para o build aqui.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desaccople as aplicações&lt;/strong&gt;
Cada container deve ter apenas uma responsabilidade&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Organize argumentos multi-linhas&lt;/strong&gt;
É possível separar os argumentos em múltiplas linhas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplo de organização dos argumentos em múltiplas linhas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;RUN npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  typescript &lt;span class="se"&gt;\&lt;/span&gt;
  eslint &lt;span class="se"&gt;\&lt;/span&gt;
  nodemon &lt;span class="se"&gt;\&lt;/span&gt;
  jest &lt;span class="se"&gt;\&lt;/span&gt;
  pm2 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm cache clean &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fontes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=DdoncfOdru8&amp;amp;t=1812s" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=DdoncfOdru8&amp;amp;t=1812s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/pt-br/dotnet/architecture/microservices/container-docker-introduction/docker-containers-images-registries" rel="noopener noreferrer"&gt;https://learn.microsoft.com/pt-br/dotnet/architecture/microservices/container-docker-introduction/docker-containers-images-registries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/reference/cli/docker/image/build/" rel="noopener noreferrer"&gt;https://docs.docker.com/reference/cli/docker/image/build/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tomray.dev/nestjs-docker-production" rel="noopener noreferrer"&gt;https://www.tomray.dev/nestjs-docker-production&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/reference/cli/docker/image/tag/#:%7E:text=After%20the%20image%20name%2C%20the,underscores%2C%20periods%2C%20and%20hyphens" rel="noopener noreferrer"&gt;https://docs.docker.com/reference/cli/docker/image/tag/#:~:text=After%20the%20image%20name%2C%20the,underscores%2C%20periods%2C%20and%20hyphens&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/build/building/best-practices/" rel="noopener noreferrer"&gt;https://docs.docker.com/build/building/best-practices/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Docker: Parte 1 - Introdução</title>
      <dc:creator>Felipe Oliveira</dc:creator>
      <pubDate>Tue, 16 Jul 2024 02:53:58 +0000</pubDate>
      <link>https://dev.to/felipeboliveiraptbr/docker-introducao-893</link>
      <guid>https://dev.to/felipeboliveiraptbr/docker-introducao-893</guid>
      <description>&lt;h3&gt;
  
  
  Introdução
&lt;/h3&gt;

&lt;p&gt;O Docker é um serviço de virtualização que isola nossa aplicação do sistema operacional do host/computador hospedeiro, evitando o erros na execução da nossa aplicação independente do sistema base (Windows, Linux, Mac, etc). &lt;/p&gt;

&lt;p&gt;Ele utiliza o conceito de “containers”, os quais possuem tudo que a nossa aplicação precisa para executar (servidor, banco de dados, etc). Diferente de uma VM, um container não contém o Sistema Operacional dentro do mesmo, ele roda sobre o sistema do host, o que diminui e muito o seu tamanho.&lt;/p&gt;

&lt;p&gt;Cada container roda de maneira independente e não enxerga as coisas que são executadas no host/computador hospedeiro.&lt;/p&gt;

&lt;h3&gt;
  
  
  Arquitetura
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Client&lt;/strong&gt;: Aplicação cliente: CLI/Terminal ou Remote API&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Host/Engine&lt;/strong&gt;: Possui um Daemon que interpreta os comandos do client e executa os mesmos, além disso o host possui os containers e as imagens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Registry&lt;/strong&gt;: Repositórios para imagens Docker, exemplos: Docker Hub, AWS ECS, Azure Registry, etc. Da mesma forma podemos ter públicas e privadas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fku9zwlwzvi71b7dycowm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fku9zwlwzvi71b7dycowm.png" alt="Imagem da arquitetura do Docker. A esquerda uma coluna indicando o cliente contendo o " width="800" height="422"&gt;&lt;/a&gt;&lt;em&gt;Fonte: Docker Documentação&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Instalação
&lt;/h3&gt;

&lt;p&gt;O Docker possui 2 formas principais de instalação, via Docker Desktop ou via Docker Engine. O primeiro possui uma interface gráfica e cria uma &lt;strong&gt;VM para rodar o Docker&lt;/strong&gt;, mesmo estando em um host Linux, enquanto o segundo funciona através do terminal. Essas duas formas não são muito compatíveis devido as diferenças, e portanto devemos escolher apenas uma para o uso.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/desktop/" rel="noopener noreferrer"&gt;https://docs.docker.com/desktop/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/engine/" rel="noopener noreferrer"&gt;https://docs.docker.com/engine/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Composição
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Dockerfile&lt;/strong&gt;: Define a arquitetura da nossa aplicação como: versão do node/ferramenta vamos usar, qual a versão do banco de dados vamos usar, qual arquitetura nós vamos buildar a aplicação, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Imagem&lt;/strong&gt;: “É um template somente de leitura com instruções para criar um container. É frequentemente baseada em outra imagem com alguma customização. Eu posso ter uma imagem do Unbuntu a qual eu inseri o servidor Apache por exemplo.” - Docker Documentation&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Container&lt;/strong&gt;: É a nossa imagem instância rodando no host. Ele é “stateless”, ou seja, &lt;strong&gt;não persiste informações quando interrompido. Ele não persiste as informações do banco de dados!!!&lt;/strong&gt; Para isso usamos algo chamado volume ou outras técnicas de persistência, ver documentação:&lt;/p&gt;

&lt;h3&gt;
  
  
  Persistência
&lt;/h3&gt;

&lt;p&gt;Para que possamos persistir informações de um banco de dados mesmo após um container ser interrompido ou deletado, o Docker disponibiliza algo chamado volume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Volume&lt;/strong&gt;: Um volume mapeia no host um espaço que vai ser compártilhado com uma área no filesystem do Docker, vamos fazer o “mount” dessa estrutura.&lt;/p&gt;

&lt;p&gt;Exemplo da documentação referente ao MariaDB (Seção: “&lt;em&gt;Where to Store Data”)&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hub.docker.com/_/mariadb" rel="noopener noreferrer"&gt;https://hub.docker.com/_/mariadb&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Comandos Comuns:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Quantos e quais containers estão em execução&lt;/span&gt;
&lt;span class="c"&gt;# Exibe ate os containers parados&lt;/span&gt;
docker ps
docker ps &lt;span class="nt"&gt;-a&lt;/span&gt;

&lt;span class="c"&gt;# Exibe as imagens&lt;/span&gt;
docker images
docker images &lt;span class="nt"&gt;-a&lt;/span&gt;

&lt;span class="c"&gt;# run: Cria e inicia um novo container com base na imagem 'my-image' dando um nome&lt;/span&gt;
&lt;span class="c"&gt;# aleatório para o container.&lt;/span&gt;
&lt;span class="c"&gt;# --name: Atribui o nome 'my-container' para o container referente a imagem&lt;/span&gt;
&lt;span class="c"&gt;# 'my-image'.&lt;/span&gt;
docker run my-image
docker run &lt;span class="nt"&gt;--name&lt;/span&gt; my-container my-image

&lt;span class="c"&gt;# -d: roda o container em background&lt;/span&gt;
&lt;span class="c"&gt;# -p: porta, no exemplo mapeamos a porta 8088 do host para a porta 80 do container&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; my-image
docker run &lt;span class="nt"&gt;--name&lt;/span&gt; my-container &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 8088:80 my-image

&lt;span class="c"&gt;# Parar um ou todos os containers&lt;/span&gt;
docker stop
dcoker stop containerID

&lt;span class="c"&gt;# Iniciar um container&lt;/span&gt;
docker start containerID

&lt;span class="c"&gt;# Remover um container&lt;/span&gt;
&lt;span class="c"&gt;# Remover uma imagem&lt;/span&gt;
docker container &lt;span class="nb"&gt;rm &lt;/span&gt;containerID
docker image &lt;span class="nb"&gt;rm &lt;/span&gt;image-name / imageID

&lt;span class="c"&gt;# Gerar a imagem / build&lt;/span&gt;
docker image build image-name

&lt;span class="c"&gt;# Executar o bash dentro de uma imagem Ubuntu&lt;/span&gt;
&lt;span class="c"&gt;# -it: de iterativo, esse comando te leva para dentro do container&lt;/span&gt;
&lt;span class="c"&gt;# bash: nesse caso estamos executando o terminal bash dentro do container&lt;/span&gt;
docker run &lt;span class="nt"&gt;-it&lt;/span&gt; ubuntu bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fontes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/guides/docker-overview/" rel="noopener noreferrer"&gt;https://docs.docker.com/guides/docker-overview/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/guides/docker-overview/#:%7E:text=with%20fewer%20resources.-,Docker%20architecture,to%20a%20remote%20Docker%20daemon" rel="noopener noreferrer"&gt;https://docs.docker.com/guides/docker-overview/#:~:text=with%20fewer%20resources.-,Docker%20architecture,to%20a%20remote%20Docker%20daemon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/get-docker/" rel="noopener noreferrer"&gt;https://docs.docker.com/get-docker/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/guides/docker-concepts/running-containers/persisting-container-data/" rel="noopener noreferrer"&gt;https://docs.docker.com/guides/docker-concepts/running-containers/persisting-container-data/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
