A arte de levantar e definir requisitos de software

Sou analista funcional, analista de requisitos ou product owner já há um bom tempo. Apesar de todos esses nomes, mesmo quando eu era analista de produto há ainda mais anos atrás, grande parte do meu papel já era esse: levantar e analisar requisitos e principalmente, propor soluções.

Apesar do enorme crescimento da profissão, em grande parte devido a ser um cargo considerado menos técnico (visão que particularmente abomino), vejo ela cada vez mais desvalorizada, até pela confusão em torno do papel e maior atenção de stakeholders e sponsors (os verdadeiros donos e investidores do projeto) à detalhes antes exclusivos do analista. É comum ver gerentes e diretores, altos cargos de organizações, discutindo requisitos e usabilidade e tirando autonomia do analista.

Apesar de, como eu disse, não concordar com a visão de que o papel é menos técnico (programar não é a única atividade técnica em um projeto) concordo que há um certo ar quase artístico e de percepção nas funções do analista funcional.

Só essa frase já arrepiaria os cabelos de puristas envolvidos no mercado de T.I. e amantes da sua completa lógica e até previsibilidade, mas a verdade é que há grandes fatores humanos e espaço para “feelings“.

Lógico que todo feeling também acaba por se originar de experiência, dados estatísticos e tudo o mais que envolve as diversas questões que se colocam, mas defino dessa maneira pois são fatores as vezes difíceis de se corroborar com dados ou mesmo propor testes e análises específicas, ainda mais na velocidade em que são exigidos.

Pois bem, talvez com alguns exemplos, ou mesmo com apenas uma situação hipotética, eu consiga demonstrar o que estou querendo dizer, assim como muitas vezes fazemos ao transmitir qualquer informação…

Devido a todo esse cenário, é comum hoje em dia, você receber informações do tipo: “o requisito é este, fazer esta tela dessa exata maneira”. Isto ocorre justamente pois o diretor possivelmente desenhou uma tela, e ele é muito reticente a quaisquer mudanças e a deturpação do requisitos começa…

A “arte” da definição de requisitos consiste em identificar os reais requisitos por trás de uma informação como essa, por mais difícil que ela seja, até mesmo politicamente. Nesse caso, os requisitos podem ser os mais diversos: fazer toda a operação numa tela só, usar um recurso visual específico, usar uma regra de negócio de bloqueio e validação, entre outros.

A falha em identificar o requisito real, leva a retrabalhos ou mesmo a situações onde toda a equipe se encontra presa à definições que não fazem mais sentido e onde a tão procurada criatividade murcha, quando não some por completo.

A cartilha diz que devemos fazer as decomposições e sínteses necessárias a fim de buscar essas informações, mas na prática, com prazos surreais e stakeholders que praticam uma ditadura (não que ela não tenha sua parcela de importância), cada vez mais a análise vai passando de um processo para uma simples “tomada de pedidos” e é um dos aspectos mais desmotivantes da rotina de um analista.

Quantas vezes vimos casos onde todo o processo foi completamente seguido à risca e o resultado final é um desastre? Onde o prazo era completamente irreal, quiça desnecessariamente e deixou a qualidade em segundo plano?

Sempre que me pego pensando nisso, me lembro do filme A Origem. Ele possui algumas citações muito interessantes e que cabem bem nessa questão da “ideia original”.

What is the most resilient parasite? Bacteria? A virus? An intestinal worm? An idea. Resilient… highly contagious. Once an idea has taken hold of the brain it’s almost impossible to eradicate. An idea that is fully formed – fully understood – that sticks; right in there somewhere.

Uma ideia, completamente formada e entendida “gruda” e é assim que as informações devem procurar ser moldadas, devemos procurar os detalhes que importam, o que realmente a define.

 The subject’s mind can always trace the genesis of the idea. True inspiration is impossible to fake.

Igualmente a inspiração é original e impossível de ser fingida, sempre enxergo que se o real requisito não for repassado, ele nunca terá a força necessária para espalhar para toda a equipe e para que ela possa dar tudo que tenha de melhor para fazer aquela ideia se tornar real da forma que ela merecia.

Para mim, o grande prazer do papel do analista é a investigação e o uso da criatividade em encontrar soluções para problemas reais. Quaisquer atitudes e procedimentos que fomentem isso irão agregar muita qualidade a todo processo de engenharia de software e aos produtos e à equipe como um todo.

Fonte das citações: GoodReads

2 Roteadores x Repetidor: resolvendo problemas de WiFi

No meu apartamento, apesar de pequeno, o WiFi sempre foi um problema. O sinal do roteador da NET não chega até o quarto.

Eu sei que existem diversas opções para solucionar esse problema mas, enquanto algumas são caras, outras podem dar dor de cabeças maiores e te fazer perder dinheiro.

Comprar um roteador parrudo e passar a usar o da NET como ‘bridge’ (com o WiFi desligado) nunca me apeteceu, não só pelo preço do roteador, que pode variar, mas porque, além de eu temer continuar com o problema de alguma forma, passar a depender de 2 roteadores em vez de um, nos aparelhos que mais preciso, não me parecia uma boa ideia.

Exemplo: meu PC é conectado via cabo diretamente ao roteador da NET, mas passaria a estar no segundo.

Sendo assim parti pros famigerados repetidores. Cheguei a comprar 2 e com a grana que perdi, poderia ter partido direto pra minha solução atual e que me motivou a escrever esse post. Em minha defesa, essa solução dependia de eu passar um cabo de rede da sala, onde está o roteador da NET, até o meu quarto, e isso é chato.

Já os repetidores, não funcionaram pois eles dependem justamente do WiFi, sendo assim, as chances de sucesso eram realmente baixas.

Pois então eu passei cabo até o quarto e comprei um roteador novo para colocar lá. Eu tinha receio que algo não funcionasse, é difícil pesquisar exatamente isso na internet pois os termos se repetem demais e nunca encontrei alguém com a exata mesma solução.

Pois bem, eis que para minha surpresa, funcionou absolutamente tudo bem, em 3 minutos de instalação.

Ao espetar o cabo, ele já reconheceu e configurou tudo. Não houve qualquer problema também nos meus outros aparelhos conectados ao roteador principal, e o WiFi desse novo (que é excelente), só será usado no raio de cobertura do quarto mesmo, então, tudo certo.

Não dá pra acessar no navegador do meu PC, o segundo roteador, porque obviamente, ele não está conectado àquela rede (vou pesquisar se há alguma forma), mas mesmo assim não foi um problema e sequer precisei conectar meu note direto nele para configurar.

Se você também tem problemas de conexão e tem a possibilidade de passar um cabo até o segundo ponto, sem dúvidas essa é a minha recomendação.

Abraços

Chrome 69 – Utilizando PIP (vídeo flutuante)

08

Essa dica é para o pessoal que gosta de assistir vídeos do Youtube e outros serviços semelhantes no Windows (infelizmente não funciona com o Netflix).

Já há extensões do Chrome que possibilitam este recurso, mas em sua última versão, o navegador implementa a funcionalidade de forma nativa.

Para ativar é muito fácil, basta abrir uma nova aba e colar os links abaixo, que o levará as configurações do seu browser e ativar ambas (um link de cada vez e eles não funcionam de forma automática).

chrome://flags/#enable-picture-in-picture

chrome://flags/#enable-surfaces-for-videos

Depois, basta clicar com o botão direito do mouse (pode ser necessário um duplo clique se o site exibir opções personalizadas no menu de contexto, como é o caso do Youtube) e acionar a opção Picture-in-picture, conforme a imagem abaixo:

E é só. Você irá perceber que não poderá deixar a página, seja fechando a aba ou navegando para outro endereço e também não conseguirá fazer o mesmo com 2 vídeos ao mesmo tempo. Mesmo assim é um recurso muito útil para poder assistir conteúdos enquanto faz outras atividades no PC. E você pode redimensionar a janela com o mouse.

Eu com certeza usarei muito e prefiro ao uso de uma extensão.

Até a próxima.

KODI – Assistindo vídeos da rede local

KODI é um software de reprodução de vídeos, entre outras funções, muito famoso atualmente. Com versões para Windows, Android TVs, Xbox, etc.

Ele usa add-ons para conexão a servidores e tem uma comunidade ativa e muita informação disponível e se você quiser saber mais sobre ele, não terá problemas em encontrar diversos sites internet afora.

O meu uso particular é para assistir os vídeos que tenho no meu PC, à partir do meu Xbox One (o Kodi está disponível na loja oficial). E eu decidi desenvolver um pequeno projeto, para ajudar quem deseja compartilhar seus vídeos de sua rede local (seu PC com Windows), direto para o seu Kodi (esteja ele em qual aparelho estiver), de forma muito simples.

Basta navegar até o repositório do projeto, fazer o download, colocar na pasta que deseja compartilhar e executar o script.

No próprio projeto eu dei um pouquinho mais de detalhes de como proceder. Há também um vídeo do funcionamento do compartilhamento sendo realizado de forma manual, caso você tenha algum problema.

Após o compartilhamento, você poderá conectar o Kodi usando o protocolo NFS que estará mapeado sob o nome “videos” (se você não conhece o Kodi, recomendo o vídeo citado no projeto, que você pode ver clicando aqui).

Abraços

Automatização de instalações

Com o Windows migrando para um formato loja para seus apps, talvez não seja interessante mais para todo tipo de usuário e softwares, a dica que darei hoje. Contudo, muitos aplicativos ainda não são distribuídos por ela, ou talvez jamais cheguem a ser.

E um software que ajuda muito nessa tarefa é o Chocolatey. Trata-se de uma aplicação, conectada a um repositório, onde os usuários criam scripts relacionados aos diretórios de download de diversas ferramentas. Os próprios usuários mantém esses scripts, mas eles passam por uma moderação para tentar evitar arquivos e códigos maliciosos, sendo assim, é possível dizer que instalar aplicações por ele é tão seguro quanto pelo download comum.

Isto posto, desenvolvi um script Powershell, que baixa o próprio Chocolatey e o utiliza para instalar silenciosamente, todas as aplicações que uso regularmente:

O script acima utiliza o comando upgrade do choco, pois ele instala quando não encontra, ou faz a atualização caso o mesmo já se encontre instalado, ou seja, você pode usar o mesmo script para atualizações futuras.

Se você desejar, pode verificar os softwares disponíveis como pacotes choco, em seu diretório, clicando aqui e customizar meu script como lhe convenha. Neste link você pode também, verificar os detalhes de cada script de instalação, caso queira saber exatamente de onde são baixados os arquivos e todos os comandos.

Basta fazer o download do arquivo (clicando no nome do arquivo na parte de baixo da janela dele no post), ou copiar o seu conteúdo e salvar com a extensão ps1, usada pelo Powershell (você pode clicar no botão “view raw” para ver somente seu conteúdo na tela).

Outra dica relacionada à essa, é o uso de um arquivo para modificação do registro. Com ele, fica disponível no menu de contexto do Windows (botão direito do mouse), a opção para executar um script Powershell diretamente como administrador.

Basta executar o arquivo (da mesma forma que sugerido para o primeiro arquivo do post) e aceitar a modificação do registro.

Abs.

WhatsApp: usando 2 contas no mesmo aparelho

Todo mundo que possui aparelhos com dois chips, caso um deles seja profissional, já se deparou com esse problema. Como usar o app do WhatsApp nos dois?

No início do ano, a empresa lançou uma versão “Business” do app, voltada para o uso empresarial. Ela contém inclusive alguns recursos específicos, como TAGs que o usuário pode usar para marcar grupos e mensagens (exemplo: “Pedido concluído”), facilitando a usabilidade também como um controle de demandas.

Contudo, um outro uso muito interessante foi proporcionado por esse lançamento: o fato de finalmente podermos acessar duas contas diferentes (uma para cada chip), no mesmo aparelho e de forma oficial.

Já existiam outra maneiras mais nebulosas de se atingir isso, usando apps de terceiros, usando o mecanismo de usuários do Android (que nem todos os fabricantes implementam e ainda por cima, não permite o login em dois usuários simultâneos), entre outras.

Contudo nenhuma delas é tão prática quanto essa e sem a segurança que um método oficial oferece. Embora eu ainda queira pesquisar um pouco mais, pois o modo que a empresa valida as contas é um pouco obscuro (recebi ligações com códigos de confirmações assim como SMS), até agora não tive problemas e mesmo com um certo receio de algum bloqueio na conta, venho usando com sucesso e feliz por aposentar meu segundo aparelho.

Abs.

Contribuindo em projetos no GitHub

Contribuir em projetos opensource no GitHub já é um assunto bem comentado. É um prazer, é útil e está cada vez mais facilitado.

Se engana quem pensa que é necessário um grande conhecimento para poder contribuir, como é o caso no Stack Overflow, onde você precisa ser muito bom e estar extremamente atento para conseguir responder uma pergunta.

Mas o Stack é assunto pra outro post, meu intuito aqui é demonstrar como começar e claro, contar como foi minha primeira contribuição.

Há alguns repositórios prontos para lhe ajudar a entender como o processo funciona e no meu caso eu usei este: first-contributions.

Nele você encontrará um passo-a-passo de como proceder com o fork (que é o primeiro passo, onde você copia o repositório), a alteração, commit, pull request, enfim…

O arquivo README  possui traduções para outras línguas e você não encontrará nenhuma maior dificuldade para começar.

Pois bem, dado este primeiro passo, você está pronto a procurar projetos do seu interesse ou que você possa contribuir de verdade ou de forma mais significativa.

O importante é lembrar que nem toda contribuição decorre de grandes e inteligentes códigos, podendo ser simplesmente uma pequena correção, até mesmo gramatical ou uma tradução.

E aproveito essa deixa pra comentar sobre minha primeira real contribuição!

Veja que o seu nome fica gravado como um contribuidor do projeto, o que é bem gratificante, podendo até mesmo servir como algo interessante no seu currículo virtual.

Você pode acessar esse projeto aqui e saber mais sobre ele nesse meu outro post.

O projeto em questão era muito interessante e apresentava o README apenas em inglês e eu fiz a tradução para o Português. Embora não seja um projeto muito famoso, isso não importa, é grande a satisfação de ajudar e agora ele pode ser acessível a mais pessoas, quem sabe?

Sendo assim, realizei o processo, fiz o fork, submeti a pull request e o mantenedor do repositório aceitou minha contribuição. Excitante!

E é isso.

Porém, contribuir é viciante e logo já comecei ter ideias e escrever novas funcionalidades para o projeto.

Recomendo fortemente que você invista nesse tipo de contribuição (inclusive são bem vindas nos meus repositórios, ok?) e quem sabe você não possa realizar ainda melhores feitos e ajudar toda uma comunidade que utilize o projeto e de quebra aprender muito na jornada.

Um abraço.

Emulationstation: configuração simples para Windows

O cenário da emulação mudou bastante nos últimos anos, com o surgimento das versões para os mini computadores Raspberry Pi, que viraram simplesmente uma febre.

Eu já brinco com emuladores há muitos anos. Era tão apaixonado que já tentava iniciativas que promovessem eles desde jovem. Cheguei certa vez a compilar um DVD, usando um software que montava uma espécie de instalador, copiando os arquivos e criando atalhos no menu Iniciar do Windows e na área de trabalho. Cheguei a fazer até uma capa.

Pela data dos arquivos que estão no disco, isso foi em abril de 2006. Que saudades…

Caso você queira pular toda essa minha história e explicação sobre os emuladores, pode ir direto pro repositório do projeto. Lá contém uma explicação de como proceder para instalar.

Voltando a falar do cenário atual e do Raspberry (eu mesmo tenho o meu, lógico), trata-se de um minicomputador, com poder suficiente pra emular os consoles antigos.  Para um apaixonado pela nostalgia dos games do passado, é simplesmente maravilhoso. Eles viraram uma febre, embora nem todo mundo conheça por esse nome, pois muitas pessoas comercializam um pacote já pronto contendo o computador, jogos, etiquetas e até cabines ou controles.

Porém, muita gente ainda usa o próprio PC para emulação de jogos e é possível aproveitar alguns dos desenvolvimentos que fizeram para ele, também no Windows, ficando com um sistema praticamente idêntico ao conseguido no mini PC.

Uma das principais evoluções foi o advento do Libretro e do Retroarch. Trata-se de aplicações ou projetos, que converteram os antigos emuladores em DLLs, fazendo eles trabalharem por debaixo dos panos, através de uma interface única, o que permitiu que você trocasse de console sem sequer sair do aplicativo.

Em cima desses sistemas, surgiram mais diversos projetos de customização da interface e um deles, que é muito famoso e funciona no Windows, é o Emulation Station.

O projeto

Procurando na internet, encontrei um projeto no GitHub que fazia quase exatamente o que eu esperava. Ele conecta nos endereços corretos, baixa e configura tudo automaticamente, de forma bem fácil.

Realizei um fork do repositório e inclusive inclui minhas próprias contribuições (conto um pouco mais sobre esse processo em um futuro post). Sendo assim, você pode usar os links desse post para a minha versão do projeto ou acessar o original aqui.

Eu inclui os dois links para que, caso alguma modificação minha não seja aceita pelo dono do projeto original, seja possível ter as duas opções, e também, claro, para dar o devido crédito.

O arquivo de instruções está em inglês, mas possui um link para a tradução em português que eu escrevi.

Instalando

Você pode navegar até o site e baixar o pacote do Emulation Station por si mesmo, mas algumas configurações são um pouco mais complexas de serem feitas e é aí que entra o projeto “win10_emulation_station”.  Se preferir, você pode baixá-lo nesse link: download. Mas repito, recomendo que você utilize o instalador do projeto.

O arquivo LEIAME no repositório (possui um link para a tradução em Português que, inclusive foi escrita por mim) já explica muito bem como proceder, mas ainda complementarei com mais algumas informações abaixo.

Faça o download ou clone o repositório git e siga as instruções para a instalação.

Infelizmente, mesmo o pacote do projeto, não contém todos os arquivos necessários para se divertir, já que um dos obstáculos encontrados no compartilhamento e difusão dos arquivos é que muitos deles, principalmente as ROMs (que são os jogos) não serem de domínio público, o que caracteriza pirataria. Mas os emuladores em si não e podem ser compartilhados sem problema.

Terminando as configurações

Feito o download conforme descrito no repositório com sucesso, você terá os arquivos espalhados em 3 pastas:

  • A pasta onde você baixou os arquivos do repositório: essa pode ser apagada ao final.
  • A pasta do Emulation Station em “Arquivos de Programas”: nessa pasta ficam os executáveis, em teoria, o que você não precisaria de nenhum backup. O instalador deve ter criado atalhos na área de trabalho também, mas caso não o tenha feito, pode procurar por Emulation Station na pesquisa da Cortana que ela encontrará para você.
  • A pasta de DLLs e ROMs que ficará em %UserProfile%\.emulationstation (você pode digitar esse caminho na barra de endereços do Windows Explorer, na janela executar, ou, se o atalho tiver sido criado com sucesso, usá-lo).

Nesse terceiro local é onde você deverá copiar as suas ROMs, colocando especificamente cada console em seu diretório próprio.

Para configurar os emuladores de PS1 e PS2, que não estão usando DLLs do Libretro, você terá que abrir o emulador mesmo e fazer a configuração diretamente nele ao invés de fazer pelo Emulation Station. Navegue até as pastas systems/epsxe e systems/pcsx2 e inicie os executáveis. Você não deverá ter problemas em entender como eles funcionam, mas procure pela configuração de controles e também de BIOS, para se certificar que estão apontando para os diretórios corretos.

Aliás, para esses consoles, será necessário também baixar os arquivos de BIOS e copiá-los, pois não são inclusos no pacote também por motivos de copyrigth.

Feito isto, você já deverá ter tudo funcionando. O repositório contém até mesmo algumas ROMs “homebrew”, ou seja, que foram feitas por terceiros de forma open-source, não sendo jogos oficiais e por isso são distribuídas livremente e você pode testar os emuladores com elas.

Espero que você se divirta muito com esse setup e caso tenha alguma dificuldade, pode comentar e eu tentarei te ajudar a resolver qualquer problema.

Abraço a todos

UPDATE: Novo post com novidades sobre o projeto. Clique aqui.

Controlando versões com PHP, SVN e Gulp

Com o crescente uso do Git para controle de repositórios, talvez essa dica não seja mais tão útil, contudo, como aqui na empresa que trabalho ainda usamos Tortoise SVN, pode haver outras empresas e pessoas mundo afora, interessadas no post de hoje.

Ela também funciona muito melhor em projetos .Net, devido ao fato dele ser compilado, mas as informações aqui providas podem ser facilmente adaptadas pra ele (vou fazer uma nota também demonstrando uma diferença básica) quando for o momento).

Pois bem, o foco do post está em demonstrar o uso de um executável do SVN, de nome SubWCRev.exe, que serve para ler informações do repositório, como número da última revisão ou data e realizar a troca de variáveis em um arquivo template, pelos valores retornados.

Contudo, devido ao PHP não ser uma linguagem compilada, você precisará estar utilizando gerenciadores de pacotes, no caso o Gulp, se quiser implantar esse “controle de versão” aos seus projetos. Embora também seja possível executar o comando diretamente no console do sistema operacional, porém, grande parte da automatização se perderia.

Comece pela criação de um arquivo template, onde você incluirá as variáveis que deseja trabalhar (é possível encontrar a lista completa delas na documentação do SVN). No meu exemplo, eu chamei o arquivo de version-template.php e ele possui o seguinte conteúdo:

<?php return array( 'version' => '1.0.0.$WCREV$ data: $WCDATE$'>);

Repare que ele contém um array em PHP que inclui as variáveis WCREV e WCDATE, que serão trocadas pelo executável assim que for chamado.

No nosso arquivo gulpfile precisamos incluir um require, caso já não exista. Dessa forma:

var exec = require('child_process').exec;

Feito isso, poderemos criar a nossa task que realizará a chamada do executável:

gulp.task('version-number', function (cb) {
exec('"C:/Program Files/TortoiseSVN/bin/SubWCRev.exe" "." "C:/Source/Projeto/branches/branch1/version-
template.php" "C:/Source/Projeto/branches/branch1/version.php"', function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
cb(err);
});
})

Vamos a uma breve explicação do script acima. A task recebeu o nome de version-number para ser referenciada mais abaixo no arquivo gulp (junto à sequência de build). Ela utiliza o exec para chamar o comando, que é composto da seguinte forma:

[diretório do exe][diretório da solution][arquivo template][arquivo final]

Apresenta também instruções para logar as informações na janela do console e os erros, caso ocorram.

Você precisará adaptar o comando para os seus diretórios e tomar um cuidado especial caso sua build seja remota, em um servidor Jenkins por exemplo, mas basicamente, ao incluir essa task em seu build e executá-la, você terá gerado um arquivo com o conteúdo parecido com o exemplo abaixo:

'version' => '1.0.0.93528 data: 2018/06/07 09:36:50'

Esse arquivo, que no meu exemplo levou o nome de version.php, é recomendável que esteja na lista de ignore do SVN, evitando que o mesmo seja comitado toda hora.

Caso você esteja em um projeto .Net, você poderá executar um comando semelhante como um evento de pré-build, usando em conjunto as variáveis do Visual Studio, e deverá utilizar o arquivo AssemblyInfo.cs para salvar as informações. Ficando mais ou menos assim.

"C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" $(ProjectDir). $(ProjectDir)Properties\AssemblyInfo_template.cs $(ProjectDir)Properties\AssemblyInfo.cs

Com tudo pronto, você poderá colocar na sua aplicação, algo que leia esse arquivo e exiba, ou não, a versão do mesmo para o usuário. Claro que, devido a questão de não ser de fato uma compilação, o processo acaba sendo menos interessante, pois é mais fácil manipular algum arquivo e não executar o gulpfile. Porém, se você for fiel ao seu workflow, e utilizar sempre o Gulp para geração dos builds, pode conseguir um grande aliado na organização do seu projeto e na avaliação de versões utilizadas.

Abraço a todos e até o próximo post

Docker – guia super básico

Docker é uma ferramenta que possibilita que você utilize máquinas virtuais não completas para executar, por exemplo, o código de seu projeto, ou seu servidor de banco de dados.

Materiais não faltam para você estudar ou aprender como ele funciona e validar se ele te ajuda a solucionar os seus problemas. Como sempre, meu intuito é encontrar uma forma realmente simples de explicar o conceito e indicar os primeiros passos, servindo até mesmo como um backup para mim mesmo, já que também não sou nenhum especialista na tecnologia.

Sendo assim, minha ideia é realmente escrever um ponto de partida. Mas é legal citar que seu uso está aumentando muito e ele resolve o problema de diferenças entre o ambiente de desenvolvimento e de produção por exemplo. Torna também a implantação em novas máquinas extremante simples, já que é possível compartilhar o script e até mesmo as imagens customizadas.

Mas vamos lá. O importante agora é você se familiarizar com os termos básicos:

image: é a “ISO” do sistema operacional que será utilizada pela VM. Ela pode ser usada em diversos containers ao mesmo tempo. Há muitas delas prontas na internet pra baixar.

container: é a image instanciada, em execução. Como dito, você pode instanciar diversas delas baseadas na mesma imagem (há inclusive orquestradores de containers, que reiniciam automaticamente em falhas, entre outras coisas, como por exemplo o Kubernetes ou o Swarm (que vem integrado), mas não é o escopo deste post).

Ao fazer alterações em um container, elas se perdem assim que ele é destruído, a não ser que você o salve como uma nova imagem. Vide abaixo.

Pois bem, para instalar, basta ir até o site e procurar pela versão Community Edition

Download Docker CE

Baixe e instale na sua máquina. É a única instalação real necessária. Recomendo também que já crie uma conta pelo site, já que ela é necessária para a utilização.

Depois de instalar, talvez sua máquina exija umas configurações para que ele funcione, mas ele mesmo vai te sugerir isso e reiniciar sozinho (eu uso Windows 10). Tudo pronto, basta você abrir um console (cmd, powershell, etc) e digitar o comando abaixo:

docker login

Insira o nome de usuário do docker (não serve o email) e a senha que você criou.

Para criar seu primeiro container e automaticamente já baixar a imagem, basta executar o comando abaixo:

docker run -it ubuntu /bin/bash

O bash é o comando para acessar o console do Ubuntu. Você deve estar agora em uma janela do console com um usuário root conectado e pode começar testar comandos no console pra ir se familiarizando, como ls para ver as pastas ou mesmo fazer umas instalações no container, com o comando apt-get. Mas lembre-se do que eu disse sobre salvar…

Sugiro você abrir outro console na mesma pasta e executar esse comando para verificar os containers que estão em execução:

docker container ls

Pode também, conferir que foi baixada a imagem:

docker image ls

Mas a real forma interessante de se criar os containers é usando scripts, e você pode fazer isso criando um arquivo Dockerfile, sem extensão e mandando executar:

# Setando a imagem a ser usada do Docker hub
FROM ubuntu:latest
LABEL Paulo Roberto Elias "ppuspfc@gmail.com"

Use o texto acima como o exemplo mais simples possível do que colocar no arquivo. Ele usa a última versão do Ubuntu disponível no DockerHub e coloca o meu nome no label (mude para o seu claro). Você pode até mesmo colocar a instrução abaixo nele para já ver um pouco da mágica acontecendo e ir tirando suas conclusões…

RUN apt-get update

Na internet você vai encontrar diversos desses scripts prontos com várias dependências já configuradas para alguns ambientes de desenvolvimento.

Navegue no console até a pasta onde você salvou o seu Dockerfile e execute o comando abaixo:

docker build -t minhaimagem .

Será criada uma nova imagem baseada no seu script, no caso utilizando a imagem original do Ubuntu. Veja que eu dei um nome a ela e o ponto após o nome é pra indicar que é para executar do diretório em que estamos. Confira novamente usando o comando para listar as imagens.

Depois executaremos a imagem, ou seja, criaremos um container com o comando abaixo:

docker run -it minhaimagem /bin/bash

As alterações que você fizer só ficarão salvas se você salvar o container, criando assim, uma nova imagem (pode-se sobrepor usando o mesmo nome, cuidado com a TAG, ela diferenciará também o arquivo).

$ docker commit <container_id> new_image_name:tag_name(optional)

Não se esqueça de executar o comando para listar os containers enquanto ele ainda estiver em execução, pegar o ID e usar no comando acima.

Eu ainda não aprendi desconectar do bash para executar comandos docker no mesmo console 🙂 mesmo tendo lido que dá pra usar uns atalhos de teclado. Não sei o que houve…acho que eu estava no console do VSCode, preciso pesquisar melhor. É, talvez tenha sido isso, mas é uma boa deixa para eu voltar aqui e tentar transformar isso em uma série, com meus próximos passos no Docker.

Um abraço e até a próxima