Começar com o docker

Olá, há algum tempo que quero fazer este artigo sobre como começar a trabalhar com o docker.

Agradecemos que partilhe este artigo nas suas redes sociais e/ou deixe um comentário.

Vamos começar!

1- O que é o docker?

Há pessoas que consideram o docker um sistema de virtualização como a KVM, Vmware, etc. Isto é falso. Docker é um sistema de contentores como o LXC, mas mais avançado. Tem uma melhor gestão das instâncias levantadas e dispõe de um sistema de gestão de modelos.

Por outras palavras, o Docker é um sistema para abstrair a aplicação e tornar o seu ecossistema independente do sistema operativo. Isto significa que tudo configurado dentro de um contentor funciona correctamente em qualquer sistema operativo com o docker instalado.

2- Quais são as vantagens?

As vantagens são várias, dependendo daquilo a que o comparamos.

Se o compararmos com aplicações em execução directa num sistema, a principal vantagem é a compatibilidade, uma vez que o que foi testado no contentor, no mesmo contentor num outro sistema funcionará da mesma forma.

Se nos referirmos à vantagem sobre a utilização de uma virtualização completa, a principal vantagem é que cada contentor utiliza praticamente a memória da aplicação, enquanto que uma instância de KVM, Vmware, etc. também requer consumo de memória para o kernel do sistema virtual, etc.

Outra vantagem é que se pode executar aplicações como se tivesse um sistema diferente. Ou seja, no sistema anfitrião temos um sistema CentOS por exemplo e no contentor podemos ter, Free BSD ou Debian, ou Arch ou qualquer outro. Assim, se funcionar melhor num sistema do que no anfitrião, podemos utilizar esta vantagem.

3- Como posso utilizá-lo?

Pode ser utilizado para criar ambientes de desenvolvimento e depois carregar o contentor para a produção (ter em mente que antes de colocar qualquer coisa em produção com o docker, o hospedeiro e o contentor devem ser assegurados para evitar problemas). Desta forma, podemos evitar problemas nas implementações de códigos.

A primeira coisa a fazer é instalar o docker. No CentOS é feito da seguinte forma: #yum install docker -y

Instalacion docker CentOS

Em debian e derivados: #apt install docker.io

Após a sua instalação, se for um sistema moderno, baseado no systemd, elevamos o serviço: #systemctl start docker

Se não tiver systemd, corra #service docker start

4- Comandos úteis

Iniciar contentores (mesmo que as imagens não tenham sido descarregadas):

docker run -i -t -d   IMAGEN:VERSION

Onde a imagem e a versão podem ser especificadas como se segue:

docker run -i -t -d   centos:latest

Podemos definir um nome para o recipiente com –name NOME

[root@localhost ~]# docker run -i -t -d --name testing debian:9
Unable to find image 'debian:9' locally
Trying to pull repository docker.io/library/debian ... 
9: Pulling from docker.io/library/debian
54f7e8ac135a: Pull complete 
Digest: sha256:df6ebd5e9c87d0d7381360209f3a05c62981b5c2a3ec94228da4082ba07c4f05
Status: Downloaded newer image for docker.io/debian:9
b6f568b78470b417b8a141f4b7c5686420df7cc1050402239ab1847310a67116
[root@localhost ~]# 

É possível especificar um porto a ser encaminhado da máquina anfitriã para o contentor:

docker run -i -t -d -p PUERTO_EXTERIOR:INTERIOR IMAGEN

Ou também pode ser feito especificando o ip do hospedeiro:

docker run -i -t -d -p IP_ANFITRION:PUERTO_EXTERIOR:INTERIOR IMAGEN

Acrescentando “–restart always” à equação, consegue-se que sempre que o recipiente é parado, é reiniciado. Mesmo no recomeço do programa de acolhimento:

docker run -i -t -d -p PUERTO_EXTERIOR:INTERIOR --restart always IMAGEN

Criar um recipiente e não o levantar imediatamente:

docker create -i -t centos:6 /bin/bash

Descarregar imagens e geri-las

Para descarregar uma imagem e tê-la disponível no momento de levantar um novo contentor sem ter de esperar que seja descarregada do docker-hub, só temos de fazer o seguinte:

docker pull IMAGEN:VERSION

Ou também:

docker pull IMAGEN

Por exemplo:

#Eligiendo version
docker pull centos:7
#o seleccionando la ultima disponible
docker pull centos:latest

Também podemos ver as imagens disponíveis localmente ao correr:

docker images

Por exemplo:

ger@portatil$ sudo docker images
[sudo] contraseña para ger: 
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
debian                                      9                   4879790bd60d        9 days ago          101MB
ubuntu                                      18.04               ea4c82dcd15a        5 weeks ago         85.8MB
centos                                      6                   0cbf37812bff        6 weeks ago         194MB
centos                                      7                   75835a67d134        6 weeks ago         200MB
ubuntu                                      17.04               fe1cc5b91830        11 months ago       95.6MB

Podemos procurar por imagens disponíveis em docker hub:

ger@portatil$ sudo docker search ubuntu
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
ubuntu                                                 Ubuntu is a Debian-based Linux operating sys…   8793                [OK]                
dorowu/ubuntu-desktop-lxde-vnc                         Ubuntu with openssh-server and NoVNC            244                                     [OK]
rastasheep/ubuntu-sshd                                 Dockerized SSH service, built on top of offi…   184                                     [OK]
consol/ubuntu-xfce-vnc                                 Ubuntu container with "headless" VNC session…   136                                     [OK]
ansible/ubuntu14.04-ansible                            Ubuntu 14.04 LTS with ansible                   95                                      [OK]
ubuntu-upstart                                         Upstart is an event-based replacement for th…   92                  [OK]                
neurodebian                                            NeuroDebian provides neuroscience research s…   55                  [OK]                
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5   ubuntu-16-nginx-php-phpmyadmin-mysql-5          47                                      [OK]
ubuntu-debootstrap                                     debootstrap --variant=minbase --components=m…   40                  [OK]                
nuagebec/ubuntu                                        Simple always updated Ubuntu docker images w…   23                                      [OK]
tutum/ubuntu                                           Simple Ubuntu docker images with SSH access     18                                      
i386/ubuntu                                            Ubuntu is a Debian-based Linux operating sys…   15                                      

 

Podemos importar uma imagem personalizada: docker import /path/to/exampleimage.tgz:

[root@localhost ~]# docker import /tmp/debian-personalizado.tgz
[root@localhost ~]#

Ver o estado dos contentores e os seus dados

Para ver os contentores criados e o seu estado actual, só temos de executar:

docker ps -a

Por exemplo:

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
b6f568b78470        debian:9            "bash"              About a minute ago   Up About a minute                       testing
[root@localhost ~]# 

Para montar uma máquina só temos de correr docker start ID-DO-CONTENTOR el ID lo podemos encontrar ejecutando docker ps -a :

[root@localhost ~]# docker start b6f568b78470
b6f568b78470
[root@localhost ~]#

 

Gestão de contentores

Para parar um recipiente docker stop id-do-container:

[root@localhost ~]# docker stop b6f568b78470
b6f568b78470
[root@localhost ~]#

E para apagar um recipiente docker stop id-do-container:

[root@localhost ~]# docker rm b6f568b78470
b6f568b78470
[root@localhost ~]#

Podemos fazer uma cópia de um recipiente correndo: docker export -o filesystem.tar ID_DO_CONTAINER:

[root@localhost ~]# docker export -o filesystem.tar b6f568b78470
[root@localhost ~]#

 

Podemos aceder a uma consola de contentores: docker exec -it “id of running container” bash:

[root@localhost ~]# docker exec -it b6f568b78470 bash
[root@b6f568b78470 ~]#

 

 

Se estiver interessado em aprender Docker, pode adquirir o nosso livro aqui.

Docker para novatosDocker para novatos

 

E é tudo sobre como começar com Docker, num próximo post, falaremos sobre como gerir Docker com Python.

Lembre-se de que se gostou deste post, por favor partilhe-o nas suas redes sociais e/ou comente sobre o post.

Até breve!

Deixe uma resposta