Building Debian images by jigdo
19 de Agosto de 2015, 19:03 - sem comentários aindaA friend asked me how to got a Debian Old Image, she wanted to download Debian Squeeze DVD image. Unfortunately, it’s impossible to download by Debian-CD mirror because Squeeze isn’t more maintainer. So, it’s possible to get a Image by Debian-CD primary server but it’s locate in Sweden. Nothing problem, right? Well, She lives in Brazil and the download time is a little bit more than 8 hours.
A good tool to “download” a Debian image is the Jigdo. It’s a program to synchronize repositories and generate Images. It get packages and build a image locally in your computer.
I made a simple test, I used jigdo to “download” the first Squeeze DVD by brazilian repository (Unicamp) and compare with a download image by PR (Primary Server). The difference was huge, PS download took a long time to finish (8 hours) and Unicamp mirror took 100 minutes.
Well, let’s go to practice.
Install jigdo
1
|
|
Downloading and building image
The jigdo file (.jigdo) is simple list with all packages and hash of a instalation image. You need it to start the downloads. In this case, I used jigdo file to build first Squeeze DVD.
1
|
|
Before to begin download, jidgo need some arguments. Fill arguments of your preference but remember that the argument more important is the mirror. If you have doubt what’s mirror is more fast, you can use netselect-apt to discovery. For my test, I’m used Unicamp mirror (http://debian.las.ic.unicamp.br/debian).
My jigdo-lite conf file.
1 2 3 4 5 6 7 8 9 |
|
Nice, huh?
Take a coffee and forget to download Debian images using others programs (curl, wget, etc.). :)
FISL 16
10 de Agosto de 2015, 18:29 - sem comentários aindaFISL 16 aconteceu algumas semanas atrás… e depois de nem tão rigoroso inverno consegui rascunhar alguma coisas sobre o evento.
Impressões
Como sempre, sempre bom rever os amigos e conhecidos de inúmero projetos que participam. O evento não estava tão lotado como nos últimos anos que participei mas mesmo sim acredito que teve um bom público.
A internet até que funcionou razoavelmente bem, o wifi do evento era usável a maior parte do tempo e também gostei das palestras que assisti. Curti demais participar da Mini-Debconf realizada durante o FISL, fico feliz que em 2015 no Brasil serão (no mínimo) 3 Micro/Mini-Debconf. :)
As minhas apresentações
Este ano fiz duas apresentações no FISL16, uma sobre Web Performance e a outra sobre Management 3.0. A apresentação de de Web Performance foi a última vez que apresentei (acho), fiz algumas pequenas atualizações e acréscimo de exemplos que a deixou com +– 100 lâminas (slides). Já tem material suficiente para escrever um livro (quem sabe…). ;)
A apresentação sobre Management 3.0 é sobre como foi descobrir que usamos (equipe de TI que participei) esse conceito antes de saber que existiu um nome. Eu descobri Management 3.0 depois de participar de um curso de Scrum com Manoel Pimentel, isso foi alguns anos depois que já não era mais gerente. Ele me ajudou bastante para avaliar os erros e acertos como gerente. Recomendo para quem se interessar desempenhar o papel de líder de equipe ou chefia a estudar um pouco mais sobre tema.
Um milhão de usuários simultâneos
O vídeo da apresentação pode ser acessado por aqui e aqui.
Management 3.0
O vídeo da apresentação pode ser acessado por aqui.
Eventos em Maio de 2015
11 de Maio de 2015, 14:45 - sem comentários aindaEssa semana estarei participando de dois eventos como palestrante.
Devcamp
O Devcamp é a “A maior conferência de desenvolvimento de software do interior São Paulo” e esterei apresentando sobre a minha experiência em migrar para Docker. Docker é novo buzzword um projeto de automação de deploys de aplicações dentro de contêineres. Se estiver por lá e quiser tomar um café, estarei a disposição.
Meetup Germinadora
Provavelmente é a última vez que apresente essa palestra sobre Web Performance (“Um milhão de usuários simultâneos”). Não que eu não goste de falar sobre o tema, pelo contrário (gosto bastante)! Tem algumas partes específicas dessa apresentação que quero abordar numa próxima vez.
Se estiver de bobeira por aqui em São Paulo, passe por lá.
Docker 1.6 lançado
27 de Abril de 2015, 17:48 - sem comentários aindaO lançamento da versão 1.6 veio com boas novidades, algumas delas são do ecossistema mas cabe destacar: Docker Compose, Docker Machine e o Registry. O Compose é o antigo Fig, ele facilita bastante se você trabalho com sistemas em múltiplos containers. O Machine permite criar uma infraestrutura Docker rapidamente, seja numa máquina virtual (exemplo: Virtualbox) ou mesmo numa IaaS (AWS, Digital Ocean, etc.).
As funcionalidades da versão 1.6 que gostei foram:
Suporte a Image Labels No Dockerfile pode adicionar um campo extra para usar como identificação sua. Isso permite pesquisar informações de containers e imagens usando esse campo.
Logging Drivers Ficou bem mais fácil enviar os logs para um Syslog ou similares. Muita gente tem dificuldade de lidar com os logs do container até essa versão.
Alterar as imagens de containers sem recriá-las A partir desta versão é possível alterar algumas coisas numa imagem de container sem a necessidade de gerar novamente.
Ulimit A minha favorita, agora é possível alterar alguns parâmetros do ulimit, bom para serviços que usam muito processos como banco de dados.
Para saber mais, acesse o blog do Docker que tem mais informações.
Obs.: Ah, a versão 1.6 está na Experimental no Debian e infezlimente não entrou na Jessie, mas logo estará disponível no Backports.
Obs.2: O original dessa imagem é do blog do Docker.
docker 1 dot 6 lancado
27 de Abril de 2015, 0:00 - sem comentários ainda{% img center /images/docker-1.6.png %}
O lançamento da versão 1.6 veio com boas novidades, algumas delas são do ecossistema mas cabe destacar: Docker Compose, Docker Machine e o Registry. O Compose é o antigo Fig, ele facilita bastante se você trabalho com sistemas em múltiplos containers. O Machine permite criar uma infraestrutura Docker rapidamente, seja numa máquina virtual (exemplo: Virtualbox) ou mesmo numa IaaS (AWS, Digital Ocean, etc.).
As funcionalidades da versão 1.6 que gostei foram:
Suporte a Image Labels No Dockerfile pode adicionar um campo extra para usar como identificação sua. Isso permite pesquisar informações de containers e imagens usando esse campo.
Logging Drivers Ficou bem mais fácil enviar os logs para um Syslog ou similares. Muita gente tem dificuldade de lidar com os logs do container até essa versão.
Alterar as imagens de containers sem recriá-las A partir desta versão é possível alterar algumas coisas numa imagem de container sem a necessidade de gerar novamente.
Ulimit A minha favorita, agora é possível alterar alguns parâmetros do ulimit, bom para serviços que usam muito processos como banco de dados.
Para saber mais, acesse o blog do Docker que tem mais informações.
Obs.: Ah, a versão 1.6 está na Experimental no Debian e infezlimente não entrou na Jessie, mas logo estará disponível no Backports.
Obs.2: O original dessa imagem é do blog do Docker.
Debian Jessie (8) lançado
26 de Abril de 2015, 21:53 - sem comentários aindaO Debian continua executando o plano de dominação do universo. As duas novidades é que a eleição do novo líder do projeto, Neil McGovern, após dois mandatos do Lucas Nussbaum.
A outra novidade é que nova versão estável (Jessie) do Debian foi lançada no dia 25 de Abril de 2015 com a narração da mudança do Wheezy para a Jessie. Se quiser ver como foi o lançamento, use a hashgtag #releasingjessie
São 75 idiomas suportadas na instalação, systemd como sistema de inicialização padrão, MySQL, MariaDB, Samba 4.1, PostgreSQL 9.4, etc. São mais de 43 mil pacotes a partir de 21 mil (pacotes) fonte. Suporte a numa nova arquitetura (ARM64). O tempo de freezing desta versão foi relativamente curto, 171 dias.
Pouco? Bom, o restante das novidades você pode ler mais [aqui][debianews].
Quem diria?
Nos anos que trabalhei como consultor de tecnologias em software livre/código aberto, era muito difícil integrar ou substituir sistemas proprietários. Principalmente nos casos de servidores, storages e/ou equipamento de backups.
O trabalho maior não era o técnico, era de reverter o marketing negativo. Coisas como: “Não tem licença, como é que você irá acreditar numa empresa que não é dona do produto”, “A comunidade vai dar suporte? Fica esperando, então!”, “O fornecedor de hardware não suporta o Debian, se quiser use uma distribuição comercial”, “Um Sistema Operacional que só usa tela preta? Isso é anos 80!”
Depois de alguns e bons anos o que mudou? Muita coisa, tanto que a Microsoft participou das festas de lançamento da Jessie.
iprf 2015 e linux
2 de Março de 2015, 0:00 - sem comentários aindaaptitude install libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 libglu1-mesa:i386
root para instalar o receitanet
Configuração de compressão gzip para sites e ranking de CDN
24 de Dezembro de 2014, 1:55 - sem comentários aindaEstava lendo um texto do Steve Souders sobre a alteração da configuração padrão gzip na Fastly. Fastly é uma CDN concorrente da Akamai e tem clientes como Twitter, Shopify, The Guardian, Rakuten, etc.
Ele cita como chegaram no template padrão da configuração deles usando os dados do HTTP Archive, este é um projeto que consolida testes executados usando a versão pública do Webpagetest. Os testes são executados em mais ou menos 18 mil URLs e tem relatórios variados, por exemplo: número médio de requisições HTTP por página, crescimento do HTML nas páginas, etc.
Tanto do Steve Souders quanto no site HTTP Archive fazem referência ao Bigqueries com diversas consultas realizadas na base dados do HTTP Archive. Um texto postado no Bigqueries chamou-me a atenção, era sobre o Ranking de CDNs considerandos as páginas mais populares.
Ele considerou apenas as páginas que estavam sendo entregues por alguma CDN e não considerou todas as requisições HTTP das páginas. Usei o BigQuery do Google considerando os dados disponíveis do HTTP Archive no mês de Novembro de 2014 para responder: Quais são as CDNs mais populares ao analisar as requisições HTTP?
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
E quais foram as CDNs mais usadas naquele período?
1 2 3 4 5 6 7 8 9 10 |
|
A surpresa no ranking é o Google, porque ele seria considerado uma CDN?
Para tentar entender, outra consulta buscando os principais hostnames/domínios que estão na CDN do Google.
1 2 3 4 5 6 7 8 9 |
|
Basicamente, a CDN da Google entrega seus próprios serviços: Analytics, Adsense, Doubleclick, Youtube, etc. Os hostnames fonts.googleapis.com, ajax.googleapis.com estão relacionados a iniciativas do Goolgle de hospedar alguns frameworks javascripts e webfonts gratuitamente.
Então, o Google poderia ser considerado um fornecedor de CDN? Um pouco difícil de definir porque não existe um documento canonical (RFC) que defina CDN. A Wikipedia tem artigo sobre CDN e a primeira frase tem uma boa definição
“A content delivery network or content distribution network (CDN) is a large distributed system of servers deployed in multiple data centers across the Internet. The goal of a CDN is to serve content to end-users with high availability and high performance. CDNs serve a large fraction of the Internet content today, including web objects (text, graphics and scripts), downloadable objects (media files, software, documents), applications (e-commerce, portals), live streaming media, on-demand streaming media, and social networks.”
Se a for usado a definição da Wikipedia para CDN, pode-se afirmar que alguns serviços do Google são uma CDN. Entretanto, se descartar o Google como CDN e consideramos que as demais restantes são CDNs que seus usuários paguem para entregar o seu conteúdo. Como ficaria o ranking com as 15 mais usadas?
1 2 3 4 5 6 7 8 9 10 |
|
Dentre as acima listadas, as que tem ou tera ponto de presença no Brasil: Akamai, Cloudflare, EdgeCast, CloudFront, Fastly, MaxCDN (NetDNA), CDNetwokrs, ChinaNetCenter, Level3, Incapsula e Highwinds.
Voltando ao início e aoEu texto do Souders sobre compressão, ele propôs que habilite/configure a compressão quando as respostas HTTP tiverem :
Extensions: js css html json ico eot otf ttf
Ou
Content-Type: text/html application/x-javascript text/css application/javascript text/javascript text/plain text/xml application/json application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/xml font/eot font/opentype font/otf image/svg+xml image/vnd.microsoft.icon
A configuração padrão na Akamai é:
Content-Type: text/html text/css application/x-javascript text/xml text/plain application/json text/javascript *
Fazendo consulta similar ao do Souders para saber “Quais os content-types mais mais recorrentes acima de 1 mil recorrências e que tiveram compressão habilitada?”.
1 2 3 4 5 6 7 8 |
|
Da lista, pode-se descartar alguns: application/octet-stream (formato genérico de arquivos), text/x-component (formato microsoft antigo, não mais usado), application/x-shockwave-flash, font/woff e application/x-www-form-urlencoded. Os três últimos são formatos já com compressão e fazer compressão num servidor web ou CDN é usar o processamento desnecessariamente.
Juntado as listas, a regra a ser configurado no servidor web, proxy reverso ou CDN será:
Extensions: js css html json ico eot otf ttf
Content-Type: text/html application/x-javascript text/css application/javascript text/javascript text/plain text/xml application/json application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/xml font/eot font/opentype font/otf image/svg+xml image/vnd.microsoft.icon text/x-js.
Acrescentado o text/x-js na lista de Content-Type, um site poderá ter mais requisições HTTP compressão, consequentemente o site terá o tráfego de rede menor. Claro, sem esquecer de mencionar que o usuário poderá ter uma experência melhor com as páginas do site já que elas poderão ser menores e mais rápidas.
Nas novas configurações na Akamai estou acrescentando os Content-Type e os arquivos para as regras de compressão e cache como abaixo:
Regra de compressão
Regra de Cache
Os resultados e comentários sobre ranking das CDNs estão no texto que publiquei publicado no Bigqueries.
Obs.: As expressões regulares no BigQuery são baseadas no RE2, recomendo fortemente ler a documentação dele.
Links
http://httparchive.org/trends.php
http://en.wikipedia.org/wiki/Content_delivery_network
http://www.fastly.com/blog/new-gzip-settings-and-deciding-what-to-compress/
http://bigqueri.es/t/whats-the-popularity-of-different-cdns/477
https://cloud.google.com/bigquery/query-reference
https://code.google.com/p/re2/wiki/Syntax
Meetup Docker-SP: Docker na vida real
17 de Novembro de 2014, 12:44 - sem comentários aindaNo dia 18 de Novembro estarei no Meetup Docker São Paulo para falar um pouco da migração de serviços de infraestrutura para o Docker.
A apresentação vai ser um pouco diferente que fiz no TDC em Porto Alegre pelo tempo menor disponível para expor. Mas se estiver por lá, podemos conversar um pouco mais sobre containers. :)
A do TDC está logo mais abaixo:
Docker 1.3
23 de Outubro de 2014, 15:02 - sem comentários ainda<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<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 dot 3
23 de Outubro de 2014, 0:00 - sem comentários ainda{% img center /images/solomon-keynote-penguin-authentication-300x235.png %}
A versão 1.3 do Docker foi lançada recentemente. Eu gostei dela por duas razões.
Verificação da assinatura digital
O pessoal da DotCloud já tinha anunciado alguns repositórios oficiais de alguma ferramentas e linguagens de programação (C(++)/GCC, PHP, Go, Java, Nodejs, Python, Perl, Ruby, 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)
Antes disso eu tinha um pouco de restrição com os repositórios de terceiros. Até então, preferia criar meus templates de containers.
Entrar num container em execução
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.
Na versões anteriores teria que ser feito assim:
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:
{% codeblock Dockerfile lang:bash %}
FROM debian:wheezy
MAINTAINER fike at midstorm.org
RUN apt-get udpate && apt-get install apache2
ADD mysite /var/www/
RUN apt-get autoremove -y && rm -rf /tmp/* /var/tmp/*
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR
VOLUMES [“/var/log/apache2”, “/var/www”]
CMD [“/usr/sbin/apache2”, “-D”, “FOREGROUND”]
{% endcodeblock %}
Criando o container
{% codeblock lang:bash %}
fike@kamino:~$ docker build -t=“mysimplesite” .
{% endcodeblock %}
Executando
{% codeblock lang:bash %}
fike@kamino:~$ sudo docker run -d -p 80:80 mysimplesite
{% endcodeblock %}
Putz! Os internautas não estão conseguindo acessar meu site, ele está retornando 403.
Se não tiver uma versão mais recente do util-linux (> 2.27) não poderá usar o nsenter. Outra forma seria executar um segundo container e acessar os diretórios compartilhados do primeiro.
{% codeblock lang:bash %} fike@kamino:~$ CONTAINERID=$(docker ps |grep mysimplesite|awk ‘{ print $1}’
fike@kamino:~$ docker run -it –volumes-from=$CONTAINERID /bin/bash
{% endcodeblock %}
Se estiver usando um Fluent 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.
Se o problema estiver relacionado a rede, a abordagem era parecida. Um bom exemplo, alterar uma zona DNS no Bind9 usando o rndc.
{% codeblock lang:bash %} fike@kamino:~$ CONTAINERID=$(docker ps |grep mysimplesite|awk ‘{ print $1}’
fike@kamino:~$ docker run -it –volumes–from=$CONTAINERID –net=‘container:$CONTAINERID’ mysimplesite /bin/bash
{% endcodeblock %}
No 1.3 é bem mais simples.
{% codeblock lang:bash %} fike@kamino:~$ CONTAINERID=$(docker ps |grep mysimplesite|awk ‘{ print $1}’
fike@kamino:~$ docker exec -it $CONTAINERID /bin/bash {% endcodeblock %}
Eu fui: TDC 2014- Edição POA
19 de Outubro de 2014, 20:40 - sem comentários aindaParticipar de eventos é sempre uma boa oportunidade de aprender coisas novas, aumentar o networking e repassar conhecimento ou algumas lições aprendidas. :)
Acredito que o pessoal da organização do TDCtdc gostou da minha apresentação na edição de São Paulo (Você está preparado para um milhão de usuários?) porque eles aprovaram as três proposta que inscrevi.
Gostei bastante desta edição de Porto Alegre porque vi algumas coisas novas bem interessantes. As que destacam: (para mim)
- Visual Thinking (Diogo Lucas e Guilherme Lacerda)
No meu trabalho atual, costumo usar um quadro branco ou papel em detrimento à apresentações em Power Point/LibreOffice Impress para discutir com os clientes produtos e serviços, como também, definição de arquitetura.
Não sabia que isso era chamado de Visual Thinking, eu costumava chamar de “Quer que eu desenhe?” Aliás, alguns meses atrás comecei esboçar uma apresentação falando disso, vou aumentar a prioridade dela no meu TODO.
Análise de sentimento durante a Copa usando Big Data (Alan Braz) A IBM chama isso de FAMA mas me pareceu coisa do Watson. Gostei muito e fiquei ainda mais com a sensação do Big Brother (1984, George Orwell)
Software Delivery like a Boss (Guilherme Elias e Fabrízio Mello)
Nunca iria imaginar que uma apresentação sobre Software Delivery poderia ter encenação teatral, foi animal!
- Carregue seus ambientes no bolso com Vagrant e Docker (Diogo Lucas)
Foi muito interessante porque o Diogo usou o mesmo termo que eu para definir o Docker: “Disruptivo”. Bom, falei sobre ele na apresentação: “Docker na vida real”
As outras apresentações foram sobre Web Performance – “Será que seu site está preparado para um milhão de usuários simultâneos?” e “Managenment 3.0 – a vida pós-agilidade”
Será que seu site está preparado para um milhão de usuários simultâneos?
Docker na vida real
Managenment 3.0 – a vida pós-agilidade
PGDAY Campinas: Docker e PostgreSQL
19 de Setembro de 2014, 15:03 - sem comentários aindaFazia um bom tempo que não participava de um evento de PostgreSQL e finalmente a pude participar novamente. Fui no PGDAY Campinas e fiquei muito contente em ver muita coisas nova do PostgreSQL e o ecossistema em volta.
Aliás, teve ligthing talk e puder falar um pouco sobre como usar o PostgreSQL num container Docker.
Ah, já estava esquecendo. A organização do evento estava excelente, coffee-break também. Parabéns para o pessoal que organizou o PGDAY Campinas! :)
Purge debian packages marked with rc status
12 de Setembro de 2014, 19:55 - sem comentários aindaSometimes when I find a package that is installed on my computer (Debian), I found status rc but I never found a explanation in official documentation.
For now, my OS has the following packages marked rc status:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Let us pick pcmciautils package as example. Checking if it doesn’t be installed on my OS.
1 2 3 4 |
|
Now, opening “/var/lib/dpkg/status” file, here has the status all packages existents and search pcmciautils package status.
/var/lib/dpkg/status1 2 3 4 5 6 |
|
A little strange “deinstall ok config-files” as status, right? Well, it’s more easy to understand. Checking again dpkg manual…
dpkg manual1 2 3 4 5 6 7 8 9 10 11 |
|
Gotcha! Its more easy to understand. To pcmciautils packages, the rc status is because its removed and still has the configuration file.
1 2 3 4 5 |
|
The finally, removing all packages with rc status.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
|
P.S. I know, I could went directly the final but it’s cool understand why of the things.