Docker

Comandos básicos.

Rodar comandos:

lucas@LucasOliveira:~$ docker run

Rodando Imagens do Site Docker

No site https://hub.docker.com/, existem muitos modelos de imagens para replicar, para realizar um primeiro teste vamos criar um docker com o sistema operacional Linux. No site (https://hub.docker.com/_/ubuntu), é possível achar a imagem e rodar este container na linha de comando, através do comando abaixo:

lucas@LucasOliveira:~$ docker run ubuntu

Este comando irá buscar no docker hub, baixar a imagem, e executar o container.

Caso queira somante baixar a imagem o comando é:

lucas@LucasOliveira:~$ docker pull ubuntu

Para saber os containers que estão em execução é possível realizar o comando:

lucas@LucasOliveira:~$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Apesar de ter executado o comando para executar o container com o ubuntu, não existia nenhuma atividade sendo executada dentro deste container, desta maneira o container executou e já fechou.

Agora para saber os containers que estão em execução e os que já foram executados, é possível rodar o comando:

lucas@LucasOliveira:~$ docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                      PORTS     NAMES
192ebedcac7d   ubuntu        "/bin/bash"   18 seconds ago   Exited (0) 16 seconds ago             charming_visvesvaraya
53aed12504af   hello-world   "/hello"      20 hours ago     Exited (0) 20 hours ago               friendly_brattain

Caso queira executar o comando e o container não encerre mesmo sem nenhuma atividade rodando, podemos usar o comando:

lucas@LucasOliveira:~$ docker run ubunto sleep 1d

desta maneira o container vai ficar aguardando 1 dia para encerrar, mesmo sem atividades em aberto.

Caso queria encerrar a execução de um container, podemos executar o comando stop passando o ID do container ou o nome do container como mostra o comando:

lucas@LucasOliveira:~$ docker stop 192ebedcac7d

Para retomar a execução do comando é start como mostra o comando abaixo:

lucas@LucasOliveira:~$ docker start 192ebedcac7d

Existe um comando, também dentro desse universo todo do Docker, que é o docker exec. Eu posso simplesmente falar que eu posso executar algum comando dentro do meu container em modo interativo.

lucas@LucasOliveira:~$ docker exec -t 192ebedcac7d bash
root@192ebedcac7d:/#

Mapeando Portas

Para fazer este teste vamos utilizar uma imagem chamada static-site (https://hub.docker.com/r/dockersamples/static-site), onde simula uma aplicação web cuja saída é possível visualizar através do navegador.

Para executar vamos executar o static-site com a flag " -d " para que o terminal não trave e execute o container em segundo plano, como mostra o comando:

lucas@LucasOliveira:~$ docker run -d dockersamples/static-site

Desta maneira, verificando os containers que estão em execução, podemos verificar em qual porta esta disponível a aplicação:

lucas@LucasOliveira:~$ docker ps
CONTAINER ID IMAGE                     COMMAND                CREATED        STATUS        PORTS           NAMES
45493a7b660d dockersamples/static-site "/bin/sh -c 'cd /usr…" 40 seconds ago Up 39 seconds 80/tcp, 443/tcp ecstatic_mclaren

Agora quando adicionamos o " -P " (Maiúsculo), este sinalizador mapeia automaticamente as portas dentro do contêiner para portas disponíveis no host, ou seja, ele faz um mapeamento automático das portas entre o host e o contêiner. como mostra no comando abaixo:

lucas@LucasOliveira:~$ docker run -d -P dockersamples/static-site
0b205c3fc75c9733be385f4e2130f05ae45910168e19321d7866730bdc18f48d

desta forma conseguimos ver em qual porta está rodando a aplicação web, que neste caso é na porta 32769, onde consultamos utilizando o comando "docker port" como podemos ver no comando abaixo:

lucas@LucasOliveira:~$ docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                                           NAMES
0b205c3fc75c   dockersamples/static-site   "/bin/sh -c 'cd /usr…"   16 seconds ago   Up 15 seconds   0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp   fervent_kalam
lucas@LucasOliveira:~$ docker port 0b205c3fc75c
80/tcp -> 0.0.0.0:32769
443/tcp -> 0.0.0.0:32768

Caso queria deixar uma porta expecifica, podemos utilizar o comando com o " -p " (Minúsculo), informando que o host 8080 vai refletir na porta 80 do container, como mostra o comando abaixo:

lucas@LucasOliveira:~$ docker run -d -p 8080:80 dockersamples/static-site
d55f4ee8451c671e608d1416f91bebb22810d64eac4f31c30d9face4f87a9021

Persistindo dados no container

Utilizando bind mounts.

Bind Mounts vai fazer basicamente o bind, uma ligação entre um ponto de montagem do nosso sistema operacional e algum diretório dentro do container.Eu posso informar que quando esse container for criado e executado eu quero que as informações persistidas em determinado diretório dentro dele sejam persistidas em algum diretório na minha máquina local mesmo, no meu host. Veja o comando como fica:

PS C:\Users\lucas\OneDrive\Desktop\Repositorio> docker run -it -v C:\Users\lucas\OneDrive\Desktop\Repositorio:/app ubuntu bash

Utilizando volume.

Então conseguimos gerenciar esses volumes agora através da interface do Docker. Não ficamos 100% dependentes do nosso sistema de arquivos do nosso sistema operacional. E sim o Docker vai gerenciar isso para nós agora. Podemos utilizar o comando abaixo para consultar os volumes existentes:

PS C:\Users\lucas\OneDrive\Desktop\Repositorio> docker volume ls

E para criar um novo volume vamos utilizar o comando:

PS C:\Users\lucas\OneDrive\Desktop\Repositorio> docker volume create nome-do-volume

O volume podemos utilizar para mapear uma pasta no container com o comando que está abaixo:

PS C:\Users\lucas\OneDrive\Desktop\Repositorio> docker run -it -v nome-do-volume:/app ubuntu bash