ffFala pessoal, tudo bem?
Estou me atualizando em uma série de ferramentas que julgo necessário nessa nova fase da minha vida profissional, já cheguei em um nível bom de Oracle, não sou um Oracle ACE da vida nem um profissional com mil certificações, mas também não sou nenhum inocente, rs. A uns 4 meses atrás sai de um cargo de gestão e voltei para o mercado buscando vagas de DBA e me deparei com uma nova realidade, a primeira é que a área de banco com a crise ficou muito prostituída, estão pagando pouco e exigindo muito e como sempre fiz, quando isso acontece, procuro conhecer quais as novas tendências e aprender essas tecnologias.
Estou aprendendo bases NOSQL (Cassandra e MongoDB), estou aprendendo sobre várias ferramentas Devops, Cloud Computing e BigData, pra ver se o jogo muda, pois não quero mais ter o desemprego batendo na minha porta. Conheço vários DBAs que hoje estão desalocados, buscando novas oportunidades, que reclamam que os cursos estão muito caros e tal, quando comecei com TI eu imprimi o Guia Foca Linux e estudava no ônibus, material na internet sempre tem, o que falta é foco pra parar e estudar o que eu até concordo, pois precisamos ser regrados pra isso.
Com foco nisso, estou iniciando algumas vídeo-aulas, com mini cursos de algumas tecnologias que podem ajudar você a se atualizar e vendo mais na frente buscando um lugar no céu, rs.
Esse primeiro mini-curso é uma soma de 7 vídeos (a soma dos vídeos não passam de 45 min, fazendo os exemplos garanto que em 2 horas você aprendeu Docker) que explicam o funcionamento do Docker, que nada mais é que um modelo novo de “virtualização” vamos dizer assim, a grosso modo pegamos um servidor parrudo e instalamos o Docker, que fazendo uma analogia ao VMWare seria o VMWare ESX, após a instalação fazemos a criação dos Containers (Como são chamados no Docker) que fazendo uma analogia com VMWare seriam as maquinas virtuais.
Qual a vantagem da utilização do Docker em vez do VMWare? Simples, uma que é OpenSource, outra que ele é levíssimo e fácil de usar, porque ele é leve? Porque na sua arquitetura ele não tem a camada virtualizadora que acaba “roubando” recursos da máquina, o Docker faz uso do mesmo Kernel do S.O. base do servidor, assim só usando as imagens customizadas e superleves das mais diversas possíveis. Segue abaixo uma comparação de ambas as arquiteturas.
Outra grande vantagem é a facilidade de deploy dessas imagens, como subir um container produtivo e realizar a cópia dele em questão de minutos para QA ou desenvolvimento e o melhor, totalmente possível de automação, pois no fundo, todas essas configurações são arquivos JSON.
Bom, então chega de conversa e vamos dar início a esse treinamento! Obrigado, de nada! Rs
Docker Aula 01 – Criação de servidor no GCP
Nesse primeiro vídeo aula, vou explicar como realizar a criação do nosso servidor para o nosso curso, estou usando o GCP do Google, um concorrente do AWS da Amazon, supersimples de usar e criando uma conta você ganha 300 dolares de credito para testar o produto por 1 ano, vale bem a pena dar uma olhada, você pode criar do seu jeito também, mas não me responsabilizo se algo não funcionar. Nosso servidor vai ser um CentOS 7 com uma CPUzinha e uns 4 GB de RAM. Segue abaixo o vídeo:
Docker Aula 02 – Instalando o Docker
Agora vamos iniciar o processo de instalação do docker, vamos rodar os comandos abaixo para atualizar os repositórios do YUM e realizar a instalação, todos os comandos usados seguem embaixo do vídeo aqui no post.
— Atualizando o Yum e realizando a instalação
– yum update –y – yum install docker -y |
— Iniciando o serviço e ativando o mesmo para start automático:
systemctl start docker systemctl enable docker |
Docker Aula 03 – Criando containers com Docker
Vamos criar nosso primeiro container agora, o vídeo abaixo explica e caso precise dos comandos segue sempre abaixo do vídeo aqui no post.
— Criando container:
docker run –name anselmo01 debian echo “Oi Anselmo” |
— Verificando execução
—— docker ps: os mostra os containers ativos
—— docker ps –a: os mostra os containers ativos e inativos
docker ps docker ps –a |
— Iniciando novamente o container:
docker start anselmo01 |
Docker Aula 04 – Gerenciando containers:
Nessa etapa vamos aprender como lidar com os containers existentes, apagar, alterar, nos conectar, sair do mesmo e etc:
— Vendo o código do container criado:
Mostra o JSON do container criado
docker inspect anselmo01 |
— Deletando o Container:
docker rm anselmo01 |
— Criando o container novamente mas com bash
docker run dit name anselmo01 debian /bin/bash |
— Sub parâmetros do run (dit)
O parâmetro -i –interactive na sua forma estendida) é utilizado para deixar a entrada de dados ao container aberta, caso você não esteja conectado (attached) no container em questão.
O parâmetro -t é utilizado para alocar um pseudo-tty para o container. Assim, podemos interagir com o interpretador de comando passando comandos para o /bin/bash, da mesma forma que usamos um terminal uma máquina virtual ou máquina física.
O parâmetro -d (deattaached) é para ser utilizado caso você não queira se conectar no container no momento de sua criação
— parando o container:
docker stop anselmo01 |
Docker Aula 05 – Movimentando arquivos e gerenciando imagens
Nesse tópico vamos ver como movimentar arquivos entre os containers e também como gerenciar as imagens do repositório, da máquina e criar templates customizados com os containers que criamos, esse último é legal para usarmos em containers padrões ou criarmos copias de ambientes produtivos pra QA e desenv.
— Movimentando arquivos no docker:
echo “palmeiras não tem mundial!” > /tmp/verdao docker cp /tmp/verdao anselmo01:/tmp/verdao docker cp anselmo01:/tmp/verdao /tmp/spvaicair |
— Executando comandos no container:
docker exec anselmo01 ls -l /tmp/verdão docker exec anselmo01 ls -l /etc/os-release |
— Trabalhando com imagens e templates:
— listando imagens baixadas pelo docker:
docker images |
— Baixando imagens pra máquina de pois usar no container:
docker pull centos7 |
— Removendo uma imagem:
docker rmi centos7 |
— Criando uma imagem customizada pra novas implantações:
docker run dit name webserverbase centos /bin/bash docker commit webserverbase webprod docker commit webserverbase webqa |
Docker Aula 06 – Gerenciando volumes:
Você pode trabalhar com volumes compartilhados entre os containers. Por padrão, o Docker cria um volume para cada container, porém, você pode compartilhar um diretório ou arquivo da máquina hospedeira com os containers, criar volumes pelo Docker ou até mesmo criar containers e compartilhar o seu volume com outros containers. Essa é uma boa pratica para movimentar e acessar arquivos entre os containers.
No primeiro exemplo vou criar um diretório na minha máquina real e mapeá-lo no container anselmo02.
mkdir /vaicorinthians |
Agora vou subir um container montando o diretório criado na máquina real, porem no container se chamará /teste_volume;
docker run -dit –privileged=true –name anselmo02 -v /vaicorinthians:/teste_volume debian /bin/bash docker run -dit –privileged=true –name anselmo02 -v /vaicorinthians:/teste_volume debian /bin/bash |
Agora entro dentro do diretório /vaicorinthians no servidor físico e crio 2 arquivos teste via touch:
[[email protected] ~]# cd /vaicorinthians/ [[email protected] vaicorinthians]# touch teste01 teste02 [[email protected] vaicorinthians]# teste01 teste02 |
Vamos executar um ls remoto e listar nossos arquivos dentro do container:
[[email protected] vaicorinthians]# docker exec anselmo02 ls /teste_volume teste01 teste02 |
Vamos logar no container criado e ver se meus arquivos aparecem lá:
docker attach anselmo02 |
Vamos no diretório /teste_volume e vamos criar mais 2 arquivos com touch
** Dentro do anselmo02
touch teste03 teste04 |
Saímos do container e validamos novamente o diretório /vaicorinthians localmente:
[[email protected] vaicorinthians]# ls teste01 teste02 teste03 teste04 |
Agora vamos fazer diferente, vamos criar um Volume, que pode ser entregue em um ou mais containers:
Criando o volume:
docker volume create –name dados |
Criando 2 containers montando o mesmo volume:
[[email protected] ~]# docker run -dit –privileged=true –name anselmo03 –hostname=anselmo03 -v dados:/teste_volume debian /bin/bash bd42b02be8a9144f07b7e0840c78c34663df1e98581f3a4e99cd57f37307df18 [[email protected] ~]# docker run -dit –privileged=true –name anselmo04 –hostname=anselmo04 -v dados:/testando_volume debian /bin/bash 82f5797c0cebe76a64c40c8ceef95c22062cfcf575a153041a59ee18c3e73875 |
Vamos criar alguns arquivos na primeira máquina (anselmo03):
[email protected]:/teste_volume# mkdir teste [email protected]:/teste_volume# touch arquivo01 arquivo02 arquivo03 |
Agora vamos sair e conferir no segundo container (anselmo04):
[[email protected] ~]# docker attach anselmo04 [[email protected]:/# cd testando_volume/ [[email protected]:/testando_volume# ls arquivo01 arquivo02 arquivo03 |
Enfim, podemos usar as 2 opções, tanto mapeando um diretório do nosso S.O da máquina física ou criar um volume entre os containers.
[[email protected] ~]# docker run -dit –privileged=true –name anselmo03 –hostname=anselmo03 -v dados:/teste_volume debian /bin/bash bd42b02be8a9144f07b7e0840c78c34663df1e98581f3a4e99cd57f37307df18 [[email protected] ~]# docker run -dit –privileged=true –name anselmo04 –hostname=anselmo04 -v dados:/testando_volume debian /bin/bash 82f5797c0cebe76a64c40c8ceef95c22062cfcf575a153041a59ee18c3e73875 [[email protected] ~]# cd /vaicorinthians/ [[email protected] vaicorinthians]# touch teste01 teste02 [[email protected] vaicorinthians]# ls teste01 teste02 [[email protected] ~]# cd /vaicorinthians/ [[email protected] vaicorinthians]# touch teste01 teste02 [[email protected] vaicorinthians]# ls teste01 teste02 |
Docker Aula 06 – Gerenciando Networks
O pacote docker engine nos permite configurar interfaces de rede e algumas customizações bem legais simulando vlans, realizar mapeamentos e outras funções.
Nesse tópico iremos explorar essas oportunidades.
Vamos criar uma máquina com um ngnix instalado e vamos mapear a porta 80 para a porta 80 do servidor físico:
docker run -it -p 80:80 –name webserver01 –hostname webserver01 nginx /bin/bash docker run -it -p 80:80 –name webserver01 –hostname webserver01 nginx /bin/bash |
Desde a versão 1.9.0. foi implantado a possibilidade da criação de VLANS no Docker, vamos criar uma vlan chamada netdba:
docker network create –subnet 10.0.0.0/16 netdba |
Agora vamos criar 2 containers básicos nessa rede:
[[email protected] ~]# docker network create –subnet 10.0.0.0/16 netdba 6755c2c451ead7949824c17e2c559fc417e191c8fb9efaa295f84bf459f509bb [[email protected] ~]# docker run -dit –privileged=true –name anselmo05 –hostname=anselmo05 –net netdba debian /bin/bash 51781c0139cadc4265a847d30f8e5b5b2a3135957fefa17ef7475fb70cc1911d [[email protected] ~]# docker run -dit –privileged=true –name anselmo06 –hostname=anselmo06 –net netdba debian /bin/bash 29c6875e2b73c11973b6743c2b8485473fa90a86ab55c0111e6ad7e6d040a93e |
Vamos ver o IP dos containers via exec:
[[email protected] ~]# docker exec anselmo05 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback [[email protected] ~]# docker exec anselmo06 ip a |
Na versão mais nova do docker eu consigo atribuir IPs para os containers desde que eu tenha criado a vlan:
[[email protected] ~]# docker run -dit –privileged=true –name anselmo07 –hostname=anselmo07 –ip 10.0.0.10 –net netdba debian /bin/bash cafb38d0d785c82fd1978e34855d4e66c2f699585523ed6c26430c5473cfc806 |
Espero que tenham gostado e que ajude bastante vocês!
Anselmo Borges!