Páginas

quinta-feira, 22 de outubro de 2020

    




Nagios é uma aplicação muito popular de monitoramento de rede de código aberto distribuída sob a licença GPL. Ele é capaz de monitorar tanto hosts quanto serviços, alertando quando ocorrerem problemas e também quando os problemas são resolvidos

Neste tutorial, vamos mostrar como instalar, configurar e acessar o Nagios em um computador executando o Ubuntu Linux.

NTP no Ubuntu Linux


Primeiro, vamos configurar o sistema para usar a data e a hora corretas usando o NTP.

No console do Linux, use os seguintes comandos para definir o fuso horário correto.

 # dpkg-reconfigure tzdata

Current default time zone: 'America/Sao_Paulo'
Local time is now:      Thu Oct 22 07:36:09 -03 2020.
Universal Time is now:  Thu Oct 22 10:36:09 UTC 2020.

Instale o pacote Ntpdate e defina a data e a hora corretas imediatamente.

# apt-get update
# apt-get install ntpdate
# ntpdate pool.ntp.br

root@ubuntu:~# ntpdate pool.ntp.br

22 Oct 07:40:47 ntpdate[4312]: adjust time server 200.160.7.186 offset 0.059302 sec


O comando Ntpdate foi usado para definir a data e a hora corretas usando o servidor: pool.ntp.br

Vamos instalar o serviço NTP.

# apt-get install ntp

NTP é o serviço que manterá nosso servidor atualizado.

Use a data do comando para verificar a data e a hora configuradas no seu Ubuntu Linux.

root@ubuntu:~# date

Thu 22 Oct 2020 07:46:02 AM -03

Se o sistema mostrasse a data e a hora corretas, isso significa que você seguiu todas as etapas corretamente.


Instalando o Apache no Linux



Em seguida, precisamos instalar o servidor web Apache e todo o software necessário.

No console do Linux, use os seguintes comandos para instalar os pacotes necessários.

# apt-get install libgd-dev unzip wget build-essential
# apt-get install apache2 php libapache2-mod-php php-gd

Pare o serviço Apache, ative os módulos necessários e inicie o serviço Apache.

root@ubuntu:~# service apache2 stop

root@ubuntu:~# a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
  systemctl restart apache2

root@ubuntu:~# systemctl restart apache2

root@ubuntu:~# a2enmod cgi
Enabling module cgi.
To activate the new configuration, you need to run:
  systemctl restart apache2

root@ubuntu:~# systemctl restart apache2

root@ubuntu:~# service apache2 start

root@ubuntu:~# service apache2 status
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2020-10-22 07:54:46 -03; 20s ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 22593 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
   Main PID: 22612 (apache2)
      Tasks: 6 (limit: 2285)
     Memory: 10.7M
     CGroup: /system.slice/apache2.service
             ├─22612 /usr/sbin/apache2 -k start
             ├─22613 /usr/sbin/apache2 -k start
             ├─22614 /usr/sbin/apache2 -k start
             ├─22615 /usr/sbin/apache2 -k start
             ├─22616 /usr/sbin/apache2 -k start
             └─22617 /usr/sbin/apache2 -k start

Oct 22 07:54:46 ubuntu systemd[1]: Starting The Apache HTTP Server...
Oct 22 07:54:46 ubuntu apachectl[22602]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName'>
Oct 22 07:54:46 ubuntu systemd[1]: Started The Apache HTTP Server.


Instalação Nagios no Ubuntu



No console do Linux, use os seguintes comandos para criar as contas necessárias.

# useradd nagios
# groupadd nagcmd
# usermod -a -G nagcmd nagios

Use os seguintes comandos para baixar os pacotes do Nagios.

# mkdir /downloads
# cd /downloads
# wget https://ufpr.dl.sourceforge.net/project/nagios/nagios-4.x/nagios-4.4.2/nagios-4.4.2.tar.gz

Extraia, compile e instale o pacote Nagios.

# tar -zxvf nagios-4.4.2.tar.gz
# cd nagios-4.4.2/
# ./configure --with-nagios-group=nagios --with-command-group=nagcmd
# make all
# make install
# make install-init
# make install-config
# make install-commandmode
# make install-webconf


Vamos criar a senha para a conta de administrador do Nagios.

# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

New password: *****

Re-type new password: *****

Adding password for user nagiosadmin


Você também deve reiniciar o apache manualmente e verificar o status do serviço.

# service apache2 restart


Exemplos de arquivos de configuração já foram instalados no diretório /usr/local/nagios/etc. Estes arquivos vão funcionar bem para a configuração inicial. Para prosseguir você precisa fazer uma mudança.

Edite o arquivo /usr/local/nagios/etc/objects/contacts.cfg com o seu editor favorito e altere o email associado com a definição de contato nagiosadmin para o endereço que você gostaria de receber os alertas.

###############################################################################
#
# CONTACTS
#
###############################################################################

# Just one contact defined by default - the Nagios admin (that's you)
# This contact definition inherits a lot of default values from the
# 'generic-contact' template which is defined elsewhere.

define contact {

    contact_name            nagiosadmin             ; Short name of user
    use                     generic-contact         ; Inherit default values from generic-contact template (defined above)
    alias                   Nagios Admin            ; Full name of user
    email                   nagios@localhost ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******


Use o seguinte comando para iniciar o servidor Nagios:

# service nagios start


Instalação de Plugins do Nagios no Ubuntu



Em seguida, precisamos instalar os plugins do Nagios.

No console do Linux, use os seguintes comandos para instalar os pacotes necessários.

# apt-get install autoconf libc6 libmcrypt-dev libssl-dev bc
# apt-get install gawk dc snmp libnet-snmp-perl gettext libperl-dev
# apt-get install libpqxx3-dev libdbi-dev libldap2-dev
# apt-get install libmysqlclient-dev smbclient qstat fping

Use os seguintes comandos para baixar os plug-ins do Nagios.

# cd /downloads
# wget https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz

Extraia, compile e instale o pacote de plugins do Nagios.

# tar -zxvf nagios-plugins-2.2.1.tar.gz
# cd nagios-plugins-2.2.1/
# ./configure --enable-perl-modules
# make
# make install

Use o seguinte comando para reiniciar o servidor Nagios:

# service nagios restart


Abra o seu navegador e digite o endereço IP do seu servidor web mais / nagios.

Em nosso exemplo, o seguinte URL foi inserido no navegador:

• http://192.168.29.129/nagios

Na tela de prompt, insira as informações administrativas de login.

Informações de acesso padrão de fábrica:
• Nome de usuário: nagiosadmin
• Senha: sua senha






Após um login bem-sucedido, o painel do Nagios será exibido.









quinta-feira, 15 de outubro de 2020

  



Executando containers Docker em produção com segurança


Segurança é Tudo não é mesmo? Sabemos que hoje mesmo, com todos os avanços tecnológicos, não estamos isentos de sermos vitimas de algum ataque que mau sabemos de onde veio, nossos containers não escapam dessa lógica perversa, portanto todo cuidado é pouco quando estamos administrando containers Docker


Kernel exploits (exploração do kernel)

Como não acontece quando se usa uma Virtual Machine, ao usar containers o kernel é compartilhado entre todos os containers e o host, assim sendo, aumenta a importância de qualquer vulnerabilidade que explore o kernel.

 

Denial-of-service attacks (ataque de negação de serviço)

Como todos os containers compartilham os recursos do kernel, se ocorrer de um container poder monopolizar o acesso a alguns recursos, tal como memória, ou até IDs de usuário (UIDs), o que pode ocasionar a falta recursos para outros containers, ocasionando em uma negação de serviço (DoS).

 

Container breakouts (invasão de container)

Um possível invasor que possui acesso a um container não consegue acessar os outros containers ou ao host. Se por acaso você usa root no container, você será root no host.

 

Poisoned images (imagens “envenenadas”)

Como você pode garantir que as imagens que você está utilizando são realmente seguras, não foram adulteradas, e vêm da fonte que elas afirmam vir?

 

Application secrets (segredos de aplicações)

Quando um container acessa um banco de dados ou a um serviço, será muito provável que credenciais serão exigidas, tal como um token ou mesmo um usuário e senha. Se um possível invasor obtiver acesso ao container, ele terá acesso a todos esses dados.

 

Algumas medidas de proteção 

Um modo de obter o hardening de containers docker em produção é tornando-os “imutáveis”, ou seja, no modo read only (somente leitura). Outros métodos para executar containers de forma segura incluem minimizar o attack surface e aplicar tanto o procedimento padrão de hardening do Linux, como os que são específicos a um ambiente de container.


Docker modo read only

Um container pode ser executado no modo somente leitura usando a flag –read-only ao iniciá-lo. Isso impede qualquer processo de escrita para o sistema de arquivos. Qualquer tentativa resulta em erro. A execução dessa infraestrutura imutável também tem relação com outras melhores práticas recomendadas para pipelines de deploy de software.

Embora a imutabilidade evite a execução de qualquer script malicioso ou alterações que possam acontecer através de vulnerabilidades presentes em outros softwares rodando dentro do container docker, até que ponto esse modo é viável para aplicativos no mundo real? Aplicativos que geram log de arquivos e usam bancos de dados, por exemplo, necessitam de escrita.

 

Sistema de log

Uma solução possível para o log seria usar um sistema de log centralizado como o Elasticsearch/Logstash/Kibana (ELK) para que todos os logs sejam coletados em um local central, possivelmente outro container, que não seja acessado diretamente pelo usuário final. Outra alternativa é exportar os logs para fora do container docker usando a flag –log-driver ao iniciar o container.

Para aplicativos que precisam de acesso de gravação para diretórios temporários como /tmp, uma solução é montar um sistema de arquivos temporário no container para esses diretórios.

Os bancos de dados não são acessados diretamente pelo usuário final, portanto, o risco é menor. No entanto, isso não impede ataques, a menos que os aplicativos voltados para o usuário contemplem o hardening.

Nos casos em que é inevitável ter um sistema de arquivos gravável, o Docker fornece auditoria e reverte as alterações. O sistema de arquivos em um container Docker é empilhado como uma série de camadas. Quando um novo container docker é criado, uma nova camada é adicionada na parte superior onde pode ser gravada.

O driver de armazenamento docker oculta a ação nos bastidores e o apresenta como um sistema de arquivos regular para o usuário. As gravações criadas em um container docker em execução são feitas nesta nova camada. Isso geralmente é chamado Copy-On-Write (COW).

 Alterações de configuração esperada são fáceis de detectar em um container docker. O comando ‘docker diff‘ exibe as alterações feitas no sistema de arquivos – sejam eles arquivos adicionados, removidos ou modificados.

 

Outras boas recomendações para proteger containers docker em produção

Executar uma imagem mínima como Alpine Linux, que foi projetada com tendo a segurança em mente. O kernel é corrigido com uma porta não oficial do grsecurity. O grsecurity é um conjunto de melhorias de segurança para o kernel Linux, que inclui controle de acesso e eliminação de vulnerabilidades baseadas em corrupção de memória, minimizando as formas pelas quais um sistema pode ser atacado.

Reforço de limites de recursos (CPU/RAM) para evitar ataques DoS

Configuração de limites de threads e processos no sistema operacional

Aplicação de procedimentos padrão de hardening do kernel Linux como o sysctl hardening

Execução de um único aplicativo por container. Isso é recomendado porque reduz a o attack surface, ou seja, a quantidade de vulnerabilidades possíveis para um determinado container é limitada àquelas que podem estar presentes no aplicativo desse container.

 

Segurança é tudo!




Como fazer login no Docker Hub, fazer o Docker pull e o Docker push

 

Nesse artigo vamos aprender como logar no repositório do Docker Hub, para que você possa enviar suas imagens e também se assim quiser baixa las posteriormente para o seu host, para isso escolha uma imagem a qual você queira fazer o upload

root@ubuntu:~# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

rfnc/apache 1.0 146941fa2166 7 days ago 221MB

ubuntu/rfnc latest 9140108b62dc 2 weeks ago 72.9MB

ubuntu latest 9140108b62dc 2 weeks ago 72.9MB

rfnc/ubuntu latest 9140108b62dc 2 weeks ago 72.9MB

ubuntu 14.04 df043b4f0cf1 4 weeks ago 197MB

debian latest f6dcff9b59af 5 weeks ago 114MB

ubuntu 19.10 2f6c85efea61 4 months ago 72.9MB

ubuntu 14.10 a8a2ba3ce1a3 5 years ago 194MB

 

Renomeie sua imagem como no exemplo abaixo, lembrando que você precisa sempre usar o IMAGE ID, e o nome da sua imagem sempre deverá ficar no formato, seu usuário no Docker Hub/nome da imagem que você queira atribuir, como no exemplo abaixo, renomeei a imagem debian para rfnc/debian

 root@ubuntu:~# docker tag f6dcff9b59af rfnc/debian


Veja a nova imagem

 root@ubuntu:~# docker images | grep debian

debian latest f6dcff9b59af 5 weeks ago 114MB

rfnc/debian latest f6dcff9b59af 5 weeks ago 114MB

 

 Criado seu login no site do Docker Hub, agora use o seguinte comando para logar no repositório, use seu ID e senha

 root@ubuntu:~# docker login

Authenticating with existing credentials...

WARNING! Your password will be stored unencrypted in /root/.docker/config.json.

Configure a credential helper to remove this warning. See

https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

 

 Agora use o seguinte comando para fazer o upload da sua imagem para o repositório do Docker Hub

 root@ubuntu:~# docker push rfnc/debian

The push refers to repository [docker.io/rfnc/debian]

4ef54afed780: Mounted from library/debian

latest: digest: sha256:2f53b5f0101a2f296c632c28010df43575b8ced96615b4b0b370d52a7004f473 size: 529

 

 Vá até o site do Docker Hub e verifique se sua imagem está lá no repositório




 Agora remova a sua imagem do seu host com o comando abaixo

 root@ubuntu:~# docker rmi -f rfnc/debian

Untagged: rfnc/debian:latest

Untagged: rfnc/debian@sha256:2f53b5f0101a2f296c632c28010df43575b8ced96615b4b0b370d52a7004f473

 

 Como podem ver a imagem rfnc/debian não está mais presente

 root@ubuntu:~# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

rfnc/apache 1.0 146941fa2166 7 days ago 221MB

ubuntu latest 9140108b62dc 2 weeks ago 72.9MB

rfnc/ubuntu latest 9140108b62dc 2 weeks ago 72.9MB

ubuntu/rfnc latest 9140108b62dc 2 weeks ago 72.9MB

ubuntu 14.04 df043b4f0cf1 4 weeks ago 197MB

debian latest f6dcff9b59af 5 weeks ago 114MB

ubuntu 19.10 2f6c85efea61 4 months ago 72.9MB

ubuntu 14.10 a8a2ba3ce1a3 5 years ago 194MB

 

Agora use o seguinte comando para fazer o download da sua imagem do repositório do Docker Hub

root@ubuntu:~# docker pull rfnc/debian

Using default tag: latest

latest: Pulling from rfnc/debian

Digest: sha256:2f53b5f0101a2f296c632c28010df43575b8ced96615b4b0b370d52a7004f473

Status: Downloaded newer image for rfnc/debian:latest

docker.io/rfnc/debian:latest

 

 Como podem ver a imagem agora está presente no host

root@ubuntu:~# docker images | grep debian

debian latest f6dcff9b59af 5 weeks ago 114MB

rfnc/debian latest f6dcff9b59af 5 weeks ago 114MB

 

Entre no container pra se certificar que está tudo certo

root@ubuntu:~# docker run -ti rfnc/debian

root@9d9b99b02d04:/# ps -ef

 

Como podem ver o procedimento é bem simples e descomplicado


quarta-feira, 14 de outubro de 2020

           


VMware Workstation Player e Docker Toolbox para Windows não rodam em conjunto

 

Olá pessoal, isso ocorre devido a  uma questão de incompatibilidade das tecnologias. Tanto o VMware Workstation Player, quanto o VirtualBox virtualiza de uma forma que não permite deixar o Hyper-V ativo, já o Docker precisa do Hyper-V pra virtualizar um Linux, onde estarão os conteiners Docker, explicarei mais abaixo o que ocorre quando se inicia ambas as aplicações e seus respectivos erros

 

 Erro ao iniciar o Docker Toolbox para Windows sem o Hyper-V ativo




Para resolver esse problema, vá até o Painel de Controle -> Ativar ou desativar recursos do Windows, procure pelo Hyper-V, clique na caixa de ativação, eventualmente o sistema pode pedir a reinicialização do sistema




Erro ao iniciar o VMware Workstation Player com o Hyper-V ativo




Para resolver esse problema, siga os passos abaixo


1. Abra msinfo32 / informações do sistema no Windows 10

 2. Em Resumo do sistema na página à direita, role para baixo até Segurança baseada em virtualização   e certifique-se de que o valor esteja definido como Não habilitado. ( Como na figura abaixo )

 3. Se o valor for definido como ativado, siga as etapas fornecidas abaixo para desativar o Hyper-V.




1. Desligue o Hyper-V

Vá para "Ativar ou desativar recursos do Windows"

Certifique-se de que o Hyper-v não esteja marcado.

Se estiver marcado, desmarque-o e clique em "Ok".

2. Abra a janela do prompt de comando como administrador

Execute “bcdedit / enum {current}”

Veja o hypervisorlaunchtype, seu estado precisa estar em off

Execute “bcdedit / set hypervisorlaunchtype off” para desabilitar o hypervisor, feche o prompt de comando após executar os comandos e reinicie o sistema.




Use os passos abaixo para desabilitar o Hyper-V no Microsoft Windows 10 Pro & acima dessa versão


1.Editar política de grupo (gpedit)

2.Digite gpedit na barra de pesquisar

3.Abaixo de Configuração do Computador, navegue nesse caminho, Modelos Administrativos -> Sistema -> Device Guard





4.Clique duas vezes no lado direito "Ativar Segurança Baseada em Virtualização" para abrir uma nova janela

5.Estaria como "Não Configurado", selecione "Desabilitado" e clique em "Ok"




6.Feche o Editor de Política de Grupo Local.

7.Reinicie o sistema


Use os passos abaixo para desabilitar o Hyper-V no Microsoft Windows 10 Home

Nota: Este procedimento modifica o registro do Windows. Antes de fazer qualquer modificação no registro, certifique-se de ter um backup atual e válido do registro e da máquina virtual, para fazer backup do registro, você pode fazer o backup exportando todo o registro, ou usando um programa simples como o Ccleaner para realizar o backup


1. Digite regedit no barra de pesquisas

2. Navegue em HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Control > DeviceGuard

3. On the right-hand side, write a new key


 a. Clique direito > Novo > Valor DWORD (32-bit) 

 b. Nomeie esse Valor "EnableVirtualizationBasedSecurity"

Por padrão, deveria ser 0, clique duplo e confirme o valor

4. Navegue em HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Control > Lsa

5. Clique no lado direito, escreva um novo valor


a. Clique direito > Novo > Valor DWORD (32-bit) 

b. Nomeie esse Valor "LsaCfgFlags"

Por padrão, deveria ser 0, clique duplo e confirme o valor


Dois problemas bem comuns que você pode encontrar ao iniciar a criação de containers e os atribuir recursos

 

 1. Ao baixar uma imagem do repositório do docker

root@ubuntu:cgroups: cannot found cgroup mount destination: unknown

Resolução

sudo mkdir /sys/fs/cgroup/systemd

sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd

 

 2. Erro ao alocar memória ou swap no container

 root@ubuntu:~# docker run -ti --memory=20m --memory-swap=20m debian /bin/bash

WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.

 Resolução

 Adcionar as entradas no arquivo do grub

 root@ubuntuserver:~# cat /etc/default/grub |grep GRUB_CMDLINE_LINUX

 GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity"

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

 

 Update o grub

 root@ubuntu:/sys/fs/cgroup/memory# update-grub

Sourcing file `/etc/default/grub'

Sourcing file `/etc/default/grub.d/init-select.cfg'

Generating grub configuration file ...

Found linux image: /boot/vmlinuz-5.4.0-48-generic

Found initrd image: /boot/initrd.img-5.4.0-48-generic

Found linux image: /boot/vmlinuz-5.4.0-42-generic

Found initrd image: /boot/initrd.img-5.4.0-42-generic

Found memtest86+ image: /boot/memtest86+.elf

Found memtest86+ image: /boot/memtest86+.bin

done

 

 Reinicie o servidor

 shutdown -r now

 


terça-feira, 13 de outubro de 2020

     



Microserviços, Containers e o Docker

 

Estar envolto com uma arquitetura de microserviços criando pequenos serviços com uma necessidade de mecanismos leves, publicação independente, escalabilidade e portabilidade, hoje se torna mais que primordial em grandes projetos de médias e grandes empresas.

Containers são ambientes de execução leves com a maioria dos componentes do núcleo de uma máquina virtual e serviços isolados de um sistema operacional, concebido para fazer o empacotamento fácil e a execução de serviços leves.

Entre as vantagens de se usar o Docker com seu sistema de containers podemos pontuar

 Com um container portável entre diferentes plataformas, a portabilidade de uma aplicação pode ser alcançada colocando a aplicação e todas suas dependências dentro do container;

Containers incluem apenas a aplicação e suas dependências que, juntamente com a natureza leve dos containers torna-os mais eficientes na utilização dos recursos;

Os containers podem fornecer ambientes ao usuário com as necessidades de recursos estritamente controladas sem o uso de virtualização;

A tecnologia que faz uso de containers é uma nova tecnologia emergente tendo o Docker como líder e muitas grandes empresas assinaram acordos de parceria com Docker, incluindo empresas gigantescas tanto no ramo de TI, como em variados ramos

 A documentação sobre containers já é imensa, e não pretendo me aprofundar aqui na base teórica, portanto nesse artigo focaremos como dar os primeiros passos na criação, aplicação e gerenciamento de containers docker

 ( Outputs dos comandos também serão mostrados em algumas ocasiões para exemplificar o que está sendo feito, lembrando que todos os comandos devem ser executados com superusuário )

 

1. Instalar o docker

 

root@ubuntu:~# curl -fsSL https://get.docker.com/ | sh

# Executing docker install script, commit: 26ff363bcf3b3f5a00498ac43694bf1c7d9ce16c

+ sh -c apt-get update -qq >/dev/null

+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null

+ sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | apt-key add -qq - >/dev/null

Warning: apt-key output should not be parsed (stdout is not a terminal)

+ sh -c echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" > /etc/apt/sources.list.d/docker.list

+ sh -c apt-get update -qq >/dev/null

+ [ -n ]

+ sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null

+ sh -c docker version

 

 2. Iniciar o docker

 /etc/init.d/docker start ( Ubuntu/Debian )

 systemctl start docker ( Centos/Fedora )

 

 3. Verificar a versão do docker

 root@ubuntu:/# docker --version

Docker version 19.03.13, build 4484c46d9d

 

 4. Criar um container simples

 docker run -ti debian /bin/bash

 ( Você já cai diretamente dentro do container depois de criado )

 [root@localhost keys]# docker run -ti debian /bin/bash

root@e640e827e407:/#

 

 Sair do container matando a sessão do mesmo

 ctrl + d

 Sair do container deixando ativo a sessão do mesmo

 crtl + p + q

 

5. Verificar containers criados com docker ps

 [root@rfnc init.d]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

f5cc741db4c5 ubuntu:14.10 "/bin/bash" 13 minutes ago Up 13 minutes happy_meninsky

 

 Voltar para o container se você saiu do mesmo com crtl + p + q, use sempre o CONTAINER ID

 docker attach e640e827e40

 [root@localhost keys]# docker attach e640e827e407

root@e640e827e407:/#

 

 Agora não se esqueça, se você saiu do container com ctrl + d, somente um attach não irá funcionar, como você pode ver abaixo

 root@ubuntu:/# docker attach 7eb3b08dc896

You cannot attach to a stopped container, start it first

 

 Portanto, inicie o container primeiro, use sempre o CONTAINER ID

 root@ubuntu:/# docker start 7eb3b08dc896

7eb3b08dc896

 

Agora attache o container, use sempre o CONTAINER ID

 root@ubuntu:/# docker attach 7eb3b08dc896

root@7eb3b08dc896:/#

 

 6. Ver mudanças que foram feitas no container com o comando diff, use sempre o CONTAINER ID

 docker diff e640e827e407

 [root@localhost keys]# docker diff e640e827e407

C /root

A /root/.bash_history

C /var

C /var/lib

C /var/lib/apt

C /var/lib/apt/lists

A /var/lib/apt/lists/auxfiles

A /var/lib/apt/lists/lock

A /var/lib/apt/lists/partial

 

 7. Depois que você fez mudanças no seu container, seria interessante e de seu agrado comitar a imagem do container para que essas mudanças de tornem duradouras no seu container, para isso use o comando commit ( o nome ao qual voc~e deve dar ao seu container comitado, sempre deve ser em letras minusculas , como você ve no exemplo abaixo, use sempre o CONTAINER ID

 [root@localhost keys]# docker commit ad09676a3247 debian

sha256:e84c1542c6de918daec2f06e42bb304f8afcd2ccbfd062aaab0b92114c9bb4b5

 

 Ver images comitadas com o comando docker images

 [root@localhost keys]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

debian latest e84c1542c6de 22 seconds ago 114MB

<none> <none> 404e6c9c2e16 11 hours ago 201MB

<none> <none> 43a9f9930dad 12 hours ago 72.9MB

rafael latest 29ae1c5589d1 13 hours ago 137MB

fedora latest b9ef4f2d3b60 5 days ago 201MB

 

 8. Você pode por algum motivo querer parar um container, para isso use o comando abaixo, use sempre o CONTAINER ID

 docker stop ad09676a3247

 [root@localhost keys]# docker stop ad09676a3247

ad09676a3247

 

 E como você viu anteriormente para iniciar um container, use o seguinte comando, use sempre o CONTAINER ID

 docker start ad09676a3247

 [root@localhost keys]# docker start ad09676a3247

ad09676a3247

 

 9. Você pode por algum motivo querer executar comandos fora do container, para isso use o comando, use sempre o CONTAINER ID

 docker exec ad09676a3247 df -k

 [root@localhost keys]# docker exec ad09676a3247 df -k

Filesystem 1K-blocks Used Available Use% Mounted on

overlay 39483560 4491004 34992556 12% /

tmpfs 65536 0 65536 0% /dev

shm 65536 0 65536 0% /dev/shm

/dev/sda5 39483560 4491004 34992556 12% /etc/hosts

tmpfs 999016 0 999016 0% /proc/asound

tmpfs 999016 0 999016 0% /proc/acpi

tmpfs 999016 0 999016 0% /proc/scsi

tmpfs 999016 0 999016 0% /sys/firmware

 

 10. Você pode por algum motivo querer ver informações detalhadas do container, use o comando a seguir, use sempre o CONTAINER ID

 docker inspect ad09676a3247

 [root@localhost keys]# docker inspect ad09676a3247

[

  {

  "Id": "ad09676a32474050413f92d6ca1744a820365197bec73d7d405b205e7d9ac60a",

  "Created": "2020-10-08T12:10:48.778724562Z",

  "Path": "/bin/bash",

  "Args": [],

  "State": {

  "Status": "running",

  "Running": true,

 

 Você pode por algum motivo querer ver informações estatisticas do container com o comando abaixo, use sempre o CONTAINER ID

 docker stats ad09676a3247

 [root@localhost keys]# docker stats ad09676a3247

CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS

ad09676a3247 clever_lehmann 0.00% 0B / 0B 0.00% 1.09kB / 0B 0B / 0B 0

CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS

ad09676a3247 clever_lehmann 0.00% 0B / 0B 0.00% 1.09kB / 0B 0B / 0B 0

CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS

 

 Você pode por algum motivo querer ver os processos que estão rodando no container com o comando abaixo, use sempre o CONTAINER ID

 root@ubuntu:/# docker top 7eb3b08dc896

UID PID PPID C STIME TTY TIME CMD

root 3816 3796 0 17:50 pts/0 00:00:00 bash

 

 11. Você pode por algum motivo querer remover um container que está ativo usando o CONTAINER ID ( cheque usando o docker ps )

 docker rm -f 384ca89d0c63

 Remover container que está ativo usando o IMAGE ID ( cheque usando o docker images )

 docker rmi -f 29ae1c5589d1


 12.Verificar a memória do container com o comando inspect, use sempre o CONTAINER ID

 docker inspect a58a569b4a58 | grep -i mem

  "Memory": 0,

  "CpusetMems": "",

  "KernelMemory": 0,

  "KernelMemoryTCP": 0,

  "MemoryReservation": 0,

  "MemorySwap": 0,

  "MemorySwappiness": null,

 

 Criar container com 512 Megas de memória limitada, depois cheque com o inspect, use sempre o CONTAINER ID

 docker run -ti -m 512M debian /bin/bash

 [root@localhost ~]# docker inspect 62fbfca22bd1 | grep -i mem

  "Memory": 536870912,

  "CpusetMems": "",

  "KernelMemory": 0,

  "KernelMemoryTCP": 0,

  "MemoryReservation": 0,

  "MemorySwap": -1,

  "MemorySwappiness": null,

 

 Criar container com capacidade de CPU limitada

 docker run -ti --cpu-shares 1024 debian /bin/bash ( Pode usar até 50% da CPU do seu host )

 docker run -ti --cpu-shares 512 debian /bin/bash ( Pode usar até 25% da CPU do seu host )

 

 Verificar CPU alocada no container, use sempre o CONTAINER ID

 docker inspect 6dcaa7b69f3a | grep -i cpu

 [root@localhost ~]# docker inspect 6dcaa7b69f3a | grep -i cpu

  "CpuShares": 1024,

  "NanoCpus": 0,

  "CpuPeriod": 0,

  "CpuQuota": 0,

  "CpuRealtimePeriod": 0,

  "CpuRealtimeRuntime": 0,

  "CpusetCpus": "",

  "CpusetMems": "",

  "CpuCount": 0,

  "CpuPercent": 0,

 

 Criar container com capacidade de swap limitada, depois cheque com o inspect, use sempre o CONTAINER ID

 [root@localhost ~]# docker run -ti --memory=20m --memory-swap=20m debian /bin/bash

 root@ubuntu:~# docker inspect 4fd2c24a2fc5 | grep -i swap

  "MemorySwap": 20971520,

  "MemorySwappiness": null,

 

 Aumentar ou diminuir recursos no container se assim você o desejar, veja o output abaixo com a memória total alocada

 root@b3dfbf40f3b0:/# [root@localhost ~]# docker inspect b3dfbf40f3b0 | grep -i mem

  "Memory": 268435456,

  "CpusetMems": "",

  "KernelMemory": 0,

  "KernelMemoryTCP": 0,

  "MemoryReservation": 0,

  "MemorySwap": -1,

  "MemorySwappiness": null,

 

 Agora mude a alocação de memória com o comando update, depois cheque com novo valor com o comando inspect

 [root@localhost ~]# docker update -m 512m b3dfbf40f3b0 ( use sempre o CONTAINER ID )

b3dfbf40f3b0

 [root@localhost ~]# docker inspect b3dfbf40f3b0 | grep -i mem

  "Memory": 536870912,

  "CpusetMems": "",

  "KernelMemory": 0,

  "KernelMemoryTCP": 0,

  "MemoryReservation": 0,

  "MemorySwap": -1,

  "MemorySwappiness": null,

 

 13. Fazer o update pra mais nova versão do docker ( No caso abaixo como o docker já estava na última versão, nenhum update foi feito

 [root@localhost ~]# curl -fsSL https://get.docker.com/ | sh

# Executing docker install script, commit: 26ff363bcf3b3f5a00498ac43694bf1c7d9ce16c

Warning: the "docker" command appears to already exist on this system.

 If you already have Docker installed, this script can cause trouble, which is

why we're displaying this warning and provide the opportunity to cancel the

installation.

 If you installed the current Docker package using this script and are using it

again to update Docker, you can safely ignore this message.

 You may press Ctrl+C now to abort this script.

+ sleep 20

+ sh -c 'dnf install -y -q dnf-plugins-core'

 

 

 

Criando imagens simples de container com Dockerfiles

 

 14. Criar imagens simples de container com Dockerfiles


 Crie o diretório abaixo

 mkdir -p Dockerfile/apache

 Crie o arquivo chamado Dockerfile e inclua essas informações nele

 FROM ubuntu:14.04

MAINTAINER rfnc.com.br

RUN apt-get update && apt-get install -y apache2 && apt-get clean


 Faça o build da imagem com o seguinte comando

 docker build -t rfnc/apache:1.0 .


 Cheque se a imagem foi criada

 root@ubuntu:~/apache# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

rfnc/apache 1.0 146941fa2166 14 minutes ago 221MB

ubuntu 14.04 df043b4f0cf1 3 weeks ago 197MB

debian latest f6dcff9b59af 4 weeks ago 114MB

ubuntu 19.10 2f6c85efea61 3 months ago 72.9MB

ubuntu 14.10 a8a2ba3ce1a3 5 years ago 194MB

 

Inicie o container

 docker run -it rfnc/apache:1.0 /bin/bash

 

Inicie o apache

 root@f0ab9fc4ac1f:/# /etc/init.d/apache2 start

 * Starting web server apache2

 

 Cheque se o apache está iniciado

 root@f0ab9fc4ac1f:/# ps -ef

UID PID PPID C STIME TTY TIME CMD

root 1 0 0 15:55 pts/0 00:00:00 /bin/bash

root 45 1 0 15:56 ? 00:00:00 /usr/sbin/apache2 -k start

www-data 48 45 0 15:56 ? 00:00:00 /usr/sbin/apache2 -k start

www-data 49 45 0 15:56 ? 00:00:00 /usr/sbin/apache2 -k start

root 107 1 0 15:56 pts/0 00:00:00 ps -ef

 

 Verifique se a porta 80 está disponivel com netstat

 root@f0ab9fc4ac1f:/# netstat -atunp

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 45/apache2

 

 Verifique se o IP fecha conexão com a porta 80

 root@ubuntu:~# telnet 172.17.0.3 80

Trying 172.17.0.3...

Connected to 172.17.0.3.

Escape character is '^]'.

 

 Verifique o IP do container

 root@f0ab9fc4ac1f:/# ifconfig -a

 eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:03

  inet addr:172.17.0.3 Bcast:172.17.255.255 Mask:255.255.0.0

  UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

  RX packets:29 errors:0 dropped:0 overruns:0 frame:0

  TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

  collisions:0 txqueuelen:0

  RX bytes:3335 (3.3 KB) TX bytes:0 (0.0 B)

 

  lo Link encap:Local Loopback

  inet addr:127.0.0.1 Mask:255.0.0.0

  UP LOOPBACK RUNNING MTU:65536 Metric:1

  RX packets:0 errors:0 dropped:0 overruns:0 frame:0

  TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

  collisions:0 txqueuelen:1000

  RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

 

 Saia do container e use o o curl no shell para verificar se a página está disponível

 root@ubuntu:~# curl 172.17.0.3

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or g/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

  <!--

  Modified from the Debian original for Ubuntu

  Last updated: 2014-03-19

  See: https://launchpad.net/bugs/1288690

 

 15. Criar volumes no container, use o comando abaixo

 root@ubuntu:~# docker run -ti -v /volume ubuntu /bin/bash

 

Verifique se o volume foi criado no container

 root@fcc2aafacde2:/# df -k

Filesystem 1K-blocks Used Available Use% Mounted on

overlay 30313412 8811472 19939060 31% /

tmpfs 65536 0 65536 0% /dev

tmpfs 1003460 0 1003460 0% /sys/fs/cgroup

shm 65536 0 65536 0% /dev/shm

/dev/sda5 30313412 8811472 19939060 31% /volume

tmpfs 1003460 0 1003460 0% /proc/asound

tmpfs 1003460 0 1003460 0% /proc/acpi

tmpfs 1003460 0 1003460 0% /proc/scsi

tmpfs 1003460 0 1003460 0% /sys/firmware

 

 Verificar no host onde o volume do container está alocado

 docker inspect -f {{.Mounts}} fcc2aafacde2

 root@ubuntu:~# docker inspect -f {{.Mounts}} fcc2aafacde2

[{volume 7ca63f0148523c27c9a6f32bc14a33096afe8e3c6bf918e4e0610170775ab039 /var/lib/docker/volumes/7ca63f0148523c27c9a6f32bc14a33096afe8e3c6bf918e4e0610170775ab039/_data /volume local true }]

 

 Criar um ponto de montagem no host e mapea lo para o container, para isso crie um diretório no host

 root@ubuntu:~# mkdir /root/primeiro_dockerfile

 

 Mapeie o diretório na criação do container e de o nome do ponto de montagem de sua prefêrencia no container

 root@ubuntu:~# docker run -ti -v /root/primeiro_dockerfile:/volume debian


 Verifique se o ponto de montagem foi mapeado no container

 root@7eb3b08dc896:/# df -k

Filesystem 1K-blocks Used Available Use% Mounted on

overlay 30313412 8811628 19938904 31% /

tmpfs 65536 0 65536 0% /dev

tmpfs 1003460 0 1003460 0% /sys/fs/cgroup

shm 65536 0 65536 0% /dev/shm

/dev/sda5 30313412 8811628 19938904 31% /volume

tmpfs 1003460 0 1003460 0% /proc/asound

tmpfs 1003460 0 1003460 0% /proc/acpi

tmpfs 1003460 0 1003460 0% /proc/scsi

tmpfs 1003460 0 1003460 0% /sys/firmware

 

 Para se certifcar que o mapeamento está funcionando, volte no host e crie um arquivo qualquer no diretório ao qual foi mapeado

 root@ubuntu:~# cd /root/primeiro_dockerfile

 root@ubuntu:~/primeiro_dockerfile# touch Arquivo

 root@ubuntu:~/primeiro_dockerfile# ls -la

total 8

drwxr-xr-x 2 root root 4096 Oct 8 17:14 .

drwx------ 7 root root 4096 Oct 8 17:06 ..

-rw-r--r-- 1 root root 0 Oct 8 17:14 Arquivo

 

Se certifique no container que o arquivo criado est´disponível no ponto de montagem ao qual você criou e mapeou

 root@ubuntu:~/primeiro_dockerfile# docker attach 7eb3b08dc896

 root@7eb3b08dc896:/volume# ls -la

total 8

drwxr-xr-x 2 root root 4096 Oct 9 00:14 .

drwxr-xr-x 1 root root 4096 Oct 9 00:07 ..

-rw-r--r-- 1 root root 0 Oct 9 00:14 Arquivo

 

 Verifique pelo inspect se o mapeamento está mesmo correto

 root@ubuntu:~/primeiro_dockerfile# docker inspect -f {{.Mounts}} 7eb3b08dc896

[{bind /root/primeiro_dockerfile /volume true rprivate}]