Docker run para Compose
Transforma um comando docker run num ficheiro docker-compose.yml pronto a usar.
A carregar Docker run para Compose… Se nada acontecer, ativa o JavaScript.
A maioria dos projetos começa com uma linha docker run copiada de um README e acaba numa parede de opções que ninguém quer voltar a escrever. Cola esse comando aqui e esta ferramenta reescreve-o como um ficheiro docker-compose.yml, associando cada opção reconhecida à chave correspondente do Compose: -p passa a ports, -v passa a volumes, -e passa a environment, --restart passa a restart, e assim por diante para cerca de setenta opções, incluindo healthchecks, limites de recursos, controladores de registo, capacidades, ulimits e reservas de GPU.
Perguntas frequentes
O meu comando docker run é enviado para algum servidor?
Que opções do docker run são suportadas?
Porque é que o -d não aparece no ficheiro gerado?
Preciso da chave version no topo do ficheiro?
O que acontece aos volumes e às redes com nome?
Posso converter mais do que um contentor de uma vez?
Porque é que os mapeamentos de portas ficam entre aspas?
A ferramenta percebe --mount e healthchecks?
Como corro o ficheiro depois de gerado?
Sobre Docker run para Compose
O conversor lê o comando como a linha de comandos o leria. Continuações de linha com barra invertida, aspas simples e duplas, opções curtas com o valor colado como -p8080:80, opções agrupadas como -itd e a forma --opcao=valor são todas tratadas, por isso podes colar um comando tal como aparece na documentação, sem o limpar primeiro. Cola vários comandos, um por linha ou ligados com &&, e cada um torna-se um serviço no mesmo ficheiro. Os volumes e as redes com nome usados por esses serviços são recolhidos e declarados nas secções volumes e networks de topo, e as portas ficam entre aspas para que um valor como 22:22 não seja lido como um número sexagesimal pelo interpretador de YAML.
As opções que só fazem sentido no momento do arranque não têm lugar num ficheiro Compose, e a ferramenta diz-te isso em vez de as descartar em silêncio: -d é substituído por docker compose up -d, --rm por docker compose down, e opções como --cidfile ou --detach-keys aparecem nas Notas com uma explicação curta. Tudo corre no teu navegador, sem chamadas ao servidor e sem bibliotecas externas, por isso comandos com senhas, nomes de registos privados ou nomes internos de imagens nunca saem da página. Copia o resultado ou descarrega-o como docker-compose.yml e corre docker compose up -d na mesma pasta.
O Compose começou por se chamar Fig
Antes do Docker Compose existiu o Fig, uma pequena ferramenta em Python lançada em 2013 pela Orchard Laboratories. O Fig trouxe a ideia de que uma aplicação com vários contentores devia ser descrita num único ficheiro YAML e arrancada com um só comando, numa altura em que o costume era um script de shell cheio de linhas docker run. A Docker comprou a Orchard em 2014 e o Fig passou a docker-compose no ano seguinte, mantendo o formato do ficheiro quase inalterado.
O formato passou depois por uma década de mudanças. A versão 1 não tinha sequer chaves de topo, a versão 2 acrescentou services, volumes e networks, e a versão 3 foi moldada pelo Docker Swarm, razão pela qual chaves como deploy ainda aparecem em ficheiros que nunca verão um swarm. A numeração terminou com a Compose Specification, que juntou os ramos 2 e 3 e tornou o campo version obsoleto.
A reescrita de Python para Go no Compose V2 mudou também a forma de o invocar: docker-compose com hífen passou a docker compose, um subcomando do CLI do Docker. O binário autónomo antigo chegou ao fim de vida em julho de 2023, por isso se um tutorial ainda te disser para acrescentar version: '3.8' no topo do ficheiro, foi escrito para uma ferramenta que a Docker já não distribui.