<p><img src="http://www.fernandoike.com/images/solomon-keynote-penguin-authentication-300x235.png" /></p>
<p>A <a href="https://blog.docker.com/2014/10/docker-1-3-signed-images-process-injection-security-options-mac-shared-directories/">versão 1.3</a> do <a href="http://www.docker.com">Docker</a> foi lançada recentemente. Eu
gostei dela por duas razões.</p>
<h2>Verificação da assinatura digital</h2>
<p>O pessoal da DotCloud já tinha <a href="https://blog.docker.com/2014/09/docker-hub-official-repos-announcing-language-stacks/">anunciado</a> alguns repositórios
oficiais de alguma ferramentas e linguagens de programação (<strong>C(++)/GCC</strong>,
<strong>PHP</strong>, <strong>Go</strong>, <strong>Java</strong>, <strong>Nodejs</strong>, <strong>Python</strong>, <strong>Perl</strong>, <strong>Ruby</strong>,
etc.). O Docker verifica se os repositórios oficiais estão íntegros, eles
(os repositórios) são assinados com chave criptográficas. (Obs. procurando
que tipos de chaves são e como são assinados)</p>
<p>Antes disso eu tinha um pouco de restrição com os repositórios de terceiros.
Até então, preferia criar meus templates de containers.</p>
<h2>Entrar num container em execução</h2>
<p>Nas versões anteriores era um pouco trabalhoso para você entrar num container
e analisar um problema que estivesse ocorrendo, exemplo: identificar um
problema de permissão num diretório.</p>
<p>Na versões anteriores teria que ser feito assim:</p>
<p>Na criação do container deveria compartilhar os diretórios de log e da
aplicação. Supondo que seja um servidor web simples, o dockerfile seria
como o abaixo:</p>
<span>Dockerfile </span>
<div><table><tr><td><pre><span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
<span>6</span>
<span>7</span>
<span>8</span>
<span>9</span>
<span>10</span>
<span>11</span>
<span>12</span>
<span>13</span>
<span>14</span>
<span>15</span>
<span>16</span>
<span>17</span>
<span>18</span>
<span>19</span>
</pre></td><td><pre><code><span>FROM debian:wheezy
</span><span>
</span><span>MAINTAINER fike at midstorm.org
</span><span>
</span><span>RUN apt-get udpate <span>&&</span> apt-get install apache2
</span><span>
</span><span>ADD mysite /var/www/
</span><span>
</span><span>RUN apt-get autoremove -y <span>&&</span> rm -rf /tmp/* /var/tmp/*
</span><span>
</span><span>ENV APACHE_RUN_USER www-data
</span><span>
</span><span>ENV APACHE_RUN_GROUP www-data
</span><span>
</span><span>ENV APACHE_LOG_DIR
</span><span>
</span><span>VOLUMES <span>[</span><span>"/var/log/apache2"</span>, <span>"/var/www"</span><span>]</span>
</span><span>
</span><span>CMD <span>[</span><span>"/usr/sbin/apache2"</span>, <span>"-D"</span>, <span>"FOREGROUND"</span><span>]</span>
</span></code></pre></td></tr></table></div>
<h3>Criando o container</h3>
<div><table><tr><td><pre><span>1</span>
</pre></td><td><pre><code><span>fike@kamino:~<span>$ </span>docker build -t<span>=</span><span>"mysimplesite"</span> .
</span></code></pre></td></tr></table></div>
<h3>Executando</h3>
<div><table><tr><td><pre><span>1</span>
</pre></td><td><pre><code><span>fike@kamino:~<span>$ </span>sudo docker run -d -p 80:80 mysimplesite
</span></code></pre></td></tr></table></div>
<h3>Putz! Os internautas não estão conseguindo acessar meu site, ele está retornando 403.</h3>
<p>Se não tiver uma versão mais recente do util-linux (> 2.27)
<a href="http://jpetazzo.github.io/2014/03/23/lxc-attach-nsinit-nsenter-docker-0-9/">não poderá usar</a> o nsenter. Outra forma seria executar um segundo
container e acessar os diretórios compartilhados do primeiro.</p>
<div><table><tr><td><pre><span>1</span>
<span>2</span>
<span>3</span>
</pre></td><td><pre><code><span>fike@kamino:~<span>$ CONTAINERID</span><span>=</span><span>$(</span>docker ps |grep mysimplesite|awk <span>'{ print $1}'</span>
</span><span>
</span><span>fike@kamino:~<span>$ </span>docker run -it --volumes-from<span>=</span><span>$CONTAINERID</span> /bin/bash
</span></code></pre></td></tr></table></div>
<p>Se estiver usando um <a href="http://www.fluentd.org/">Fluent</a> ou outro agregador de logs não
precisaria disso, certo? Nesse caso, sim. Entretanto pode ocorrer de precisar
inspecionar um container para verificar um vazamento de memória ou algo
que necessite analisar a aplicação em produção.</p>
<p>Se o problema estiver relacionado a rede, a abordagem era parecida. Um bom
exemplo, alterar uma zona DNS no Bind9 usando o <strong>rndc</strong>.</p>
<div><table><tr><td><pre><span>1</span>
<span>2</span>
<span>3</span>
</pre></td><td><pre><code><span>fike@kamino:~<span>$ CONTAINERID</span><span>=</span><span>$(</span>docker ps |grep mysimplesite|awk <span>'{ print $1}'</span>
</span><span>
</span><span>fike@kamino:~<span>$ </span>docker run -it --volumes--from<span>=</span><span>$CONTAINERID</span> --net<span>=</span><span>'container:$CONTAINERID'</span> mysimplesite /bin/bash
</span></code></pre></td></tr></table></div>
<p>No 1.3 é bem mais simples.</p>
<div><table><tr><td><pre><span>1</span>
<span>2</span>
<span>3</span>
</pre></td><td><pre><code><span>fike@kamino:~<span>$ CONTAINERID</span><span>=</span><span>$(</span>docker ps |grep mysimplesite|awk <span>'{ print $1}'</span>
</span><span>
</span><span>fike@kamino:~<span>$ </span>docker <span>exec</span> -it <span>$CONTAINERID</span> /bin/bash
</span></code></pre></td></tr></table></div>
Docker 1.3
23 de Outubro de 2014, 15:02 - sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 11 vezes
0sem comentários ainda