<?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: David Silva</title>
    <description>The latest articles on DEV Community by David Silva (@sr2ds).</description>
    <link>https://dev.to/sr2ds</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%2Fuser%2Fprofile_image%2F209128%2F3d38d068-c56f-4628-9616-d7258fd85642.png</url>
      <title>DEV Community: David Silva</title>
      <link>https://dev.to/sr2ds</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sr2ds"/>
    <language>en</language>
    <item>
      <title>Ensure a beaut code with Laravel Pint</title>
      <dc:creator>David Silva</dc:creator>
      <pubDate>Mon, 17 Oct 2022 18:44:19 +0000</pubDate>
      <link>https://dev.to/sr2ds/ensure-a-beaut-code-with-laravel-pint-4jpl</link>
      <guid>https://dev.to/sr2ds/ensure-a-beaut-code-with-laravel-pint-4jpl</guid>
      <description>&lt;p&gt;Hello,&lt;/p&gt;

&lt;p&gt;This is my first full English post! So, I'd starting with "sorry" for my wrongs, I'm learning :)&lt;/p&gt;

&lt;p&gt;If you, like me, has Laravel inside your world and like beautiful things, I think you need to meet the Laravel Pint.&lt;/p&gt;

&lt;p&gt;Laravel Pint help us to keep a good code style.&lt;/p&gt;

&lt;p&gt;Working in one team without some code styler or some texteditor settings, usually we need to check a lot of spaces changes, breaklines, positions in the Pull Request review. It's so bad and sad to review one big PR with a lot of 'non-necessary-changes'.&lt;/p&gt;

&lt;p&gt;To solve this, we can setup the default code style for everyone of the time, this make more easy to check codes from other person and improve the PR Review moments.&lt;/p&gt;

&lt;p&gt;With &lt;code&gt;Laravel Pint&lt;/code&gt; is so easy setup a one default way to this, without extra settings like with pure PHP-CS.&lt;/p&gt;

&lt;p&gt;Let's install de Pint with the normal command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require laravel/pint --dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After installation, you can just run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./vendor/bin/pint 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At the first time, you can see a lot of files changes, like in this my personal hobby project:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzakuzy0goznqxufrqh9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzakuzy0goznqxufrqh9.png" alt="Changes after run command"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Of course, in this simple way, you will need run the command before commits to ensure a correct code style. We can improve this we can to use some &lt;code&gt;pre-commit&lt;/code&gt; hook, like a &lt;code&gt;grumphp&lt;/code&gt; &lt;a href="https://github.com/phpro/grumphp" rel="noopener noreferrer"&gt;https://github.com/phpro/grumphp&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In other post, I can write more about &lt;code&gt;grumphp&lt;/code&gt;, but if you want, you can check the oficial docs to learn more.&lt;/p&gt;

&lt;p&gt;For today it's only, thanks for read! :)&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Bloquear Tráfego Por IP - X-Forwarded-For Apache 2.4</title>
      <dc:creator>David Silva</dc:creator>
      <pubDate>Fri, 29 May 2020 16:00:15 +0000</pubDate>
      <link>https://dev.to/sr2ds/bloquear-trafego-por-ip-x-forwarded-for-apache-2-4-4kc</link>
      <guid>https://dev.to/sr2ds/bloquear-trafego-por-ip-x-forwarded-for-apache-2-4-4kc</guid>
      <description>&lt;p&gt;Quando seu apache recebe requisições de um LoadBalancer o IP de origem delas serão (claro) do LoadBalancer. Consequentemente, quando você precisar fazer algo como bloquear tráfegos indesejados por ip, o processo é um pouco diferente dos casos convencionais pois você não terá nas mãos o &lt;code&gt;REMOTE_ADDR&lt;/code&gt; ou o simples &lt;code&gt;ip&lt;/code&gt;, por exemplo.&lt;/p&gt;

&lt;p&gt;No caso do exemplo abaixo, há um LoadBalancer redirecionando para o apache do servidor que ainda faz um proxy reverso para o container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;VirtualHost *:443&amp;gt;
    &amp;lt;LocationMatch "/.*"&amp;gt;
        Order Allow,Deny
        Allow from all
        ## você pode colocar uma lista de IPs
        SetEnvif X-Forwarded-For "xxx\.xxx\.xxx\.xxx" DenyAccess
        SetEnvif X-Forwarded-For "yyy\.yyy\.yyy\.yyy" DenyAccess
        Deny from env=DenyAccess
    &amp;lt;/LocationMatch&amp;gt;

    ... # outras configs do seu serviço

    ProxyPreserveHost On
    ProxyRequests Off
    ProxyPass / http://container:port/ retry=1 timeout=180 nocanon
    ProxyPassReverse / http://container:port/
&amp;lt;/VirtualHost&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se isso lhe foi útil, deixe seu comentário! &lt;/p&gt;

</description>
      <category>apache</category>
      <category>linux</category>
      <category>loadbalancer</category>
    </item>
    <item>
      <title>🐳Docker#01 Instalação e Primeiros Passos - Parte 1</title>
      <dc:creator>David Silva</dc:creator>
      <pubDate>Fri, 08 May 2020 21:14:50 +0000</pubDate>
      <link>https://dev.to/sr2ds/docker-01-instalacao-e-primeiros-passos-parte-1-262n</link>
      <guid>https://dev.to/sr2ds/docker-01-instalacao-e-primeiros-passos-parte-1-262n</guid>
      <description>&lt;p&gt;Neste artigo vamos começar a colocar a mão na massa, instalando e aprendendo alguns comandos básicos.&lt;/p&gt;

&lt;p&gt;Antes de começar a instalação vamos falar de alguns pontos importantes em relação ao sistema operacional do host.  &lt;/p&gt;

&lt;p&gt;Até a algum tempo atrás você só conseguia rodar o Docker no Windows instalando o VirtualBox. Isso já melhorou e agora o Docker roda de forma nativa no Windows também, assim como no Linux que sempre rodou.&lt;/p&gt;

&lt;p&gt;Em contrapartida, se você usa Mac como eu, precisará instalar o VirtualBox para rodar o Docker e, vai por mim, fica uma belezura mas só quando tá desligado 🤣. É só ligar que fica horrível. Dependendo do quanto você vive fazendo build, sua maquina vai fritar, ficar lenta e muito ruim para trabalhar. Para você ter idéia, eu acabei instalando o Ubuntu no Macbook Pro 2015 para poder trabalhar melhor, e agora sim ficou ótimo!&lt;/p&gt;

&lt;p&gt;Eu não uso Windows há anos e até te recomendaria usar Linux para usar o Docker, mas como agora também roda sem VirtualBox lá, imagino que possa rodar bem também. Se você testar, deixe seu comentário aqui para sabermos!&lt;/p&gt;

&lt;h2&gt;
  
  
  Como instalar o Docker?
&lt;/h2&gt;

&lt;p&gt;Honestamente não vejo motivos para gastar tanto texto explicando os passos da instalação, então vou resumir e apontar os links oficiais caso você precise de ajuda extra.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker no Linux
&lt;/h3&gt;

&lt;p&gt;Há um script oficial maroto que faz todo o trabalho para você:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você terá o docker instalado mas seu usuário comum ainda não terá acesso aos comandos principais do Docker. E, por favor, não ache que usar &lt;code&gt;sudo&lt;/code&gt; para tudo na sua própria máquina seja normal, sua vida será melhor se as coisas forem mais simples*. &lt;/p&gt;

&lt;p&gt;PS: Não significa fazer seu usuário ser root também, ok? Mas o básico para seu trabalho acontecer, coisas que você faz toda hora, pode sim ser mais fácil.&lt;/p&gt;

&lt;p&gt;Coloque seu usuário no grupo do docker para poder rodar os comandos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo usermod -aG docker $USER
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reinicie sua máquina.&lt;/p&gt;

&lt;h4&gt;
  
  
  Oracle Linux
&lt;/h4&gt;

&lt;p&gt;Recentemente precisei fazer a instalação em uma distribuição &lt;code&gt;Oracle Linux&lt;/code&gt; e o setup padrão não funcionou, se for o seu caso, &lt;a href="https://dev.to/sr2ds/instalando-docker-no-oracle-linux-nd6"&gt;este outro artigo&lt;/a&gt; pode ajudá-lo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker no MacOs
&lt;/h3&gt;

&lt;p&gt;Você precisará ter o VirtualBox instalado e o procedimento de instalação será o mesmo do Docker (arrastar do finder). O link para download &lt;a href="https://www.virtualbox.org/wiki/Downloads"&gt;está aqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hub.docker.com/editions/community/docker-ce-desktop-mac/"&gt;Clique aqui&lt;/a&gt;, baixe o &lt;code&gt;.dmg&lt;/code&gt; clicando no botão azul "Get Docker Desktop for Mac (Stable)". &lt;/p&gt;

&lt;p&gt;Faz aquela super instalação super complexa que só no mac é possível.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RLqCP5D4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9ew552e0ikusslxxw90u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RLqCP5D4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9ew552e0ikusslxxw90u.png" alt="Instalação do Docker no MacOs - Arrastar para instalar do Finder" width="626" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker no Windows
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://hub.docker.com/editions/community/docker-ce-desktop-windows/"&gt;Clique aqui&lt;/a&gt;, baixe o &lt;code&gt;.exe&lt;/code&gt; clicando no botão azul "Get Docker Desktop for Windows (stable)". &lt;/p&gt;

&lt;p&gt;Espere baixar e faz o de sempre, execute, next, next, finish.&lt;/p&gt;

&lt;h2&gt;
  
  
  Primeiros comandos no Docker
&lt;/h2&gt;

&lt;p&gt;Com o Docker instalado (uhu!) agora podemos começar a desbravar essa aventura.&lt;/p&gt;

&lt;p&gt;Vamos começar listando e explicando o funcionamento básico de alguns comandos básicos, priorizando os mais utilizados no (meu) dia a dia. Alguns comandos terão artigos dedicados, por isso aqui vamos falar apenas dos mais simples.&lt;/p&gt;

&lt;h3&gt;
  
  
  docker ps
&lt;/h3&gt;

&lt;p&gt;Em breve começaremos a criar containers e precisaremos gerenciar suas instâncias, para isso o &lt;code&gt;docker ps&lt;/code&gt; pode nos ajudar.&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;ps&lt;/code&gt; nos permite visualizar quase tudo em relação aos containers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Listar containers em execução
docker ps

# Listar containers em execução e parados
docker ps -a

# Listar somentes os Ids dos containers em execução
docker ps -q

# Listar apenas os nomes e ids dos containers ativos
docker ps --format "{{.ID}}: {{.Names}}"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com este último comando você pode formatar dos dados para melhorar a visualização e te dar mais poder quando precisar fazer scripts para automatizar as coisas.&lt;/p&gt;

&lt;p&gt;Para mais exemplos de formatação no ps &lt;a href="https://docs.docker.com/engine/reference/commandline/ps/#formatting"&gt;clique aqui&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  docker pull
&lt;/h3&gt;

&lt;p&gt;Como falamos no artigo anterior, os containers precisam de imagens para existir, que são registradas/gravadas/armazenadas em um servidor (público ou privado), geralmente chamado de Registry.&lt;/p&gt;

&lt;p&gt;Existem muitas imagens oficiais e não oficiais que podem facilitar sua vida, você as encontrará no &lt;a href="https://hub.docker.com/"&gt;DockerHub&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Baixando uma imagem latest
docker pull ubuntu

# Baixando uma imagem com tag
docker pull ubuntu:14.04
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você pode especificar qual é a tag da imagem, caso queira alguma especifica, ou simplesmente ter a &lt;code&gt;latest&lt;/code&gt; por padrão.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Ver imagens baixadas
docker images
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nota: Esses comandos padrões do docker vão trazer as imagens direto do DockerHub, porém, se você especificar o caminho do seu próprio registry.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker pull myregistry.local:5000/testing/test-image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Indo além: Já parou para pensar que o seu servidor de produção poderia ter apenas a imagem mais atualizada ao invés de toda a sua aplicação? Imagine quão rápido seria colocar uma versão e até mesmo retornar a outra anterior?&lt;br&gt;
Se quiser saber mais sobre isso que, a propósito também é possível sem Docker, procure por &lt;code&gt;Blue Green Deploy&lt;/code&gt; e &lt;code&gt;Canary Release&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  docker run
&lt;/h3&gt;

&lt;p&gt;Já sabemos que existem imagens e agora precisamos usá-las.&lt;/p&gt;

&lt;p&gt;O comando &lt;code&gt;docker run&lt;/code&gt; é o cara que cria o container para nós.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Cria container com a imagem ubuntu
docker run ubuntu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Perceba que rodar isso vai criar um container e, em seguida, ele vai parar. Isso acontece por que não há nenhum processo no interior do container em execução e, de que adiantaria um container sem ação?&lt;/p&gt;

&lt;p&gt;Se você der um &lt;code&gt;docker ps -a&lt;/code&gt; vai ver que o container está lá, porém, parada com STATUS &lt;code&gt;Exit (0) x seconds ago&lt;/code&gt;. Ou seja, ele foi criado, subiu e morreu.&lt;/p&gt;

&lt;p&gt;Para que este teste seja funcional, vamos fazer algo assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -ti ubuntu bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso vai te devolver um terminal interativo de dentro do container.&lt;br&gt;
É literalmente um sistema operacional isolado aí. Você pode dar um &lt;code&gt;ls /home&lt;/code&gt; e vai perceber que não tem nada, diferente do seu próprio ambiente, por exemplo.&lt;/p&gt;

&lt;p&gt;Sabe aquele &lt;code&gt;rm -rf /&lt;/code&gt; que tanto se zoa?! Você pode rodar aí dentro.&lt;/p&gt;

&lt;p&gt;Se você tiver com medo, ok. Eu fiz, veja:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Tw4L9CE9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/g993df702m2jey7a625j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Tw4L9CE9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/g993df702m2jey7a625j.png" alt="apagando tudo dentro do container" width="763" height="123"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Perceba que, na primeira linha, é minha maquina &lt;code&gt;david@david-MacBookPro&lt;/code&gt; e depois já estou dentro do container.&lt;/p&gt;

&lt;p&gt;Na última linha não é possível mais usar o binário &lt;code&gt;ls&lt;/code&gt; pois ele foi excluído.&lt;/p&gt;

&lt;p&gt;Agora perceba que eu posso sair (&lt;code&gt;CTRL+D&lt;/code&gt;) e entrar de novo no container e ele terá tudo de volta.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Utd2NzpR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/firjth57zwszbnoqscpi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Utd2NzpR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/firjth57zwszbnoqscpi.png" alt="retornando ao container após deletar tudo" width="769" height="213"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Isso foi apenas um &lt;code&gt;hello world&lt;/code&gt; básico. Em breve avançaremos mais.&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;docker run&lt;/code&gt; possui diversos parâmetros úteis, considere que ele é o cara que cria o container e precisamos de muitas coisas para nossas aplicações funcionarem, alguns exemplos são as portas de redes, montagem de volumes de dados, limites de memória, etc.&lt;/p&gt;

&lt;p&gt;Eu montei este outro artigo que é somente o retorno do &lt;code&gt;docker run --help&lt;/code&gt; traduzido e com alguns considerações.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/sr2ds/opcoes-do-comando-docker-run-g87"&gt;Opções do Comando Docker Run&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vamos parando por aqui pois já está extenso demais!&lt;/p&gt;

&lt;p&gt;Se alguma coisa aqui foi útil pra você, deixe seu comentário! &lt;/p&gt;

&lt;p&gt;Até a próxima.&lt;/p&gt;

</description>
      <category>series</category>
      <category>docker</category>
      <category>containers</category>
      <category>devops</category>
    </item>
    <item>
      <title>🐳Opções do Comando Docker Run</title>
      <dc:creator>David Silva</dc:creator>
      <pubDate>Fri, 08 May 2020 21:08:57 +0000</pubDate>
      <link>https://dev.to/sr2ds/opcoes-do-comando-docker-run-g87</link>
      <guid>https://dev.to/sr2ds/opcoes-do-comando-docker-run-g87</guid>
      <description>&lt;p&gt;Este artigo é complementar ao &lt;a href="https://dev.to/sr2ds/docker-00-introducao-concentual-47gf"&gt;Manual Básico de Docker&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Abaixo nós temos o retorno do comando &lt;code&gt;docker run --help&lt;/code&gt; traduzido.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
    --ADD-HOST LIST                  ADICIONAR UM MAPEAMENTO HOST-TO-IP PERSONALIZADO (HOST: IP)
-A, --ATTACH LIST                    ANEXAR A STDIN, STDOUT OU STDERR
    --BLKIO-WEIGHT UINT16            BLOCO IO (PESO RELATIVO), ENTRE 10 E 1000, OU 0 PARA DESATIVAR (PADRÃO 0)
    --BLKIO-WEIGHT-DEVICE LIST       PESO IO DO BLOCO (PESO DO DISPOSITIVO RELATIVO) (PADRÃO [])
    --CAP-ADD LIST                   ADICIONAR CAPACIDADES DE LINUX
    --CAP-DROP LIST                  CAPACIDADES DROP LINUX
    --CGROUP-PARENT STRING           GRUPO DE CONTROLE OPCIONAL PARA O RECIPIENTE
    --CIDFILE STRING                 ESCREVA A ID DO RECIPIENTE NO ARQUIVO
    --CPU-PERIOD INT                 LIMITE DO PERÍODO DE CFS DA CPU (COMPLETAMENTE JUSTO)
    --CPU-QUOTA INT                  LIMITAÇÃO DE COTAÇÕES DE CPU CFS (COMPLETAMENTE JUSTA)
    --CPU-RT-PERIOD INT              LIMITE DO PERÍODO EM TEMPO REAL DA CPU EM MICROSegundos
    --CPU-RT-RUNTIME INT             LIMITE DE EXECUÇÃO EM TEMPO REAL DA CPU EM MICROSegundos
-C, --CPU-SHARES INT                 AÇÕES DA CPU (PESO RELATIVO)
    --CPUS DECIMAL                   NÚMERO DE CPUS
    --CPUSET-CPUS STRING             CPUS EM QUE PERMITE A EXECUÇÃO (0-3, 0,1)
    --CPUSET-MEMS STRING             MEMS QUE PERMITEM A EXECUÇÃO (0-3, 0,1)
-D, --DETACH                         EXECUTAR RECIPIENTE NO ID DE FUNDO E IMPRIMIR
    --DETACH-KEYS STRING             SUBSTITUIR A SEQUÊNCIA CHAVE PARA DESLOCAR UM CONTAINER
    --DEVICE LIST                    ADICIONAR UM DISPOSITIVO DE HOSPEDAGEM AO RECIPIENTE
    --DEVICE-CGROUP-RULE LIST        ADICIONAR UMA REGRA À LISTA DE DISPOSITIVOS PERMITIDOS DO CGROUP
    --DEVICE-READ-BPS LIST           LIMITE DE TAXA DE LEITURA (BYTES POR SEGUNDO) DE UM DISPOSITIVO (PADRÃO [])
    --DEVICE-READ-IOPS LIST          LIMITE DE TAXA DE LEITURA (IO POR SEGUNDO) DE UM DISPOSITIVO (PADRÃO [])
    --DEVICE-WRITE-BPS LIST          LIMITE DE TAXA DE GRAVAÇÃO (BYTES POR SEGUNDO) A UM DISPOSITIVO (PADRÃO [])
    --DEVICE-WRITE-IOPS LIST         LIMITE DE TAXA DE ESCRITA (IO POR SEGUNDO) A UM DISPOSITIVO (PADRÃO [])
    --DISABLE-CONTENT-TRUST          PULAR VERIFICAÇÃO DE IMAGEM (VERDADEIRO PADRÃO)
    --DNS LIST                       DEFINIR SERVIDORES DNS PERSONALIZADOS
    --DNS-OPTION LIST                DEFINIR OPÇÕES DE DNS
    --DNS-SEARCH LIST                DEFINIR DOMÍNIOS DE PESQUISA DE DNS PERSONALIZADOS
    --DOMAINNAME STRING              NOME DO DOMÍNIO DO NIS DO RECIPIENTE
    --ENTRYPOINT STRING              SUBSTITUIR O PONTO DE ENTRADA PADRÃO DA IMAGEM
-E, --ENV LIST                       CONFIGURAR VARIÁVEIS DE AMBIENTE
    --ENV-FILE LIST                  LER EM UM ARQUIVO DE VARIÁVEIS DE AMBIENTE
    --EXPOSE LIST                    EXPOR UMA OU MAIS PORTAS
    --GPUS GPU-REQUEST               DISPOSITIVOS DE GPU PARA ADICIONAR AO RECIPIENTE ('TODOS' PARA PASSAR EM TODOS OS GPUS)
    --GROUP-ADD LIST                 ADICIONE GRUPOS ADICIONAIS PARA ADERIR
    --HEALTH-CMD STRING              COMANDO A EXECUTAR PARA VERIFICAR A SAÚDE
    --HEALTH-INTERVAL DURATION       TEMPO ENTRE A EXECUÇÃO DO CHEQUE (MS | S | M | H) (PADRÃO 0S)
    --HEALTH-RETRIES INT             FALHAS CONSECUTIVAS NECESSÁRIAS DE RELATAR NÃO-SAUDÁVEIS
    --HEALTH-START-PERIOD DURATION   PERÍODO DE INÍCIO PARA O RECIPIENTE INICIALIZAR ANTES DE INICIAR A CONTAGEM DE RECUPERAÇÃO DE SAÚDE (MS | S | M | H) (PADRÃO 0S)
    --HEALTH-TIMEOUT DURATION        TEMPO MÁXIMO DE PERMITIR UMA VERIFICAÇÃO PARA EXECUTAR (MS | S | M | H) (0S PADRÃO)
    --HELP                           ESTE GUIA
-H, --HOSTNAME STRING                NOME DO HOST DO RECIPIENTE
    --INIT                           EXECUTE UMA ENTRADA DENTRO DO CONTAINER QUE ANTECIPA OS PROCESSOS DE SINAIS E REAPS
-I, --INTERACTIVE                    MANTENHA STDIN ABERTO MESMO QUE NÃO SEJA ANEXADO
    --IP STRING                      ENDEREÇO ​​IPV4 (por exemplo, 172.30.100.104)
    --IP6 STRING                     ENDEREÇO ​​IPV6 (por exemplo, 2001: DB8 :: 33)
    --IPC STRING                     MODO IPC A USAR
    --ISOLATION STRING               TECNOLOGIA DE ISOLAMENTO DE CONTAINERES
    --KERNEL-MEMORY BYTES            LIMITE DE MEMÓRIA KERNEL
-L, --LABEL LIST                     DEFINIR DADOS META EM UM RECIPIENTE
    --LABEL-FILE LIST                LEIA EM LINHA ARQUIVO DE ETIQUETAS DELIMITADO
    --LINK LIST                      ADICIONAR LINK A OUTRO RECIPIENTE
    --LINK-LOCAL-IP LIST             ENDEREÇOS LOCAIS LINK DO RECIPIENTE IPV4 / IPV6
    --LOG-DRIVER STRING              EXCITADOR DE LOGGING PARA O RECIPIENTE
    --LOG-OPT LIST                   OPÇÕES DO CONTROLADOR DE LOG
    --MAC-ADDRESS STRING             ENDEREÇO ​​MAC DE RECIPIENTE (E.G., 92: D0: C6: 0A: 29: 33)
-M, --MEMORY BYTES                   LIMITE DE MEMÓRIA
    --MEMORY-RESERVATION BYTES       LIMITE DE MEMÓRIA MACIA
    --MEMORY-SWAP BYTES              LIMITE DE SWAP IGUAL A MEMÓRIA MAIS SWAP: '-1' PARA ATIVAR SWAP ILIMITADO
    --MEMORY-SWAPPINESS INT          INTERVENÇÃO DA MEMÓRIA DO RECIPIENTE SINTÉTICO (0 A 100) (PADRÃO -1)
    --MOUNT MOUNT                    ANEXAR UMA MONTAGEM DO SISTEMA DE ARQUIVOS AO CONTAINER
    --NAME STRING                    ATRIBUIR UM NOME AO RECIPIENTE
    --NETWORK NETWORK                CONECTE UM RECIPIENTE A UMA REDE
    --NETWORK-ALIAS LIST             ADICIONAR ALIAS DE ESCOPO EM REDE PARA O RECIPIENTE
    --NO-HEALTHCHECK                 DESATIVAR QUALQUER CONTROLE DE SAÚDE ESPECIFICADO POR CONTAINER
    --OOM-KILL-DISABLE               DESABILITAR OOM KILLER
    --OOM-SCORE-ADJ INT              PREFERÊNCIAS DE OOM DO SINTONIZADOR (-1000 A 1000)
    --PID STRING                     NOME DO ESPAÇO PID A USAR
    --PIDS-LIMIT INT                 LIMITE DE PIDS DE RECIPIENTE SINTÉTICO (SET -1 PARA ILIMITADO)
    --PRIVILEGED                     DAR PRIVILEGIOS ESTENDIDOS A ESTE RECIPIENTE
-P, --PUBLISH LIST                   PUBLIQUE O (S) PORTO (S) DE CONTAINER AO HOSPEDEIRO
-P, --PUBLISH-ALL                    PUBLICAR TODAS AS PORTAS EXPOSTAS PARA PORTAS ALEATÓRIAS
    --READ-ONLY                      MONTE O SISTEMA DE ARQUIVO DE RAIZ DO CONTAINER COMO LIDO SOMENTE
    --RESTART STRING                 REINICIAR A POLÍTICA PARA APLICAR QUANDO UM RECIPIENTE SAIR (PADRÃO "NÃO")
    --RM                             REMOVA AUTOMATICAMENTE O CONTAINER QUANDO SAIR
    --RUNTIME STRING                 TEMPO DE UTILIZAÇÃO PARA ESTE RECIPIENTE
    --SECURITY-OPT LIST              OPÇÕES DE SEGURANÇA
    --SHM-SIZE BYTES                 TAMANHO DE / DEV / SHM
    --SIG-PROXY                      PROXY SINAIS RECEBIDOS AO PROCESSO (PADRÃO VERDADEIRO)
    --STOP-SIGNAL STRING             SINAL PARA PARAR UM RECIPIENTE ("SIGTERM PADRÃO")
    --STOP-TIMEOUT INT               TEMPO LIMITE (EM SEGUNDOS) PARA PARAR UM RECIPIENTE
    --STORAGE-OPT LIST               OPÇÕES DE EXCITADOR DE ARMAZENAMENTO PARA O CONTAINER
    --SYSCTL MAP                     OPÇÕES SYSCTL (MAPA PADRÃO [])
    --TMPFS LIST                     MONTA UM DIRETÓRIO TMPFS
-T, --TTY                            ALOCAR UM PSEUDO-TTY
    --ULIMIT ULIMIT                  OPÇÕES ULIMIT (PADRÃO [])
-U, --USER STRING                    USERNAME OU UID (FORMATO: &amp;lt;NAME | UID&amp;gt; [: &amp;lt;GRUPO | GID&amp;gt;])
    --USERNS STRING                  NOME DO USUÁRIO PARA USAR
    --UTS STRING                     UTS NAMESPACE PARA USAR
-V, --VOLUME LIST                    MONTAR UM VOLUME
    --VOLUME-DRIVER STRING           EXCITADOR DE VOLUME OPCIONAL PARA O RECIPIENTE
    --VOLUMES-FROM LIST              VOLUMES DE MONTAGEM DO (S) RECIPIENTE (S) ESPECIFICADO (S)
-W, --WORKDIR STRING                 DIRETÓRIO DE TRABALHO DENTRO DO CONTAINER
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>docker</category>
    </item>
    <item>
      <title>GrayLog parou após disco cheio?</title>
      <dc:creator>David Silva</dc:creator>
      <pubDate>Thu, 30 Apr 2020 15:36:53 +0000</pubDate>
      <link>https://dev.to/sr2ds/graylog-parando-por-problema-no-elasticsearch-ofg</link>
      <guid>https://dev.to/sr2ds/graylog-parando-por-problema-no-elasticsearch-ofg</guid>
      <description>&lt;p&gt;Se você tiver um problema com disco cheio no servidor, precisará reativar o modo de escrita do elasticSearch pois ele ficará parado até que isso seja feito.&lt;/p&gt;

&lt;p&gt;No meu caso, este problema ocasionou no stop completo do &lt;code&gt;GrayLog&lt;/code&gt;. Se você tiver o mesmo problema, basta realizar a seguinte chamada para seu servidor do Elastic.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -XPUT -H "Content-Type: application/json" https://SEU_ELASTIC:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para identificar esse problema no Graylog, acessei a tela de falhas dos índices &lt;code&gt;http://GRAYLOG:9000/system/indices/failures&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;E lá tinha uma lista de mensagens como esta:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;{"type":"cluster_block_exception","reason":"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g1zZXPPF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/851afjbxmyz58rf20i25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g1zZXPPF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/851afjbxmyz58rf20i25.png" alt="Tela de Erros de Indice do Graylog" width="880" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>graylog</category>
      <category>elasticsearch</category>
    </item>
    <item>
      <title>Apagando o cache do Redis</title>
      <dc:creator>David Silva</dc:creator>
      <pubDate>Tue, 28 Apr 2020 12:29:46 +0000</pubDate>
      <link>https://dev.to/sr2ds/apagando-o-cache-do-redis-37b7</link>
      <guid>https://dev.to/sr2ds/apagando-o-cache-do-redis-37b7</guid>
      <description>&lt;p&gt;Se você não usa cache na sua aplicação, considere usar. Otimiza muito a performance e, se bem aplicado, vai te polpar bons recursos e ainda deixar o usuário bem feliz pela agilidade na entrega das requisições. Mas hoje não vamos falar de como implementar isso, é só um artigo rápido para te ajudar a limpar o cache caso precise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como listar todo o cache
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;redis-cli keys * 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Como apagar todo cache
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;redis-cli FLUSHALL ASYNC
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Como filtrar a lista do cache
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;redis-cli keys "*ALGUMA_PALAVRA_NO_MEIO*"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Como apagar entradas específicas
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;redis-cli --raw keys "*ALGUMA_PALAVRA_NO_MEIO*" | xargs redis-cli del
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É isso aí! Como falei, é só um guia para consulta rápida!&lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

</description>
      <category>redis</category>
      <category>cache</category>
    </item>
    <item>
      <title>🐳Docker#00 Introdução Concentual</title>
      <dc:creator>David Silva</dc:creator>
      <pubDate>Fri, 24 Apr 2020 12:04:34 +0000</pubDate>
      <link>https://dev.to/sr2ds/docker-00-introducao-concentual-47gf</link>
      <guid>https://dev.to/sr2ds/docker-00-introducao-concentual-47gf</guid>
      <description>&lt;p&gt;Tenho estudado Docker com mais vontade de alguns meses pra cá (além de trabalhar no dia a dia) e não faz muito sentido fazer tudo isso se eu não passar a diante.&lt;/p&gt;

&lt;p&gt;Honestamente meu intuito é que este texto facilite um pouco sua vida, vou mesclar um pouco da minha experiência que vai desde o desenvolvimento até o Deploy para Produção. No meio do caminho talvez eu cite ferramentas extras que também podem ajudá-lo (espero).&lt;/p&gt;

&lt;p&gt;Este artigo faz parte da série &lt;strong&gt;Manual "básico" de Docker&lt;/strong&gt;. Digo básico pois realmente há muito mais do que pretendo escrever.&lt;/p&gt;

&lt;p&gt;Duas observações importantes sobre este projeto:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Não será o estado da arte de primeira, não espere isso. Aliás, suas idéias, comentários e correções serão levados a sério e revisarei o que for necessário.&lt;/li&gt;
&lt;li&gt;Eu não tenho tanta pressa. Ao mesmo tempo que estou escrevendo, estou lendo mais e sempre reviso algumas partes, implemento, melhoro, etc. Então isso pode ficar um tanto extenso mas farei o possível para que valha seu tempo.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  O que é Docker?
&lt;/h2&gt;

&lt;p&gt;Como na própria documentação:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Docker é uma plataforma para criar, executar e compartilhar aplicativos em containers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Isso pode não dizer muito ainda, mas de fato diz quase tudo.&lt;/p&gt;

&lt;p&gt;Desenvolvido pela empresa &lt;strong&gt;Docker, Inc.&lt;/strong&gt;, Docker é um software de administração de contêineres que visa abstrair a camada de virtualização de uma forma que simplifique (MUITO) a vida de desenvolvedores e administradores de sistemas.&lt;/p&gt;

&lt;p&gt;Você já deve ter usado ou visto uma máquina virtual. Daquelas que nos permitem rodar um sistema operacional sobre o outro, sabe? Tipo &lt;strong&gt;VirtualBox&lt;/strong&gt;. Você instala o VirtualBox no Windows e pode instalar outro Windows (espero que não faça) dentro dele.&lt;/p&gt;

&lt;p&gt;Isso é bastante útil para fazer testes em ambientes diferentes do que você está usando e até para rodar aplicações que não funcionam no seu sistema atual. É diferente de uma máquina virtual, que executa um sistema operacional (guest OS) sobre o outro (host OS) e, só depois, executa as aplicações.&lt;/p&gt;

&lt;p&gt;Um contêiner tem a capacidade de se beneficiar do kernel do seu sistema host para executar aplicações.&lt;/p&gt;

&lt;p&gt;Na imagem abaixo, fica um pouco mais claro:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ferzekt4smvip27horqb7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ferzekt4smvip27horqb7.png" alt="https://dev-to-uploads.s3.amazonaws.com/i/erzekt4smvip27horqb7.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Comparativo entre a arquitetura de um sistema de contêineres versus arquitetura de um sistema virtualizado. Fonte: &lt;a href="https://docs.docker.com/get-started/" rel="noopener noreferrer"&gt;https://docs.docker.com/get-started/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note que quando usamos uma máquina virtual com um sistema operacional inteiro e só depois a aplicação desejada, estamos literalmente jogando fora uma grande quantidade de recursos de hardware que podem (e devem) ser melhor aproveitados. Além de ser caro em recursos físicos, é lento e pesado. Ou seja, fica muito mais complexo replicar, compartilhar e, claro, escalar utilizando uma arquitetura baseada em máquina virtuais.&lt;/p&gt;

&lt;p&gt;Tudo que estamos falando agora, a respeito de contêineres não é tão novo assim, e já funcionava antes do Docker. O Unix permitia realizar essa tarefa nativamente através do velho &lt;code&gt;chroot&lt;/code&gt;, incluído em 1979, de forma limitada mas realizável. Melhorou no GNU/Linux, com a possibilidade de rodar processos isolados com o &lt;code&gt;cgroup&lt;/code&gt;, desenvolvido pelo time de engenharia da Google em 2006 (talvez eu faça isso manualmente e documento em um outro artigo).&lt;/p&gt;

&lt;p&gt;Apesar de contêineres serem possíveis desde muito tempo atrás, não eram uma tarefa simples de se realizar. Até que o Docker veio para facilitar tudo isso, abstraindo toda complexidade técnica e nos permitindo usar os recursos e dedicar tempo em nossas próprias aplicações. Porém, alguns conceitos precisam ser bem entendidos para se aprofundar melhor no mundo dos contêineres: a diferença entre &lt;strong&gt;imagens&lt;/strong&gt; e &lt;strong&gt;contêineres&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Imagens
&lt;/h2&gt;

&lt;p&gt;A abstração não está apenas na execução dos contêineres, como vimos até agora, mas também na criação das imagens que são utilizadas como base para a execução deles. Imagem é uma espécie de molde usado para a criação das instâncias (contêiner). Existem diversas imagens já construídas e podemos reaproveitá-las para facilitar nossa vida. A Docker, Inc. é responsável pelo maior hub de imagens oficiais e não-oficiais, o &lt;strong&gt;Docker Hub&lt;/strong&gt; (&lt;a href="https://hub.docker.com/" rel="noopener noreferrer"&gt;https://hub.docker.com/&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Imagens são construídas a partir de um arquivo de receita conhecido por Dockerfile. Em breve vamos começar a escrever essas receitas e compreender maneiras boas e ruins de fazer diversas coisas, para diferentes cenários.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contêineres
&lt;/h2&gt;

&lt;p&gt;Damos o nome de contêiner a qualquer instância criada a partir de um molde (imagem docker). Fazendo um paralelo com o paradigma de orientação a objetos, a imagem docker é a classe enquanto que o objeto é o contêiner. Podemos ter diversos contêineres criados a partir da mesma imagem. Um contêiner permite executar a instância de alguma coisa de forma isolada, flexível e escalável. Ele só vive enquanto seu propósito de execução estiver, claro, em execução.&lt;/p&gt;

&lt;p&gt;Quando lidamos com containers, precisamos começar considerando que os containers só nascem para morrer. Ou seja, não tenha apego emocional no planejamento, ele precisa nascer, executar e morrer. Você pensando assim, começará a desenvolver aplicações cada vez mais 'conteinerizáveis'.&lt;/p&gt;

</description>
      <category>series</category>
      <category>docker</category>
      <category>devops</category>
    </item>
    <item>
      <title>🐳Instalando Docker no Oracle Linux</title>
      <dc:creator>David Silva</dc:creator>
      <pubDate>Thu, 23 Apr 2020 13:43:41 +0000</pubDate>
      <link>https://dev.to/sr2ds/instalando-docker-no-oracle-linux-nd6</link>
      <guid>https://dev.to/sr2ds/instalando-docker-no-oracle-linux-nd6</guid>
      <description>&lt;p&gt;Se você também está utilizando a Oracle Cloud, provavelmente vai precisar instalar o docker em algum momento.&lt;/p&gt;

&lt;p&gt;A propósito, as instâncias gratuitas da OCI rodam com Oracle Linux e elas podem servir para fazer testes. Só possuem 1Gb de memória RAM mas, para você ter ideia, eu já subi containers de backend com &lt;code&gt;nodejs&lt;/code&gt; e containers de entregas estáticas com &lt;code&gt;nginx&lt;/code&gt; no mesmo servidorzinho e dá para brincar.&lt;/p&gt;

&lt;p&gt;A instalação do Docker é simples e vai funcionar exatamente nesta sequência:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## Incluir Repositório Docker
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

## Instalar docker-engine e docker-compose
sudo yum install docker-engine docker-compose

## Habilitar uso do Docker para o usuário atual (sem sudo)
sudo usermod -aG docker $USER

## Subir o docker na inicialização do sistema
sudo systemctl enable docker

## Reinicie pra tudo entrar em vigor
reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>docker</category>
      <category>oraclecloud</category>
    </item>
    <item>
      <title>Publicando Imagens no OCIR - Registry Oracle Cloud</title>
      <dc:creator>David Silva</dc:creator>
      <pubDate>Wed, 15 Apr 2020 17:34:22 +0000</pubDate>
      <link>https://dev.to/sr2ds/publicando-imagens-no-ocir-registry-oracle-cloud-2od1</link>
      <guid>https://dev.to/sr2ds/publicando-imagens-no-ocir-registry-oracle-cloud-2od1</guid>
      <description>&lt;p&gt;O processo de publicação de imagens no Registry da Oracle Cloud é similar ao processa da AWS e GCP, não foge do padrão de publicação do docker. Basta autenticar e dar &lt;code&gt;push&lt;/code&gt;, sem segredos.&lt;/p&gt;

&lt;p&gt;Após fazer login no seu painel do Oracle Cloud, clique no Menu Registry dentro de Developer Services.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FdhV7y4z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/phh2kehe67eysuu4jqac.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FdhV7y4z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/phh2kehe67eysuu4jqac.png" alt="Menu Oracle Cloud - Registry OCIR" width="505" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O Painel é bem simples e amigável, para começar, crie um Repositório.&lt;/p&gt;

&lt;p&gt;PS: Evite ter imagens imensas assim 🤣&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PHDT1CwA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9m03le8x5ckgjahqi85r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PHDT1CwA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9m03le8x5ckgjahqi85r.png" alt="Painel Registry - Oracle Cloud" width="880" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com o nome do repositório em mãos, precisamos tomar nota do sua região, do namespace da sua conta e criar um token de autenticação. Vamos lá!&lt;/p&gt;

&lt;h2&gt;
  
  
  Região Conta Oracle Cloud
&lt;/h2&gt;

&lt;p&gt;Para saber sua região é simples, basta ver o link de acesso. Exemplo:&lt;br&gt;
&lt;code&gt;https://console.sa-saopaulo-1.oraclecloud.com/containers/registry/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A região do meu registry é &lt;code&gt;sa-saopaulo-1&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  NameSpace Tenancy
&lt;/h2&gt;

&lt;p&gt;Clique sobre o ícone do Perfil (canto superior direito) e em seguida em &lt;code&gt;Tenany: Alguma coisa&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Na página que abrir, note na sessão &lt;code&gt;Object Storage Settings&lt;/code&gt;, tem um campo que contém o seu namespace: &lt;code&gt;Object Storage Namespace:&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Auth API Token Oracle Cloud
&lt;/h2&gt;

&lt;p&gt;Para criar um token de autenticação, acesse seu perfil clicando no ícone e depois em seu usuário (canto superior direito).&lt;/p&gt;

&lt;p&gt;Na página que abrir, clique em &lt;code&gt;Auth Tokens&lt;/code&gt; da barra lateral esquerda. Em seguida, basta clicar em &lt;code&gt;Generate Token&lt;/code&gt;, colocar um nome e copiar o token.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AzC3b9xJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/oyxfj0fc8kdfhlvxms4y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AzC3b9xJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/oyxfj0fc8kdfhlvxms4y.png" alt="Menu Auth Tokens - Oracle Cloud" width="598" height="284"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Login Oracle Registry OCIR com Docker
&lt;/h2&gt;

&lt;p&gt;Agora o login é simples, a sequência é a seguinte:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker login SUAREGIAO.ocir.io
SEUNAMESPACE/SEULOGIN
TOKEN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Tag e Push
&lt;/h3&gt;

&lt;p&gt;Para gerar sua tag e publicar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker tag SUAIMAGEMLOCAL:&amp;lt;tag&amp;gt; SUAREGIAO.ocir.io/SEUNAMESPACE/SEUREPOSITORIO:&amp;lt;tag&amp;gt;

docker push SUAREGIAO.ocir.io/SEUNAMESPACE/SEUREPOSITORIO:&amp;lt;tag&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se tiver dúvidas, não deixe de comentar!&lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>oraclecloud</category>
      <category>devops</category>
    </item>
    <item>
      <title>Integrando Jenkins e Gitlab</title>
      <dc:creator>David Silva</dc:creator>
      <pubDate>Wed, 15 Apr 2020 15:10:30 +0000</pubDate>
      <link>https://dev.to/sr2ds/integrando-jenkins-e-gitlab-48o9</link>
      <guid>https://dev.to/sr2ds/integrando-jenkins-e-gitlab-48o9</guid>
      <description>&lt;p&gt;Automatizar certas tarefas fará sua vida ser muito mais prática e produtiva. Um exemplo bom de tarefas que DEVEM ser automatizadas é o deploy.&lt;/p&gt;

&lt;p&gt;Talvez você ainda não tenha os &lt;code&gt;stages&lt;/code&gt; ideais para fazer a build e publicar em produção de forma automática, mas isso não pode te impedir de automatizar os ambientes de desenvolvimento e homologação, por exemplo.&lt;/p&gt;

&lt;p&gt;Se você já tem tarefas no Jenkins e usa o GitLab, isso pode ser feito de uma forma bem simples e rápida:&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuração Jenkins
&lt;/h2&gt;

&lt;p&gt;Vamos precisar de um token para a autenticação acontecer, acesse a configuração de um usuário que tenha permissão no seus jobs. Algo como:  &lt;code&gt;http://LINK_JENKINS/user/admin/configure&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Nesta página você poderá administrar os tokens.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NgOoskaK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8ghaee1xyhsalqtusl4i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NgOoskaK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8ghaee1xyhsalqtusl4i.png" alt="Administração de Usuário no Jenkins - Input de criação de Token" width="880" height="235"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora que temos o token e usuário em mãos, só precisamos configurar o projeto lá no GitLab.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuração gitlab
&lt;/h2&gt;

&lt;p&gt;No gitlab, acesse seu projeto e vá no Menu &lt;code&gt;Configurações &amp;gt; Integrações&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Nesta tela você poderá definir integrações de plugins que estão configuradas no seu Jenkins e também cadastrar Hooks manuais, como faremos.&lt;/p&gt;

&lt;p&gt;No meu caso, quero que quando houver Merge Requests com uma branch específica, o script de deploy seja executado. Veja a imagem abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R_XFv3Oj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7t404qhxtb7cdqxvybto.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R_XFv3Oj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7t404qhxtb7cdqxvybto.png" alt="Configuração de Webhook de um projeto no GitLab" width="880" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seu link deverá ser a combinação de um usuário, token e o Job do Jenkins: &lt;code&gt;http://USER:TOKEN@LINK_JENKINS/view/Fronted/job/Frontend/build&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Nesse caso, &lt;code&gt;view/Fronted/job/Frontend/build&lt;/code&gt; é um atalho para meu Job. Também pode ser o link direto do Job: &lt;code&gt;/job/NOME/build&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Isso é o suficiente para as rotinas acontecerem automaticamente. Claro que é uma configuração básica mas poderá simplificar um pouco sua vida.&lt;/p&gt;

&lt;p&gt;Até a próxima.&lt;/p&gt;

&lt;p&gt;Créditos da capa: &lt;a href="https://letztest.blogspot.com/2017/09/how-to-integrate-jenkins-and-gitlab.html"&gt;https://letztest.blogspot.com/2017/09/how-to-integrate-jenkins-and-gitlab.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>jenkins</category>
      <category>gitlab</category>
    </item>
  </channel>
</rss>
