domingo, 16 de maio de 2021

Desde os primórdios até os Containers.

 Quando comecei a trabalhar na área de informática(1999/2000) , haviam servidores dedicados para cada serviço disponibilizado (e-mail, ftp, arquivos, aplicações, banco de dados, servidores web entre outros). Há pouco atrás, soube que esses servidores eram conhecidos como BARE METAL. 

Com o aumento da quantidade de servidores, havia-se a necessidade de reduzir a quantidade destes por conta de espaço. Optou-se então pela construção de servidores maiores. Por conta disso, surgiu uma tecnologia capaz de dividir uma máquina grande em diversos servidores. A virtualização é a tecnologia que permite transformar um servidor físico em diversos servidores virtuais. 

Os virtualizadores possibilitam o fatiamento dessas máquinas em diversas máquinas virtuais, isoladas cada uma com seu sistema operacional, disco entre outras coisas. Essa solução é muita usada ainda hoje. Contudo, existem serviços que consomem poucos recursos computacionais, o que leva a um desperdício desses recursos. Exemplo: Vamos imaginar um servidor para rodar um microserviço. Queimaríamos uma licença de sistema operacional, dedicaríamos memória e disco para este serviço. E quem nunca desenvolveu uma aplicação que rodava perfeitamente na sua máquina e ao migrar a aplicação para outro servidor, a aplicação parava de funcionar? Para resolver este problema, eis que surgem os containers.

Um Container nada mais é do que um ambiente isolado contido em um servidor que, diferentemente das máquinas virtuais, divide um único host de controle. Os containers compartilham o mesmo kernel do sistema operacional e isolam os processos da aplicação do restante do sistema.

Na prática, o sistema operacional  e o hypervisor são eliminados e o host entra em contato direto com as bibliotecas. Com essa ligação, os itens ficam portáveis para qualquer outro host que também possua o sistema de virtualização instalado. 

Quem saiu na frente no utilização desse tipo de tecnologia foi uma empresa sediada nos Estados Unidos (São Francisco) chamada Docker.

A Docker criou uma plataforma open source que facilita a criação e administração de ambientes isolados. Ele possibilita o empacotamento de uma aplicação ou ambiente dentro de um container, se tornando portátil para qualquer outro host que contenha o Docker instalado. Então, você consegue criar, implantar, copiar e migrar de um ambiente para outro com maior flexibilidade.

E como é que funciona essa plataforma?  Através de um arquivo conhecido como Dockerfile é descrita uma imagem com todas as dependências necessárias para criação do container. Após bildar esse arquivo é gerada uma imagem que pode ser enviada para um repositório, estilo github, chamado pelo nome de DockerHub. Daí ao executar o container, caso o mesmo já não esteja na máquina de trabalho, o DockerEngine baixa a imagem para essa máquina.

Comandos do Docker

Usar o docker (via CLI) consiste em passar a ele uma opção, comando e argumentos.

docker [option] [comando] [argumento]

Como eu sei quais as imagens disponíveis no meu repositório local?

docker images

Como adicionar imagens locais?

docker search imagem

docker pull imagem

Como remover imagens locais?

docker rmi imagem

Criar um container

docker run imagem

Criar um container e entrar no Terminal

docker run -it imagem

Criar um container com um apelido

docker run --name ubuntinho ubuntu

Verificar o estado ou encontrar o ID de um container

docker ps

Remover um container

docker rm nomecontainer

Criando imagens com o dockerfile

O Dockerfile é um arquivo de texto que contém as instruções necessárias para criar uma nova imagem de contêiner. Essas instruções incluem a identificação de uma imagem existente a ser usada como uma base, comandos a serem executados durante o processo de criação da imagem e um comando que será executado quando novas instâncias da imagem de contêiner forem implantadas.

Para criar um Dockerfile é simples, basta criar um arquivo com o nome Dockerfile.

Para gerar a imagem a partir do Dockerfile, executamos o comando abaixo no mesmo local que o arquivo se encontra:

docker build -t nome_da_imagem .

Para criar o container a partir dessa imagem construída, podemos executar o comando:

docker run nome_da_imagem

Até aqui a gente viu como criar um container, agora vamos imaginar que queremos criar um container com mysql, outro com PHP e ainda um que contenha um serviço de mensageria do tipo RabbitMQ. Fácil né? É só subir container por container. Mas isso prático? Não né! É aí que entra um cara chamado Docker-composer.

O docker-compose é uma ferramenta do Docker que, a partir de diversas especificações, permite subir diversos containeres e relacioná-los através de redes internas.

Exemplo de um arquivo docker-compose(subindo php, mysql e phpmyadmin). Executar: docker-compose up -d


Obviamente, essa é uma introdução ao assunto. Vamos que vamos!

sábado, 8 de maio de 2021

O Mínimo de VI

 Sendo o Vi o editor padrão do LINUX, não tem como o mesmo. Sendo assim, a proposta deste Post é expor o básico em relação ao assunto.

Geralmente, o que fazemos em um editor de textos? Abrimos um arquivo para edição, inserimos texto, substituímos, recortamos e colamos texto, salvamos arquivos.

É importante entender que o VI trabalha com dois modos de execução: o modo COMMAND e o modo INSERT. O Insert é utilizado para editar o arquivo e o modo Command é usado para os executar os demais comandos do VI.  Para alternar entre os modos, clicar na tecla ESC

Abrir o editor de texto: VI

Abrir arquivo com o editor vi NOME_ARQUIVO.txt

Comandos básicos:

:wq - Salva o arquivo e sai do editor

:w nome_do_arquivo - Salva o arquivo corrente com o nome especificado

:w! nome_do_arquivo - Salva o arquivo corrente no arquivo especificado

:q - Sai do editor

:q! - Sai do editor sem salvar as alterações realizadas

Comandos de inserção:

i - Insere texto antes do cursor

a - Insere texto depois do cursor

r - Insere texto no início da linha onde se encontra o cursor

A - Insere texto no final da linha onde se encontra o cursor

o - Adiciona linha abaixo da linha atual

O - Adiciona linha acima da linha atual


Comandos de movimentação:

Ctrl+f - Move o cursor para a próxima tela

Ctrl+b - Move o cursor para a tela anterior

H - Move o cursor para a primeira linha da tela

M - Move o cursor para o meio da tela

L - Move o cursor para a última linha da tela

h - Move o cursor um caractere a esquerda

j - Move o cursor para a próxima linha

k - Move o cursor para linha anterior

l - Move o cursor um caractere a direita

w - Move o cursor para o início da próxima palavra (Ignora a pontuação)

W - Move o cursor para o início da próxima palavra (Não ignora a pontuação)

b - Move o cursor para o início da palavra anterior (Ignora a pontuação)

B - Move o cursor para o início da palavra anterior (Não ignora a pontuação)

0 - Move o cursor para o início da linha atual

^ - Move o cursor para o primeiro caractere não branco da linha atual

$ - Move o cursor para o final da linha atual

nG - Move o cursor para a linha n

G - Move o cursor para a última linha do arquivo


Comandos de busca:

/palavra - Busca pela palavra ou caractere em todo o texto

?palavra - Move o cursor para a ocorrência anterior da palavra

n - Repete o último comando / ou ?

N - Repete o último comando / ou ? , na direção reversa

Ctrl+g - Mostra o nome do arquivo, o número da linha corrente e o total de linhas


Comandos de substituição e deleção:

x - Deleta o caractere que esta sob o cursor

dw - Deleta a palavra, da posição atual do cursor ate o final

dd - Deleta a linha atual

D - Deleta a linha a partir da posição atual do cursor ate o final

rx - Substitui o caractere sob o cursor pelo especificado em x(é opcional indicar o caractere)

Rx - Substitui a palavra sob o cursor pela palavra indicada em x

u - Desfaz a última modificação

U - Desfaz todas as modificações feitas na linha atual

J - Une a linha corrente a próxima

s:/Linux/Unix - Substitui a primeira ocorrência de "Linux" por "Unix"

s:/Linux/Unix/g - Substitui a ocorrência de "Linux" por "Unix" em todo arquivo

Selecionar, copiar, recortar, colar

1.Posicione o cursor no início do texto que você quer copiar ou recortar, para isso pode usar as teclas direcionais ou as tradicionais "h", "j", "k" e "l".

2. Digite "v" minúsculo.

3. Novamente usando as teclas de direcionais ou as tradicionais "h", "j", "k" e "l", marque o texto a ser copiado ou recortado.

4. Neste passo é que vem a diferença entre copiar e recortar.

a. Caso deseje copiar, digite "y" minúsculo.

b. Mas se seu desejo é de recortar, digite "d" minúsculo.

6. Posicione o cursor no ponto onde deseja colar o texto usando as teclas de direcionais ou as tradicionais "h", "j", "k" e "l".

7. Para colar digite "p" minúsculo.

Com isso, já dá para se virar com o editor.

Valeu!!!


sexta-feira, 7 de maio de 2021

Automatizando tarefas com Shell Script

Shell script é o nome dado a um arquivo que será interpretado por algum programa tipo Shell. Atualmente existem vários programas tipo Shell. Além dos principais - sh e bash -, existem também, kshzshcsh e tcsh. Um Shell script (ou script em Shell) necessita basicamente do interpretador Shell.

Algumas operações típicas executadas por linguagens de script em Shell incluem; manipulação de arquivos, execução de programas e impressão de texto. Sendo assim é muito comum que scripts sejam utilizados para automatização de tarefas - como configurar o ambiente, executar um programa e fazer qualquer limpeza, registro, etc. 


A ideia deste post é fazer um apanhado geral para criação de scripts.


Nome dos arquivos

Apesar do Linux não exigir que você coloque extensão nos arquivos, é comum utilizar a extensão .sh o que visualmente facilita o reconhecimento de um script. Exemplo: script_x.sh


Estrutura de um script

#!/bin/bash 

# ou #!/bin/sh (dependendo do shell que você estiver utilizando). 

# Todo script deve começar com a linha acima (# é usada para definir comentários)

cd /

ls -l

#Para definir uma variável, basta usar o sinal de igual "=" e

#para ver seu valor, usa-se o "echo":

#Não podem haver espaços ao redor do igual "=" no valores das variáveis

NOME_VARIAVEL=Hugo

echo $NOME_VARIAVEL

#Repare que para exibir o conteúdo da variável foi utilizado o caractere $

#Ainda é possível armazenar a saída de um comando dentro de uma variável. Ao invés #de aspas, o comando deve ser colocado com o caractere "$()", vejam:

HOJE=$(date)

echo $HOJE

#O comando read é para ler informações digitadas pelo usuário e criar variáveis

#O parâmetro –n é apenas para ficar na mesma linha

echo -n "Digite um número:"

read NUMERO1

echo -n "Digite outro número:"

read NUMERO2

# A construção usada para indicar uma expressão aritmética é

# "$((...))", com dois parênteses.

echo "A soma entre os dois número é" $((NUMERO1 + NUMERO2))

#Os scripts que usam estruturas condicionais possibilitam criar duas ou mais #respostas para a condição exposta. Assim como qualquer outra linguagem de #programação, o shell também tem estruturas de condição e repetição. As mais usadas #são if, for e while.

#estruturas de condição

IDADE=18

if [ IDADE -eq 18 ] then

    echo "É maior de idade"

else

    echo "É menor de idade"

fi


#Operadores aritméticos + - * / % **

#Operadores relacionais -eq(igual) -ne(diferente) -lt(menor) -le(menor ou igual) 

# -gt(maior) -ge(maior ou igual)

#Operadores lógicos || &&

#teste em arquivos


if [ -f /tmp/teste.txt ] then

    echo "arquivo existe"

else

   echo  "arquivo inexistente"

fi

#CASE

echo "Digite 1 ou 2"

read opcao

case $opcao in

"1") echo "você digitou 1";;

"2") echo "você digitou 2;;

  *) echo "opção inválida";;

esac

exit

#estrutura de repetição

#while

i=1

while [$i -le 100]

do

 echo $i

i=$(($i+1))

done


#for

for passo in $(seq 10)

do

  echo passo

done


#FUNÇÕES

IDADE=18

CALCULARIDADE()

{

  if [ $IDADE -eq 18 ] then

        echo "Maior de 18"

}

CALCULARIDADE


#funcoes podem receber parâmetros

echo "Nome do script: $0"

echo "Número total de parâmetros: $#"

echo "Primeiro parâmetro: $1"

echo "Segundo parâmetro: $2"

echo "Décimo quinto parâmetro: ${15}"

echo "Todos os parâmetros: $*”



Passos a serem realizados para execução de um script

  1. Criar um arquivo com a extensão .sh
  2. Iniciar com a tag e o Shell a ser utilizado.
  3. Digitar os comandos do script e salvar o arquivo
  4. Dar permissão de execução para o script
  5. executar o script com "./"

Bom é isso aí! Até a próxima.