Docker_logo

Docker

Posted by

Hoje vamos falar um pouco sobre Docker. Docker e uma tecnologia de virtualização que ao invés de usar maquinas virtuais usa containers.

Existem alguns motores para execução de containers, os mais famosos no Linux são: Docker, LXC, Kata, CRI-O e RKT, pra mencionar alguns.

Containers são uma unidade de software que inclui softwares específicos, dependências e bibliotecas necessárias para que o mesmo possa ser executado. Containers são geralmente empacotados e disponibilizados/publicados em repositórios locais ou públicos.

Os containers possuem como vantagem sobre as maquinas virtuais o facto de serem empacotados o software desejado, suas dependências, consumem menos recursos do que maquinas virtuais e possuem uma camada de isolamento que faz a separação do container com o host que o executa.

Os containers requerem menos recursos para a sua execução porque eles nao necessitam de um kernel para a sua execucao, eles utilizam o kernel do seu host, tirando assim uma carga de processamento adicional para a execução de um determinado software.

Comparação entre container e maquina virtual. Fonte Docker.com

Este artigo não tem como objectivo explicar em detalhes o funcionamento interno dos containers, aqui será feita somente uma breve apresentação para que o leitor possa começar a usar os containers rapidamente e possa testar certos softwares sem precisar passar pelo complicado processo de instalação de um determinado software e suas dependências.

Vamos agora passar a parte practica, vamos installar o docker, executar um container de teste, executar um container com o WordPress instalado e por fim executar uma shell dentro do container para verificar os servicos em execucao dentro do container.

Instalar o Docker

A manera mais facil de installar o docker no Ubuntu, Debian, CentOS ou Fedora e com o script disponível no get.docker.com. Todos os commandos foram executados com privilegios de administrador, isso exige o login com o user “root” ou o uso de “sudo”.

# curl -fsSL https://get.docker.com/ | sh

Este script vai fazer algumas modificações no sistema, as principais são, instalar as dependências necessárias, acrescentar o repositório e proceder a instalação do Docker no sistema.

Depois de terminada a instalação devemos incluir o nosso utilizador ao grupo “docker” para poder executar os comandados sem precisar de direitos de administrador.

# usermod -aG docker <username>

Testar instalação do Docker

Para testar a instalação do Docker vamos agora executar um container básico que própria docker disponibiliza para testes.

$ docker run hello-world

Caso a execução do container seja bem sucedida devera ver na tela um texto como o apresentado abaixo.

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Caso tenha recebido algum erro ou algum texto diferente do apresentado acima então ocorreu algum problema durante a instalação, ou execução do container.

Agora vamos examinar o que aconteceu durante a execução do comando anterior.

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete 
Digest: sha256:4fe721ccc2e8dc7362278a29dc660d833570ec2682f4e4194f4ee23e415e1064
Status: Downloaded newer image for hello-world:latest

No comando acima podemos ver os passos executados pelo docker para chegar a execução do container.

Primeiro o docker procurou pela imagem de container chamada de “hello-world” na maquina local para executar a mesma. Como a mesma não existe localmente na maquina, o docker de seguida procurou pela imagem com o nome especificado no repositório online “DockerHub” e achou uma imagem, ele então procedeu a transferência da mesma para a maquina local para poder executar o container especificado.

Após a transferência do container terminar, o docker passa a execução do container conforme especificado no comando anterior.

Executar WordPress

Vamos agora testar a execução de um container com o WordPress installado. O WordPress possui uma imagem oficial no repositório “DockerHub”, nos vamos usar esta imagem para executar o nosso container, nesta imagem já estão instalados o WordPress, Mysql e Apache, os 3 principais componentes para a execução de um website WordPress.

Desta ver vamos executar a imagem em dois passos, primeiro vamos fazer a transferência da imagem, examinar a mesma e somente depois vamos executar o container.

Para transferir a imagem vamos usar o commando “pull”.

$ docker pull wordpress

Este comando vai transferir todas as imagens necessárias para a execução do container. As imagens de containers permitem que uma imagem seja “pai” de outra, isso permite evitar redundância no processo de criação de imagens, por exemplo, caso uma imagem ja possua instalados o APache e o Mysql, entao a imagem do WordPress pode simplesmente estender essa imagem e adicionar o WordPress e os comandos necessários para a execução do mesmo, evitando assim redundância na criação de imagens.

Para examinarmos o conteúdo da imagem que acabamos de transferir podemos usar os comandos “inspect” e “history” e especificar o nome da imagem.

$ docker image inspect wordpress
$ docker image history wordpress

Com os comandos acima podemos ver alguns dos comandos executados dentro do container e aprender um pouco sobre como as imagens são compostas.

Agora vamos executar o container WordPress pra testarmos o software.

$ docker run --detached --name wordpress --publish 80:80 wordpress

No comando acima nos especificamos ao docker que ele deve executar um container com as seguintes especificações, nome “wordpress” (caso um nome não seja especificado o docker ira atribuir um nome aleatório para o container), o container deve ser executado em modo “detached” o que significa que ele deve se manter em execução no background e por ultimo o argumento “publish” serve para indincar que a porta 80 do container devera ser mapeada para porta 80 do host, isso nos permite que usando o IP do host na porta 80 nos possamos acessar a instalação do WordPress.

Podemos verificar quais containers estão em execução com o comando abaixo.

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
bdb358ac2a60        wordpress           "docker-entrypoint.s…"   6 seconds ago       Up 4 seconds        0.0.0.0:80->80/tcp   wordpress

Neste momento podemos acessar o IP do host, especificar a porta 80 e proceder a instalação do WordPress.

Como podemos ver no output do comando acima, o container esta em execução. Para pararmos a execução do mesmo podemos usar o comando “stop”.

$ docker stop wordpress

Para iniciarmos novamente um container que se encontra parado podemos usar o comando “start”.

$ docker start wordpress

Para acessarmos uma shell dentro do container podemos usar o comando “exec”.

$ docker exec -it wordpress /bin/bash
root@bdb358ac2a60:/var/www/html# ps aux

Conforme podemos ver no output do comando acima, o comando anterior nos levou para uma shell dentro do container com o utilizador “root”.

Para vermos os logs de um determinado container podemos usar o comando “logs”.

$ docker logs wordpress

Para removermos uma imagem ou um container podermos usar os comandos abaixo.

$ docker rm wordpress
$ docker image rm wordpress

Os comandos acima servem para remover primeiro o cotainer de nome wordpress e de seguida a imagem com o mesmo nome.

Este artigo serviu para mostrar os comandos básicos do docker e mostrar como este software pode nos ajudar a testar softwares de forma rápida sem precisar instalar varias dependências na maquina e configurar várias dependências.

Espero que este rápido artigo tenha sido útil. Até a próxima.

Leave a Reply

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

This site uses Akismet to reduce spam. Learn how your comment data is processed.