some updates to posts

parent e4ecb8f2
baseurl = "http://somatorio.org/"
languageCode = "pt-br"
title = "=D"
DefaultContentLanguage = "pt-br"
DefaultContentLanguageInSubdir = true
theme = "blackburn"
title = "=D"
canonifyurls = true
paginate = 10
[indexes]
tag = "tags"
topic = "topics"
[Taxonomies]
tag = "tags"
topic = "topics"
[Languages]
[Languages.pt-br]
weight = 1
subtitle = "Versão de testes :p"
[Languages.en]
weight = 2
subtitle = "Test version :p"
[params]
# Shown in the home page
......@@ -24,20 +33,36 @@ paginate = 10
custom_css = ["css/my.css"]
custom_js = ["js/my.js"]
[menu]
#[menu]
# Shown in the side menu.
[[menu.main]]
[[Languages.pt-br.menu.main]]
name = "Home"
pre = "<i class='fa fa-home fa-fw'></i>"
weight = 0
identifier = "home"
url = "/"
[[menu.main]]
url = "/pt-br/"
[[Languages.en.menu.main]]
name = "Home"
pre = "<i class='fa fa-home fa-fw'></i>"
weight = 0
identifier = "home"
url = "/en/"
[[Languages.pt-br.menu.main]]
name = "Posts"
pre = "<i class='fa fa-list fa-fw'></i>"
weight = 1
identifier = "post"
url = "/pt-br/post/"
[[Languages.en.menu.main]]
name = "Posts"
pre = "<i class='fa fa-list fa-fw'></i>"
weight = 1
identifier = "post"
url = "/post/"
url = "/en/post/"
# [[menu.main]]
# name = "Sobre"
# pre = "<i class='fa fa-user fa-fw'></i>"
......@@ -55,7 +80,7 @@ paginate = 10
# by entering your username or ID.
# SNS microblogging
# twitter = "somatorio"
twitter = "somatorio"
# gnusocial = "*" # Specify href (e.g. https://quitter.se/yourusername)
facebook = "osomatorio"
# googleplus = "*"
......
baseurl = "http://somatorio.org/"
languageCode = "pt-br"
title = "=D"
DefaultContentLanguage = "pt-br"
DefaultContentLanguageInSubdir = true
theme = "blackburn"
title = "=D"
canonifyurls = true
paginate = 10
[indexes]
tag = "tags"
topic = "topics"
[Taxonomies]
tag = "tags"
topic = "topics"
[Languages]
[Languages.pt-br]
weight = 1
#subtitle = ""
[Languages.en]
weight = 2
#subtitle = ""
[params]
locale = "pt-BR"
# Shown in the home page
subtitle = ""
brand = "somatorio.org"
......@@ -25,20 +33,36 @@ paginate = 10
custom_css = ["css/my.css"]
custom_js = ["js/my.js"]
[menu]
#[menu]
# Shown in the side menu.
[[menu.main]]
[[Languages.pt-br.menu.main]]
name = "Home"
pre = "<i class='fa fa-home fa-fw'></i>"
weight = 0
identifier = "home"
url = "/"
[[menu.main]]
url = "/pt-br/"
[[Languages.en.menu.main]]
name = "Home"
pre = "<i class='fa fa-home fa-fw'></i>"
weight = 0
identifier = "home"
url = "/en/"
[[Languages.pt-br.menu.main]]
name = "Posts"
pre = "<i class='fa fa-list fa-fw'></i>"
weight = 1
identifier = "post"
url = "/pt-br/post/"
[[Languages.en.menu.main]]
name = "Posts"
pre = "<i class='fa fa-list fa-fw'></i>"
weight = 1
identifier = "post"
url = "/post/"
url = "/en/post/"
# [[menu.main]]
# name = "Sobre"
# pre = "<i class='fa fa-user fa-fw'></i>"
......@@ -56,7 +80,7 @@ paginate = 10
# by entering your username or ID.
# SNS microblogging
# twitter = "somatorio"
twitter = "somatorio"
# gnusocial = "*" # Specify href (e.g. https://quitter.se/yourusername)
facebook = "osomatorio"
# googleplus = "*"
......
+++
title = "Comandos úteis no docker"
date = "2016-10-19T11:06:28"
aliases = [ "/post/comandos_uteis_docker/" ]
categories = [ "Docker" ]
tags = [ "Docker", "one-liners", "comandos" ]
author = "somatorio"
......
+++
title = "Continuous Delivery \"fora da caixa\""
date = "2016-10-14T19:34:23Z"
aliases = [ "/post/cd_fora_da_caixa/" ]
aliases = [ "/post/cd_fora_da_caixa/", "/post/continuous_delivery_fora_da_caixa/" ]
categories = [ "Continuous Delivery" ]
tags = [ "Tarefas", "Continuous Delivery", "CD" ]
author = "somatorio"
......@@ -28,7 +28,7 @@ Na nossa história acima vemos os [princípios](https://continuousdelivery.com/p
Claro que vendo por essa perspectiva se notam várias melhorias que podiam ser feitas no processo, e é exatamente sobre isso que é esse texto!
Muitas vezes não notamos, mas aplicamos (ou poderíamos aplicar) entrega contínua em outras tarefas que não sejam desenvolvimento de software, e exatamente por não percebermos isso acabamos deixando de incorporar práticas que trariam um melhor trabalho com maior eficiência. Pare pra pensar agora, em quantas tarefas (do trabalho ou não) podem ser aplicados os princípios de entrega contínua? Como podem ser aplicados esses princípios? Sou capaz de apostar que devem ter vindo várias idéias para melhorar o desenvolvimento dessas tarefas :)
Caso este texto tenha deixado uma "semente" de uma melhor forma de se fazer as tarefas, eu considero que ter escrito ele já não foi perda de tempo :)
Caso este texto tenha deixado uma "semente" de uma melhor forma de se fazer as tarefas, eu considero que ter escrito ele já não foi perda de tempo :)
P.s.: - "Ah, mas esta historinha não se aplica no mundo real! Nos meus grupos (escolar/faculdade, trabalho, etc) todo mundo só se escora em um!"
Bem, então em primeiro lugar isso não é um trabalho em grupo (afinal pra ser trabalho em grupo, ele meio que deve ser feito em grupo, certo?)... E em segundo lugar eu tenho um exemplo real :) o livro [Docker para desenvolvedores](https://leanpub.com/dockerparadesenvolvedores) aplica exatamente isso! De fato eu estava começando a ler sobre entrega contínua quando observei a forma que o [Rafael Gomes](http://techfree.com.br) publica o livro e notei que ele estava aplicando CD, o que gerou a idéia deste texto (o que já faz um tempo... Na época até comentei com ele sobre isso, só não sei se ele estava aplicando os princípios de maneira ciente ou não)
Bem, então em primeiro lugar isso não é um trabalho em grupo (afinal pra ser trabalho em grupo, ele meio que deve ser feito em grupo, certo?)... E em segundo lugar eu tenho um exemplo real :) o livro [Docker para desenvolvedores](https://leanpub.com/dockerparadesenvolvedores) aplica exatamente isso! De fato eu estava começando a ler sobre entrega contínua quando observei a forma que o [Rafael Gomes](http://techfree.com.br) publica o livro e notei que ele estava aplicando CD, o que gerou a idéia deste texto (o que já faz um tempo... Na época até comentei com ele sobre isso, só não sei se ele estava aplicando os princípios de maneira ciente ou não)
+++
title = "Hugo + GitLab + GitLab CI = win!"
date = "2016-10-12T10:34:44"
aliases = [ "/post/hugo_gitlab_gitlabci_win/" ]
categories = [ "blog" ]
tags = [ "Hugo", "GitLab", "CI", "Pipeline", "Automação" ]
author = "somatorio"
......@@ -10,25 +11,25 @@ author = "somatorio"
O sistema do blog foi migrado do [WordPress](http://www.wordpress.org/) para [Hugo](http://www.gohugo.io) pois:
1. Se o conteúdo do blog é completamente estático, porque ele precisa ser gerado dinamicamente?
2. Eu queria brincar com um sistema novo :p (já conhecia por cima o [jekyll](http://jekyllrb.com/), já que ele foi usado na lista do telegram)
2. Eu queria brincar com um sistema novo :p (já conhecia por cima o [jekyll](http://jekyllrb.com/), já que ele foi usado na lista do telegram)
## Como?
## Como?
No início eu simplesmente converti o conteúdo do WordPress para *markdown*, gerei o conteúdo estático (html, estrutura dos diretórios, enfim...) usando uma [imagem](https://github.com/jojomi/docker-hugo) [Docker](http://www.docker.com) do Hugo e fiz upload do conteúdo da pasta `public/` para o meu host... Mas daí eu pensei "tem de ter um jeito automatizado de fazer isso..."
No início eu simplesmente converti o conteúdo do WordPress para *markdown*, gerei o conteúdo estático (html, estrutura dos diretórios, enfim...) usando uma [imagem](https://github.com/jojomi/docker-hugo) [Docker](http://www.docker.com) do Hugo e fiz upload do conteúdo da pasta `public/` para o meu host... Mas daí eu pensei "tem de ter um jeito automatizado de fazer isso..."
Como eu estava pensando em [versionar](http://www.scriptcase.com.br/blog/o-que-e-versionamento/) os arquivos do conteúdo (os *markdown* originais e tal, não o conteúdo html gerado) e queria brincar com os recursos do [gitlab](http://gitlab.com), aproveitei a chance e montei uma *pipeline* no [repositório](https://gitlab.com/somatorio/somatorio.org) usando o [CI/CD *built-in*](https://about.gitlab.com/gitlab-ci/) do gitlab (não, não foi um *insight* que virou algo pronto do nada, nunca tinha montado uma *pipeline*, e dei uma apanhada pra montar algo simples... Dá pra ver no histórico de commits :p)
Como eu estava pensando em [versionar](http://www.scriptcase.com.br/blog/o-que-e-versionamento/) os arquivos do conteúdo (os *markdown* originais e tal, não o conteúdo html gerado) e queria brincar com os recursos do [gitlab](http://gitlab.com), aproveitei a chance e montei uma *pipeline* no [repositório](https://gitlab.com/somatorio/somatorio.org) usando o [CI/CD *built-in*](https://about.gitlab.com/gitlab-ci/) do gitlab (não, não foi um *insight* que virou algo pronto do nada, nunca tinha montado uma *pipeline*, e dei uma apanhada pra montar algo simples... Dá pra ver no histórico de commits :p)
A *pipeline* atual é bem simples, dividida em 2 estágios: *build* e *deploy*...
A *pipeline* atual é bem simples, dividida em 2 estágios: *build* e *deploy*...
1. No *build* é gerado o conteúdo (usando a mesma imagem em Docker que eu usei no meu note a primeira vez)
1. No *build* é gerado o conteúdo (usando a mesma imagem em Docker que eu usei no meu note a primeira vez)
2. No *deploy* é enviado o artefato gerado no *build* (o `public/`) via `rsync` para o host
Como é enviado por `rsync` eu precisei colocar o *host* no `known_hosts` (assim não rolava aquela questão sobre conectar em um host desconhecido) e a minha chave privada (assim não solicitaria senha) no `~/.ssh/` do *runner*, mas como fazer isso se o *runner* é montado e destruído toda vez que a *pipeline* roda? E a questão de segurança, afinal não dá pra colocar os dados do meu host e a minha chave privada em um repositório público, né?
Como é enviado por `rsync` eu precisei colocar o *host* no `known_hosts` (assim não rolava aquela questão sobre conectar em um host desconhecido) e a minha chave privada (assim não solicitaria senha) no `~/.ssh/` do *runner*, mas como fazer isso se o *runner* é montado e destruído toda vez que a *pipeline* roda? E a questão de segurança, afinal não dá pra colocar os dados do meu host e a minha chave privada em um repositório público, né?
A resposta para o primeiro dilema foi o `before_script`, assim antes de rodar qualquer script da pipeline ele define as configurações necessárias... E para o segundo, a resposta foram as *secret variables* do gitlab
Tem muita coisa que pode ser melhorada é claro (inclusive se alguém quiser enviar PR ;)), como por exemplo um teste antes de fazer o deploy... Mas essa é a beleza do [CD](https://continuousdelivery.com) (porque CD? Uma hora falo sobre uma teoria minha :p), sempre tem algo para ser melhorado :)
Tem muita coisa que pode ser melhorada é claro (inclusive se alguém quiser enviar PR ;)), como por exemplo um teste antes de fazer o deploy... Mas essa é a beleza do [CD](https://continuousdelivery.com) (porque CD? Uma hora falo sobre uma teoria minha :p), sempre tem algo para ser melhorado :)
## Tá, mas porque "= win"? Que vantagens tu tens com esse *setup*?
## Tá, mas porque "= win"? Que vantagens tu tens com esse *setup*?
As que eu consigo pensar agora são:
......@@ -37,4 +38,4 @@ As que eu consigo pensar agora são:
- Eu posso fazer todo o novo conteúdo offline (inclusive gerando previews) e "upar" quando estiver online... (de fato boa parte desse post foi feita offline)
- Como o conteúdo é versionado posso fazer rollback, comparar alterações, enfim... (sim, o WordPress tem isso, mas eu não perdi o recurso pois o git me proporciona ele)
Na verdade provavelmente o limite do que pode ser feito é a minha imaginação (e isso não é o caso ~~quase~~ sempre? Provavelmente, mas enfim :p)
Na verdade provavelmente o limite do que pode ser feito é a minha imaginação (e isso não é o caso ~~quase~~ sempre? Provavelmente, mas enfim :p)
+++
title = "Instalando e configurando a impressora Bematech MP-4200 TH no linux"
date = "2015-08-11T19:51:44"
aliases = [ "/2015/08/11/instalando-e-configurando-a-impressora-bematech-mp-4200-th-no-linux/" ]
aliases = [ "/2015/08/11/instalando-e-configurando-a-impressora-bematech-mp-4200-th-no-linux/", "/post/instalando-e-configurando-a-impressora-bematech-mp-4200-th-no-linux/" ]
categories = [ "cups" ]
tags = [ "ArchLinux", "Bematech", "cups", "Linux", "MP-4200 TH" ]
author = "somatorio"
......@@ -31,9 +31,9 @@ Colocando o cups em modo debug e verificando o log (`grep -i 'bema' /var/log/cup
E [11/Aug/2015:10:23:40 -0300] [cups-deviced] PID 800 (usbbema) stopped with status 127!
```
Ou seja, o driver depende do libusb-0.1.so.4, instalar o libusb-compat, lembrando que como o driver é 32bits o libusb deve ser 32 bits também
No caso do archlinux 64bits usar a versão do AUR (https://aur.archlinux.org/packages/lib32-libusb-compat/)
Após instalar libusb-compat a mensagem do log muda
```
D [11/Aug/2015:10:44:00 -0300] [cups-deviced] Started backend /usr/lib/cups/backend/usbbema (PID 3150)
......@@ -49,7 +49,7 @@ Seguindo a dica do Rafael Sierra (http://blog.rafaelsdm.com/2013/08/configurando
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0b1b", ATTR{idProduct}=="0003", MODE="0777"
```
Na dica do Rafael fala p/ colocar o `cdc_adm` na blacklist do modprobe, nos testes que eu fiz reconheceu a impressora mesmo sem fazer isso (caso continue sem reconhecer, teste colocar o `cdc_adm` na blacklist)
Agora o `lpinfo -v` reconhece a impressora
`direct usbbema:/mp4200th/1`
......@@ -69,5 +69,5 @@ Seguindo a dica do William Merlotto (http://blog.rafaelsdm.com/2013/08/configura
/lib/ld-linux.so.2 (0xf76f6000)
```
Ambas as dependencias são sanadas com o lib32-libcups no caso do archlinux
Após a instalação do pacote testar a reimpressão, aqui funcionou normalmente desta forma
+++
title = "Links de grupos de TI no telegram"
date = "2015-11-07T10:43:38"
aliases = [ "/2015/11/07/links-de-grupos-de-ti-no-telegram/" ]
aliases = [ "/2015/11/07/links-de-grupos-de-ti-no-telegram/", "/post/links-de-grupos-de-ti-no-telegram/" ]
categories = [ "Sem categoria" ]
tags = [ "Grupos", "Telegram" ]
author = "somatorio"
......@@ -21,139 +21,139 @@ Me passaram essa lista de links de convite e eu imagino que pode ser útil pra a
Quando descobrir outros links atualizo aqui, caso tenha algum link que não está na lista deixe nos comentários ou fale comigo em privado ([@somatorio](http://www.telegram.me/somatorio))
**Networkers BR**
https://telegram.me/NetworkersBR
[https://telegram.me/NetworkersBR][1]
*O grupo surgiu no Blog CCNA, e tem pessoas de todos os níveis. Então o foco principal são as tecnologias e certificações da Cisco. Outros assuntos, desde que sejam interessantes, produtivos e que agreguem valor ao grupo são bem-vindos.
Leia as regras!*
Contribuição: Igor M. de Assis (<a href="https://telegram.me/igormassis" target="_blank">@igormassis</a>)
**Mikrotik Brasil**
https://telegram.me/mikrotikbr
[https://telegram.me/mikrotikbr][1]
Contribuição: Roberto Brito (@reustaquio](http://www.telegram.me/reustaquio))
**Sempre Update Linux**
https://telegram.me/joinchat/AbDu9jv9mMuEmOyk-wvIGw
[https://telegram.me/joinchat/AbDu9jv9mMuEmOyk-wvIGw][1]
**pfSense BR**
https://telegram.me/joinchat/A733uTwnFgxq3xG_5Dzhng
[https://telegram.me/joinchat/A733uTwnFgxq3xG_5Dzhng][1]
Contribuição: Júlio Saraiva ([@Julinux](http://www.telegram.me/Julinux))
**Infraestrutura TI**
https://telegram.me/infraestruturati
[https://telegram.me/infraestruturati][1]
Contribuição: Crystian Geovani Dorabiatto ([@Dorabiatto](http://www.telegram.me/Dorabiatto))
**OpenStack**
https://telegram.me/joinchat/A733uQEc9QeO044adfcbgQ
[https://telegram.me/joinchat/A733uQEc9QeO044adfcbgQ][1]
Contribuição: Júlio Saraiva ([@Julinux](http://www.telegram.me/Julinux))
**Samba4**
https://telegram.me/joinchat/BtO01gI_MmSflgUf3liF-g
[https://telegram.me/joinchat/BtO01gI_MmSflgUf3liF-g][1]
**Proxmox VE**
http://telegram.me/ProxmoxBrasil
[http://telegram.me/ProxmoxBrasil][1]
**Citrix XenServer**
https://telegram.me/joinchat/047dd738016341fabbdb541f55cd89a1
[https://telegram.me/joinchat/047dd738016341fabbdb541f55cd89a1][1]
**Zabbix Brasil**
https://telegram.me/joinchat/AI7jrT05Fqe8BscujO5IfQ
[https://telegram.me/joinchat/AI7jrT05Fqe8BscujO5IfQ][1]
**docker-users-br**
https://telegram.me/dockerbr
[https://telegram.me/dockerbr][1]
Colaboração: Rafael Gomes ([@gomex](http://www.telegram.me/gomex))
**Virtualização**
https://telegram.me/joinchat/AI7jrT5lBV9gFGE3w-Fy6Q
[https://telegram.me/joinchat/AI7jrT5lBV9gFGE3w-Fy6Q][1]
Contribuição: Jozafá Soares ([@Jozafa](http://www.telegram.me/Jozafa))
**Bacula-BR**
https://telegram.me/baculabr
[https://telegram.me/baculabr][1]
Contribuição: Anderson Vieira ([@andersonmv](http://telegram.me/andersonmv))
**C'users (programação em C)**
https://telegram.me/joinchat/B9C6HQLFGOwlCUTSJdaE7A
[https://telegram.me/joinchat/B9C6HQLFGOwlCUTSJdaE7A][1]
**Arduino, Raspberry Eletrônica e Afins...**
https://telegram.me/joinchat/BQwnFTxx069EQRiYyIiLJw
[https://telegram.me/joinchat/BQwnFTxx069EQRiYyIiLJw][1]
Contribuição: André Luiz Alves ([@andrentfs](http://www.telegram.me/andrentfs))
**Asterisk Elastix Freepbx Piaf**
https://telegram.me/joinchat/CMF1cQNxp6Xx0pj-RteImA
[https://telegram.me/joinchat/CMF1cQNxp6Xx0pj-RteImA][1]
**Glpi**
https://telegram.me/joinchat/BH3XOAC4F68mzj-tKc6xoQ
[https://telegram.me/joinchat/BH3XOAC4F68mzj-tKc6xoQ][1]
Contribuição: Kleber Ribeiro ([@nk3info](http://www.telegram.me/nk3info))
**Cloudstack**
https://telegram.me/joinchat/AxrvtASPySwVlMekVc1u9g
[https://telegram.me/joinchat/AxrvtASPySwVlMekVc1u9g][1]
Contribuição: Tales Santos ([@Talesteixeira](http://www.telegram.me/Talesteixeira))
**DevOps BR**
https://telegram.me/joinchat/AxrvtAOCKuIHCih17PT7Qg
[https://telegram.me/joinchat/AxrvtAOCKuIHCih17PT7Qg][1]
Contribuição: Tales Santos ([@Talesteixeira](http://www.telegram.me/Talesteixeira))
**Linux + LPI**
https://telegram.me/joinchat/CYyDAT0Jg_EVAEedD9qgsw
Bot para estudos do grupo "Linux + LPI": https://telegram.me/GrupoLinuxbot
[https://telegram.me/joinchat/CYyDAT0Jg_EVAEedD9qgsw][1]
Bot para estudos do grupo "Linux + LPI": [https://telegram.me/GrupoLinuxbot][1]
Contribuição: Reginaldo ([@Saitam10](http://www.telegram.me/Saitam10))
**PHP para Asterisk**
https://telegram.me/joinchat/A2dO3gR-WUwZv89DFzJTEw
[https://telegram.me/joinchat/A2dO3gR-WUwZv89DFzJTEw][1]
Contribuição: Angelo Delphini ([@AngeloDelphini](http://www.telegram.me/AngeloDelphini))
**CCNA Brasil**
https://telegram.me/ccnabrasil
*Grupo OFICIAL no Telegram da Comunidade CCNA BRASIL no FB (https://www.facebook.com/groups/CCNA.Brasil/).
[https://telegram.me/ccnabrasil][1]
*Grupo OFICIAL no Telegram da Comunidade CCNA BRASIL no FB (<https://www.facebook.com/groups/CCNA.Brasil/>).
Somente assuntos relacionados à certificações CISCO, como CCNA, CCNP e CCIE.*
Contribuição: Tiago Lima ([@tilima](http://www.telegram.me/tilima))
**Empreendedorismo TI**
https://telegram.me/joinchat/AI7jrT4ZFk94UZco3ymVsQ
[https://telegram.me/joinchat/AI7jrT4ZFk94UZco3ymVsQ][1]
Contribuição: Jozafá Soares ([@Jozafa](http://www.telegram.me/Jozafa))
**Zimbrasil (zimbra)**
https://telegram.me/zimBrasil
[https://telegram.me/zimBrasil][1]
Contribuição: Werneck Costa ([@WerneckCosta](http://www.telegram.me/WerneckCosta))
**PHP Maranhão UG**
https://telegram.me/joinchat/AOBqkQB3Pt6YVANKgdh7IA
[https://telegram.me/joinchat/AOBqkQB3Pt6YVANKgdh7IA][1]
Contribuição: Bruno Emanuel Silva ([@jwalker_pe](http://www.telegram.me/jwalker_pe))
**LinuxBRAZUCA**
https://telegram.me/joinchat/Aguf-Duk8yp2vI7hNywbHQ
[https://telegram.me/joinchat/Aguf-Duk8yp2vI7hNywbHQ][1]
**Planeta Linux (canal)**
https://telegram.me/planetalinux
[https://telegram.me/planetalinux][1]
**NxFilter - DNS WebFilter**
https://telegram.me/NxfilterBR
[https://telegram.me/NxfilterBR][1]
Contribuição: Sergio Lopes ([@sergiolps](http://www.telegram.me/sergiolps))
**Arch Linux Brasil**
https://telegram.me/joinchat/Ca-T5j01ENns1TC7Dpaimw
[https://telegram.me/joinchat/Ca-T5j01ENns1TC7Dpaimw][1]
Contribuição: Alan Cads ([@alancads](http://www.telegram.me/alancads))
**DBA Brasil**
https://telegram.me/joinchat/BSo6ET1rO4Ba2eSOHyMhGg
[https://telegram.me/joinchat/BSo6ET1rO4Ba2eSOHyMhGg][1]
Contribuição: Fábio Telles Rodriguez ([@fabio_telles](http://telegram.me/fabio_telles))
**Shell Script**
https://telegram.me/joinchat/A733uQf7AAw5DTo1kFWCFA
[https://telegram.me/joinchat/A733uQf7AAw5DTo1kFWCFA][1]
Contribuição: Júlio Saraiva ([@Julinux](http://www.telegram.me/Julinux))
**Expressões Regulares**
https://telegram.me/joinchat/BtO01j1rBi16tGTsHJ2CuQ
[https://telegram.me/joinchat/BtO01j1rBi16tGTsHJ2CuQ][1]
Contribuição: Igor Motta ([@Igmotta](http://www.telegram.me/Igmotta))
**Sharing Delphi Brasil**
https://telegram.me/joinchat/CBODLDxOQ58JOdNfHIRzBA
[https://telegram.me/joinchat/CBODLDxOQ58JOdNfHIRzBA][1]
Contribuição: Felipe Sartori ([@feehzor](http://www.telegram.me/feehzor))
**Parceiros de Codigos**
https://telegram.me/joinchat/CEMxwATo7yv6NW2y7CCGtw
[https://telegram.me/joinchat/CEMxwATo7yv6NW2y7CCGtw][1]
Contribuição: Felipe Sartori ([@feehzor](http://www.telegram.me/feehzor))
**FAL - Fundação Asterisk Libre**
https://telegram.me/falbr
[https://telegram.me/falbr][1]
*Ao entrar aqui se apresente, lembre-se que é um canal restrito para profissionais em Asterisk e Desenvolvedores de Telefonia que faz uso do Framework Asterisk. Voce pode expor produtos e serviços. Pedimos por favor que não APOIE, não INCENTIVE o uso de forks como trixbox, elastix e tal.*
Contribuição: Fagner Silva ([@fagnersilvas](https://telegram.me/fagnersilvas))
......
This diff is collapsed.
+++
title = "Rodando aplicações GUI em Docker"
date = "2016-11-12T10:24:00Z"
aliases = [ "/post/rodando-aplicacoes-gui-em-docker/" ]
categories = [ "Docker" ]
tags = [ "Docker", "X11" ]
author = "somatorio"
......@@ -38,12 +39,13 @@ O próprio Docker não é exatamente velho (na verdade é bem novo até... 3 ani
### Sério?
Sim! Aqui vai a *timeline* que eu consegui levantar:
* Março 2013: [Docker 0.1 liberado para o público](https://www.infoq.com/news/2013/03/Docker)
* Abril 2013: [Primeira implementação conhecida de X11 em Docker (utilizando vnc)](http://stackoverflow.com/questions/16296753/can-you-run-gui-apps-in-a-docker-container)
* Julho 2013: [Implementação de X11 em Docker utilizando ssh com X11-forward](https://blog.docker.com/2013/07/docker-desktop-your-desktop-over-ssh-running-inside-of-a-docker-container/)
* Setembro 2014: [Implementação utilizando o socket X11 do host](http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/)
* Fevereiro 2015: [Jessica Frazelle faz um post em seu blog sobre container em desktop](https://blog.jessfraz.com/post/docker-containers-on-the-desktop/)
* Abril 2015: [Jessica Frazelle faz uma palestra durante a Container Camp 2015 mostrando que roda tudo no seu computador em containers](https://www.youtube.com/watch?v=GsLZz8cZCzc)
* Março 2013: [Docker 0.1 liberado para o público](https://www.infoq.com/news/2013/03/Docker)
* Abril 2013: [Primeira implementação conhecida de X11 em Docker (utilizando vnc)](http://stackoverflow.com/questions/16296753/can-you-run-gui-apps-in-a-docker-container)
* Julho 2013: [Implementação de X11 em Docker utilizando ssh com X11-forward](https://blog.docker.com/2013/07/docker-desktop-your-desktop-over-ssh-running-inside-of-a-docker-container/)
* Setembro 2014: [Implementação utilizando o socket X11 do host](http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/)
* Fevereiro 2015: [Jessica Frazelle faz um post em seu blog sobre container em desktop](https://blog.jessfraz.com/post/docker-containers-on-the-desktop/)
* Abril 2015: [Jessica Frazelle faz uma palestra durante a Container Camp 2015 mostrando que roda tudo no seu computador em containers](https://www.youtube.com/watch?v=GsLZz8cZCzc)
Porque os últimos itens foram incluidos? Bem, basicamente porque sempre que se fala sobre GUI em Docker, ou a pessoa fala sobre a Jess ou lembra dela (há outros vídeos dela falando sobre isso, mas achei melhor incluir só o primeiro)
Como pode ver, apenas 1 mês depois do lançamento público do Docker já haviam pessoas querendo rodar aplicações GUI no Docker :)
......@@ -64,7 +66,7 @@ docker run [--rm [-it]|-d] \
imagem [comando]
```
Em alguns casos a variável `DISPLAY` tem de ser `DISPLAY=unix$DISPLAY` (mas pra ser sincero até agora eu não sei bem o motivo, somente que era o indicado pela pessoa que fez a imagem)
*Obs: "[--rm [-it]|-d]" quer dizer "Opcionalmente pode usar o `--rm` que pode ou não estar em conjunto com `-it` OU pode (ou não :p) usar o `-d`"*
*Obs: "`[--rm [-it]|-d]`" quer dizer "Opcionalmente pode usar o `--rm` que pode ou não estar em conjunto com `-it` OU pode (ou não :p) usar o `-d`"*
Com suporte a aceleração 3D por hardware:
......@@ -139,25 +141,25 @@ imagem [comando]
```
## Certo, acho que consigo começar por aí... Alguma dica pra me dar?
* Organize as flags em ordem alfabética (facilita bastante em *troubleshootings*) - *sim, eu sei que nos exemplos eu não fiz isso, mas foi mais para facilitar o reconhecimento da flag adicionada*
* Crie um script com os comandos que rodam os containers separados em funções, assim se pode incluir o script ao perfil do bash e rodar como se fosse um comando (além de facilitar o uso de launchers) - *mais abaixo vou colocar um link para o script que eu uso*
* Utilize o detach (--detach ou -d) e uma função para apagar o container que esteja parado ao executar a função do aplicativo desejado novamente - *isso também estará no meu script ;)*
* Organize as flags em ordem alfabética (facilita bastante em *troubleshootings*) - *sim, eu sei que nos exemplos eu não fiz isso, mas foi mais para facilitar o reconhecimento da flag adicionada*
* Crie um script com os comandos que rodam os containers separados em funções, assim se pode incluir o script ao perfil do bash e rodar como se fosse um comando (além de facilitar o uso de launchers) - *mais abaixo vou colocar um link para o script que eu uso*
* Utilize o detach (--detach ou -d) e uma função para apagar o container que esteja parado ao executar a função do aplicativo desejado novamente - *isso também estará no meu script ;)*
## Beleza! Mais alguma coisa? Algum outro lugar que eu possa ler sobre o assunto?
Bem, claro que tem outros lugares pra ler :)
MAS antes aqui vai um "bônus": https://github.com/somatorio/dockercompose-sample-workbench
MAS antes aqui vai um "bônus": <https://github.com/somatorio/dockercompose-sample-workbench>
Se podemos rodar as aplicações em container, que tal rodá-las através do [Docker Compose](https://docs.docker.com/compose/)? Assim se pode definir todas as ferramentas a serem utilizadas e elas estarão disponíveis após um único comando :)
Essa idéia é do [@gomex](http://techfree.com.br), não minha... Ele falou disso durante uma conversa em um [meetup](https://www.meetup.com/pt-BR/Docker-Porto-Alegre/events/232916179/) sobre GUI em Docker (se olharem o link verão que tem um belo tempo entre a conversa e este post... foi mal =p) e eu apenas "executei" ela.
Buenas, quanto a recomendações de leitura:
* [Livro do Gomex (sobre Docker em geral)](https://leanpub.com/dockerparadesenvolvedores)
* [Post da Jess sobre GUI em Docker](https://blog.jessfraz.com/post/docker-containers-on-the-desktop/)
* [Meu singelo script - altamente baseado no da Jess (não, definitivamente não é coincidencia)](https://github.com/somatorio/docker-desktop/blob/master/comandosdocker)
* [Livro do Gomex (sobre Docker em geral)](https://leanpub.com/dockerparadesenvolvedores)
* [Post da Jess sobre GUI em Docker](https://blog.jessfraz.com/post/docker-containers-on-the-desktop/)
* [Meu singelo script - altamente baseado no da Jess (não, definitivamente não é coincidencia)](https://github.com/somatorio/docker-desktop/blob/master/comandosdocker)
## AH, alguns amigos meus usam Mac e Windows, eles podem aproveitar isso?
Claro, só precisa de umas gambiarras (não que isso que fizemos até agora não tenha sido, hehe)
* [Mac OS X](https://github.com/docker/docker/issues/8710#issuecomment-71113263)
* [Mac OS X](https://github.com/docker/docker/issues/8710#issuecomment-71113263)
Instalar o Docker for Mac
```
......@@ -166,15 +168,20 @@ brew cask install xquartz
open -a XQuartz
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
DISPLAY=hostip:0 docker-compose up [-d]
docker run -e DISPLAY=hostip:0 [...] image OU DISPLAY=hostip:0 docker-compose up [-d]
```
* [Windows](https://github.com/docker/docker/issues/8710#issuecomment-135109677)
* [Windows](https://github.com/docker/docker/issues/8710#issuecomment-135109677)
Instalar o xming
Instalar o Docker for Windows
```
xming :0 -ac -clipboard -multiwindow
DISPLAY=hostip:0 docker-compose up [-d]
docker run -e DISPLAY=hostip:0 [...] image OU DISPLAY=hostip:0 docker-compose up [-d]
```
### E funciona tudo direitinho?
Infelizmente nem tudo (ao menos até agora...), o som por exemplo não funciona e como o Docker for windows/Mac roda o Docker em uma vm, espere uma perda de desempenho... Dentro do que eu testei afetou mais jogos e programas que exigem muito do hardware.
Infelizmente nem tudo (ao menos até agora...), o som por exemplo não funciona e como o Docker for windows/Mac roda o Docker em uma VM, espere uma perda de desempenho...
#### Então é melhor não falar pra eles sobre isso?
Ei, eu só estava falando o que eles podem esperar, não para evitar isso :)
Dentro do que eu testei afetou mais jogos e programas que exigem muito do hardware.
Eles podem inclusive encontrar uma solução para o que eu comentei... maneiro, hein?
......@@ -3,7 +3,7 @@
{{ if .RSSlink }}
<li class="pure-menu-item">
<a class="pure-menu-link" href="{{ .RSSlink }}"><i class="fa fa-rss fa-fw"></i>RSS</a>
<a class="pure-menu-link" href="/{{ .Site.Language.Lang }}/index.xml"><i class="fa fa-rss fa-fw"></i>RSS</a>
</li>
{{ end }}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment