Docker 1.13: CLI aprimorada e suporte compose-file para Swarm Mode e Secrets API

A Docker Inc. acaba de anunciar a versão 1.13 do projeto de código aberto de mesmo nome. A nova versão contempla uma reestruturação significativa da interface de linha de comando (CLI), a introdução de comandos de “limpeza” para recuperar o espaço em disco, e a inclusão de vários recursos “experimentais”, como o squash da camada de imagem e um endpoint em estilo Prometheus para melhorar o login. Juntamente com o lançamento do Docker 1.13, novos lançamentos da toolchain de suporte também estão disponíveis, e incluem o Docker Compose 1.10, o Docker Machine 0.9.0 e o Notary 0.4.3. Todos esses lançamentos estão inclusos nos pacotes de downloads do Docker para Mac e Docker para Windows.

A CLI do Docker foi significativamente reestruturada em torno de objetos de gerenciamento como ‘container’ e ‘image’, embora nesta versão os comandos pre-1.13 também possam ser usados. O blog do Docker declara que os mais de 40 comandos incluídos no Docker 1.12 – como ‘run’, ‘build’ e ‘images’ – desorganizam as páginas de ajuda e dificultam o autocompletar dos comandos. Já o Docker 1.13 reagrupa cada comando para se ajustar a cada objeto lógico com o qual esteja interagindo, assim chamado de objeto de gerenciamento. Por exemplo, o ‘run’ e ‘stop’ dos containers são agora subcomandos do comando de gerenciamento ‘docker container’, e o ‘build’ e ‘history’ das imagens são agora subcomandos do comando ‘docker image’. O “Docker Captain” Arun Gupta postou em seu blog um mapeamento abrangente dos comandos existentes convertidos para os novos comandos de gerenciamento. Exemplos de comandos de gerenciamento podem ser vistos abaixo:

O Docker 1.13 introduz vários comandos de “limpeza”. Por exemplo, o ‘docker system df’ mostrará o espaço em disco usado e o ‘docker system prune’ removerá todos os dados não utilizados (solicitando confirmação ao usuário antes da exclusão). Os dados a serem limpos no system prune incluem todos os containers parados, todos os volumes e redes não usados por pelo menos um container, e todas as imagens pendentes. O system prune também pode ser usado para remover dados específicos. Por exemplo, ‘docker volume prune’ e ‘docker image prune’ miram respectivamente volumes e imagens não utilizados.

O Docker 1.13 também inclui uma flag ‘experimental’ para o daemon Docker que habilita os recursos experimentais incluídos na versão estável do Docker. Essa flag é ativada por padrão no download atual do Docker para Mac e Windows, mas não nos downloads binários standalone. Consequentemente, os desenvolvedores e operadores devem ter o cuidado de se assegurar que tenham compreendido quais recursos estão habilitados em suas configurações de desenvolvimento e produção.

Novos recursos experimentais no Docker 1.13 incluem uma flag ‘docker build’ ‘–squash’ que contempla todas as camadas do sistema de arquivos produzidas em um build e as colapsa em uma única camada. De acordo com o blog do Docker, isso pode simplificar o processo de criação de imagens mínimas de container, mas pode resultar em sobrecarga ligeiramente maior quando as imagens são movidas (porque as camadas colapsadas não podem mais ser compartilhadas entre imagens). O Docker ainda armazena em cache camadas individuais para agilizar os builds subsequentes. O Docker 1.13 também tem suporte para compactar o contexto de build que é enviado da CLI para o daemon usando a flag ‘–compress’. Isso acelerará as compilações feitas em daemons remotos, reduzindo a quantidade de dados enviados.

O Docker 1.13 também adiciona um endpoint experimental no estilo Prometheus com métricas básicas em containers, imagens e outras estatísticas daemon. ‘docker service logs’ é um novo comando experimental que tem por objetivo tornar os serviços de debug muito mais simples. Em vez de ter de localizar os hosts e containers que alimentam um determinado serviço e puxar os logs desses containers, os ‘docker service logs’ extraem logs de todos os containers executando um serviço e os encaminham para o console do operador.

O Docker 1.13 adiciona o suporte Compose-file ao comando ‘docker stack deploy’ para que os serviços possam ser implementados diretamente no cluster Docker Swarm Mode integrado usando um arquivo ‘docker-compose.yml’ diretamente. Esse aprimoramento supera a limitação anterior para o deploy de pilhas do Docker Compose no Docker Swarm Mode por ter que agrupar arquivos Compose em arquivos DAB (Distributed Application Bundles), que não suportam totalmente todas as operações do Docker Compose como montagens de volume. (Note que o Docker Swarm Mode não deve ser confundido com o produto Docker Swarm original, que é compatível com a sintaxe do Docker Compose v2, mas não usa a funcionalidade do Docker Engine Swarm Mode incorporada ao executar containers.)

O Docker Compose 1.10 introduz a versão 3 da sintaxe do Compose, que remove várias propriedades como ‘volume_driver’, ‘volumes_from’ e ‘cpu_shares’ e adiciona a propriedade ‘deploy’. Todas as operações associadas às propriedades removidas ainda estão disponíveis por outras propriedades, e os operadores que migram de versões anteriores do Compose devem consultar o guia de atualização. A propriedade de deploy do serviço permite a especificação de fatores de replicação de containers, políticas de atualização (isto é, de atualizações contínuas), restrições de posicionamento e configuração de recursos (que podem usar a nova limitação simplificada de recursos ‘cpus’ em vez da cpu-quota existente, cpu-shares ou cpuset-cpus). Um exemplo do arquivo ‘docker-compose.yml’ contendo a sintaxe v3 pode ser visto abaixo:

A versão mais recente do Docker Swarm Mode incluída nesta versão adiciona suporte para a nova Secret API no Swarmkit e adiciona comandos para gerenciar secrets em um cluster Swarm Mode. Esta funcionalidade é semelhante ao Kubernetes Secrets, ou o produto de código aberto HashiCorp Vault de plataforma neutra. O Secrets API GitHub issue associado declara que esta funcionalidade está atualmente disponível apenas para Swarm Mode uma vez que o armazenamento de backup é o Swarm e, como tal, é apenas para Linux. Esta versão é a base para o suporte futuro do secret no Docker com melhorias potenciais, tais como suporte ao Windows, diferentes armazenamentos de backup etc.

O Docker secrets só está disponível para serviços Swarm, e não para containers standalone. No entanto, um container pode ser especificado para executar como um serviço dentro do Swarm com uma escala de 1. Para uma explicação completa de como a funcionalidade secret é implementada com suas ressalvas associadas, a documentação deve ser cuidadosamente estudada.

Outras inclusões notáveis na versão 1.13 incluem o anúncio de que o Docker para AWS e o Docker para Azure estão fora do beta público e prontos para produção. O Plugin API gerenciado pelo Docker já não é experimental. No entanto, a API mudou significativamente em comparação com a versão introduzida no Docker 1.12., e os plugins devem ser desinstalados antes de atualizar para o Docker 1.13 usando o comando ‘docker plugin rm’. A instrução ‘MAINTAINER’ do Dockerfile também está sendo desativada e em seu lugar entrará ‘LABEL‘.

Além disso, o Docker 1.13 também inclui atualizações para as tecnologias obrigatórias de controle de acesso ao Linux, incluindo SELinux (Security Enhanced Linux) e AppArmor. No entanto, vários bugs de perfil relativamente alto permanecem abertos, incluindo adicionar suporte para compartilhamento de sockets Unix e o acesso a arquivos em volumes montados ser extremamente lento (embora isso possa ser atenuado com a ferramenta docker-sync).

Informações adicionais sobre a versão 1.13 do Docker podem ser encontradas no Docker Blog, e as notas completas da versão 1.13 podem ser encontradas no repositório GitHub do Docker. Os binários Docker 1.13 e os respectivos pacotes ‘para Mac’ e ‘para Windows’ podem ser baixados diretamente no site do Docker.

Fonte: InfoQ

21