Comandos básicos do Docker, parte 2.

Comandos básicos do Docker, parte 2.

Overview

Bem-vindos de volta à nossa jornada pelo universo do Docker! Após explorarmos as diferenças entre imagens e containers e os comandos mais comuns, hoje mergulharemos em funcionalidades um pouco mais avançadas, mas igualmente imprescindíveis. Vamos aprender sobre a execução de imagens com variáveis de ambiente, a arte de ligar um container a outro (uma habilidade crucial quando lidamos com aplicações dependentes como WordPress e MySQL) e a magia de trabalhar com volumes para uma gestão de arquivos mais eficiente e integrada. Sejam iniciantes ou veteranos no Docker, garanto que este guia os ajudará a elevar suas habilidades ao próximo nível. Preparados para adicionar mais ferramentas ao seu arsenal de Docker?

Este post é uma continuação da série sobre Docker. No post anterior, falei sobre a diferença entre imagem e container e mostrei alguns comandos mais comuns. Agora vou continuar ensinando alguns comandos. Começando por mais formas de utilizar o comando run, que é o que usamos para converter uma imagem em um container.

Antes de começar, um lembrete: Se você não quiser instalar as imagens e criar containers no seu PC, utilize o site que recomendei no post anterior: https://labs.play-with-docker.com

Executando uma imagem com uma variável de ambiente

Para este exemplo, vou utilizar a imagem do MySql. Se você não possui-la em sua máquina, basta utilizar o comando que vimos no post passado:

docker pull mysql

Não vou entrar em detalhes sobre o comando acima, mas recomendo consultar o outro post, caso tenha dúvidas.

O comando run, para esta imagem, exige um parâmetro a mais:

docker run --name my_mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql

Acima temos o comando run, conforme já aprendemos, mas com um parametro adicional: -e MYSQL_ROOT_PASSWORD=secret.

A flag -e indica que vamos criar uma variável de ambiente no container e o valor informado indica qual o nome desta variável e qual o valor dela.

Se você quiser adicionar outras variáveis de ambiente, basta repetir o -e <nome>=<valor> quantas vezes precisar.

Ligando um container a outro

Dependendo do caso, precisamos fazer um container conversar com outro. Isso acontece, por exemplo, quando existe uma relação de dependência entre eles.

O WordPress é um destes casos, pois ele depende do mysql. Sendo assim, se você não possuir a imagem do WordPress, utilize o comando:

docker pull wordpress

Agora, vamos utilizar o argumento –link para criar uma instancia da imagem do wordpress, ligando ela ao container do mysql que criamos no passo anterior.

docker run --name my_wordpress --link my_mysql:mysql_wp -p 8080:80 -d wordpress

Ok. Este comando ficou meio grande, mas vamos lá. Grande parte dele já foi explicada no último post.

  • –name mywordpress: nome do container que estamos criando;
  • –link mysql_server:mysql_wp: faz a ligação entre o container que criamos no passo anterior (my_mysql) com o que estamos criando agora. O valor mysql_wp é um nome interno que vai ser utilizado pelo container do WP. Você pode colocar qualquer valor para ele;
  • -p 8080:80: Redireciona requisições da porta 8080 (local) para a porta 80 (container)
  • -d: funciona em background (daemon)
  • wordpress: qual imagem será utilizada como base.

Trabalhando com Volumes

Neste exemplo, vou mostrar como compartilhar pastas entre containers e com a maquina que está como hospedeira para eles. A imagem utilizada será a do busybox, que é uma implementação bem leve do Linux.

Se não possuir esta imagem instalada, utilize o comando:

docker pull busybox

Agora vamos criar um container com esta imagem, compartilhando o conteúdo da pasta c:\temp (maquina local) com a pasta /temp (existirá no container):

docker run --name bb1 -v c:/temp:/my_data -d busybos sleep 5000

Se você está prestando atenção, reparou que surgiram dois parâmetros novos:

  • -v c:/temp:/my_data: cria um volume compartilhado, sendo que o lado esquerdo dos : é o que está na sua maquina (localhost, maquina que está hospedando o docker) e do outro lado, o caminho dentro do container.
  • sleep 5000. Ele indica que o container deve esperar 5000 segundos e depois será desligado. Caso não informe este parâmetro, o busybox não terá o que executar e será encerrado imediatamente.

Agora, se você executar o comando abaixo, terá acesso aos arquivos e toda estrutura do busybox, incluindo o diretório /my_data, que possui o mesmo conteúdo da pasta c:\temp.

docker exec -ti <container_id> sh

Esta é uma pasta compartilhada entre Host (sua maquina) e o container criado, ou seja, quando você acessar o container e criar, modificar e/ou excluir algo nesta pasta, o resultado é refletido na maquina local. Imagine esta pasta como um “drive de rede compartilhado”.

Com uma pequena modificação do comando, você pode criar um volume (ou um “drive compartilhado”) no modo “apenas leitura”.

Veja o comando:

docker run --name bb1 -v c:/temp:/my_data<strong>:ro</strong> -d busybos sleep 5000

A diferença deste comando para o primeiro que passei (no exemplo de criação de volumes) foi o :ro. Este argumento indica que o volume será criado no modo de leitura (read only), ou seja, de dentro do container você não vai conseguir alterar, criar ou excluir arquivos, apenas consulta-los.

Por enquanto é isso. No próximo post da série Docker, (provavelmente) vou falar sobre como trabalhar com Docker de forma remota.

Postagens nesta série