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.

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.