Português (Brasil)

Ferramentas de desenvolvedor · Docker executado para conversor de composição do Docker

Como os sinalizadores de execução do docker são mapeados para chaves do Compose: -p, -v, -e, --name e mais

· Como funciona

janela de encaixe compor fluxo de trabalho do desenvolvedor

Mapeamento de opções de comando de execução do Docker para portas, volumes e chaves de ambiente no Compose
Ilustração vetorial original ToolAcre

A maioria dos sinalizadores de execução do docker tem um equivalente Compose um para um, e alguns não têm nenhum. Esta postagem percorre o mapeamento para que uma definição de serviço convertida seja lida conforme o esperado.

Uma execução do docker que envolve três linhas no README — funciona, ninguém pode revisá-lo e a equipe quer um compose.yaml

Uma execução do docker multilinha pode iniciar um serviço hoje enquanto oculta seu contrato operacional em um alias de shell ou README. Um arquivo Compose move as mesmas opções para uma definição de serviço revisável, mas a conversão deve levar em conta cada sinalizador, em vez de eliminar silenciosamente as configurações de segurança. ToolAcre analisa o comando como texto: ele nunca executa a imagem, abre um soquete Docker ou implanta um contêiner. Trate a saída como um rascunho de configuração que ainda precisa de um operador para verificar caminhos de host, credenciais e suposições de rede.

A forma de um serviço — imagem, depois um conjunto de chaves que espelham os sinalizadores, em serviços: e um nome de serviço

Compose YAML começa em serviços:, seguido por um nome de serviço e imagem:. Ao contrário de uma linha de comando, suas chaves agrupam valores repetidos, como portas e entradas de ambiente, em sequências. ToolAcre deriva um nome de serviço de --name ou da imagem e constrói um modelo antes de serializar YAML. Os arquivos atuais do Compose não precisam de uma versão de nível superior: key; adicionando um porque uma postagem de blog mais antiga mostrou que isso criaria um aviso obsoleto em vez de melhorar a compatibilidade.

Os sinalizadores comuns - -p para portas, -v para volumes, -e para ambiente, --name para container_name, --restart para reiniciar, --network para redes

Mapeamentos comuns tornam o arquivo reconhecível: -p 8080:80 torna-se portas: com um mapeamento entre aspas, -v host:container torna-se uma entrada de volumes, -e KEY=valor vai para o ambiente, --name torna-se container_name, --restart é reiniciado e --network precisa de contexto de rede. Citar o mapeamento da porta é importante porque YAML deve tratá-lo como uma string, e não interpretar a pontuação como outro tipo. Um volume nomeado pode exigir sua própria declaração de volumes de nível superior; uma montagem de ligação de host deve ser verificada na máquina onde o Compose será executado.

Os sinalizadores menos comuns — --hostname, --user, --workdir, --entrypoint, --cap-add, --device, --label, --add-host e suas chaves

Sinalizadores como --hostname, --user, --workdir, --entrypoint, --cap-add, --device, --label e --add-host têm conceitos de serviço correspondentes, mas sua semântica pode depender do tempo de execução e do host. Uma --security-opt não suportada não deve ser inventada como uma chave de aparência plausível ou descartada de forma invisível. ToolAcre lista avisos nomeando opções não suportadas para que um revisor possa concluir o mapeamento manualmente ou decidir que o Compose não é o substituto certo. A presença de uma chave YAML não prova que o serviço inicia com os mesmos privilégios.

Argumentos posicionais — a imagem se torna imagem: e qualquer coisa depois dela se torna comando:

O nome da imagem é um argumento posicional após a execução e suas opções. Os argumentos após a imagem tornam-se o comando de serviço, não mais sinalizadores de execução do Docker; mover um token através desse limite altera o programa que o recebe. Aspas e barras invertidas do shell também são importantes ao dividir um exemplo README em tokens. O analisador de ToolAcre não é um interpretador de shell, portanto, uma variável como $HOME deve ser revisada no contexto, em vez de assumir que ela se expande como faria no shell interativo original.

Exemplo resolvido: convertendo uma execução do docker Postgres - o comando completo, a definição de serviço resultante e uma comparação linha por linha

Considere o comando ilustrativo docker run -d --name demo-db -p 5432:5432 -v pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=demo-only --restart a menos que seja interrompido postgres:16. ToolAcre emite services.demo-db com imagem postgres:16, container_name demo-db, uma porta 5432:5432 entre aspas, um volume pgdata, uma entrada de lista de ambiente, reinicialização: a menos que seja interrompido e uma declaração de volume pgdata de nível superior. Avisa que -d é uma opção de linha de comando; docker compose up -d cuida disso. “somente demonstração” é um espaço reservado para ensino deliberadamente inseguro – nunca comprometa uma senha de banco de dados real neste YAML gerado.

O que isso não cobre - sinalizadores sem equivalente de serviço (-d, --rm) e coisas que não estão no comando, como contextos de construção

Nem todo sinalizador de execução possui uma contraparte de propriedade de serviço durável. -d é tratado pelo comando de composição que você invoca; --rm pertence a uma execução única de composição, em vez de um serviço de longa execução. Um contexto de construção, armazenamento secreto, estratégia de saúde ou dependência multisserviço ausente do comando original não pode ser inferido. A ferramenta relata sinalizadores não suportados em vez de fingir que sua saída é um plano de implantação completo. Leia a referência do serviço Docker Compose antes de implantar um contêiner privilegiado ou sensível à rede.

Conclusão: Compose tem a mesma configuração, estruturada – e o conversor produz a definição de serviço a partir do comando que você cola

Compose é a mesma configuração, estruturada para revisão e repetibilidade. Docker run to Docker compose converter fornece uma definição de serviço candidato em seu navegador e mantém o comando colado local; ele não executa o Docker. Compare cada sinalizador de origem com sua chave YAML, resolva avisos e remova segredos de blocos de ambiente simples antes de aplicar o resultado a um host real.