Olá Pessoal!

Hoje vamos fazer algo um pouco mais avançado no Docker, aprenderemos um pouco mais sobre os comandos no Docker, e como podem nos ajudar. Antes vamos definir um plano de ação: Temos um container com Apache dentro, precisamos saber:

1 – Como saber quais containers possuo?

2 – Quais foram os últimos logs desse container?

3 – Em que porta está executando o container?

4 – Que comando tenho que executar para parar e iniciar o container?

5 – Como sei que o container está no ar?

FÁCIL:

Para criar/iniciar um container você pode utilizar o seguinte comando:

docker run -d -p 80:80 httpd

Esse comando fará com que seja iniciado um container utilizando uma imagem pronta do Apache, caso a imagem não seja encontrada localmente, o próprio Docker realizará o download dessa imagem através de seus repositórios oficiais. Ele atribuirá a porta 80 do host para o container, ou seja, quando acesso a porta 80 do host, o que será apresentado é o site que encontra-se dentro do container.

Podemos ainda, mapear uma pasta do host para dentro do container, isso fará com que o container compartilhe com o host uma determinada pasta, veja o comando:

docker run -d -p 80:80 -v /var/www/html:/var/www/html httpd

Por padrão, a pasta mapeada recebe permissão de leitura e escrita, mas é possível fazer com que esse mapeamento seja somente leitura, para isso basta adicionar :ro no final, veja:

docker run -d -p 80:80 -v /var/www/html:/var/www/html:ro httpd

Isso fará com que o container não possa adicionar ou escrever dentro da pasta compartilhada. Agora voltando ao nosso plano de ação, visto que já sabemos como iniciar um container.

1 – Como saber quais containers possuo?

Você pode executar o comando: docker ps -a, isso fará com que seja listado todos os containers que você possui no host onde está sendo executado o comando (ou onde está apontando o Docker Client)

2 – Quais foram os últimos logs desse container?

Na listagem do comando acima, poderá ser visto o id do container, tendo essa informação, basta executar o comando: docker logs containerid . Esse comando retornará na tela os últimos eventos ocorridos dentro do container (mais para frente veremos a diferença nos outputs de logs para um container)

3 – Em que porta está executando o container?

A forma mais simples de saber isso é executando o comando: docker ps, esse comando retornará várias informações dos containers que estão running no momento, entre essas informações podemos capturar em qual porta do host o container está ‘ouvindo’.

4 – Que comando tenho que executar para parar e iniciar o container?

Isso é simples, docker stop e docker start, há opções mais drásticas como docker kill, mas esse último é recomendado apenas em último caso, pois o mesmo fará com que o container seja parado de forma abrupta, podendo causar o corrompimento do filesystem do mesmo.

5 – Como sei que o container está no ar?

O comando docker ps retornará apenas os containers que estão ativos, é claro que apenas isso não quer dizer que sua aplicação/ambiente está funcionando corretamente, um forma de testar isso é acessando seu ambiente de fora, por exemplo, no comando que executamos acima: docker run -d -p 80:80 httpd o mesmo fará com que seja alocado a porta 80 do host para o container, isso quer dizer que caso eu acesse: http://ipdohost estarei acessando na verdade a porta 80 que está dedicada ao container, com isso estarei acessando o site que encontra-se dentro do container, o site acessou? Perfeito, seu container está no ar.

Espero que essas dicas o ajudem a entender um pouco mais o funcionamento de um container, essas são algumas tarefas administrativas que possivelmente serão as mais utilizadas durante o seu convívio com o Docker. Dúvidas, sugestões? nos mande um mensagem e vamos conversando.

Grande Abraço!

Entusiasta Open Source, seu principal foco é ir atrás de ideias novas e torna-las realidade através de soluções simples e eficientes, o menos é mais, e o dividir é multiplicar.
  • Onilson Oliveira

    Cristiano é possível por várias aplicações em containers, sendo que essas aplicações usam portas padrão como 80,8080? Tentei subir containers com aplicações mas me retornou o alerta de que as portas 80 e 8080 já estão em uso ! A idéia era por as aplicações em containers, mas como em geral elas usam portas 80,8080,5432 se já tiver uma aplicação usando não é possível subir outras aplicações em containers no mesmo host.Existe essa possibilidade?

  • Oi @onilsonoliveira:disqus,
    A porta pública no host é única, ou seja, no host você terá apenas uma porta 80, 8080, etc, dentro do container é que pode ter a mesma porta para todos. Uma forma de você expor apenas a 80 ou 8080 e atender a todos é se sua aplicação trabalha com dominio, com isso você poderá mapear via haproxy, nginx, ou qualquer outro proxy, esse roteamento,fazendo com que o dominioxxx acessa na 80 do host que redireciona para porta 8000 do container, e dominioyyy na porta 80 do host que redireciona na porta 9000 do container, etc. Temos alguns exemplo no blog mostrando como trabalhar com proxy.

  • Thiago Oliveira

    Cristiano, seria possível mapear portas ssh de um container já criado ?

  • Oi @disqus_cawkRC7Fou:disqus,
    Depois de criado não, a não ser que você já tenha criado o container com o parâmetro -p. Caso contrário ainda não é possível mudar esse atributo em um container.
    Utilizando o Docker Swarm é possível alterar a porta de um serviço depois de ele estar criado, mas é outro cenário dai.

    Abraço!