Finch é um cliente de código aberto para desenvolvimento de contêineres. Seu instalador simples fornece um cliente nativo mínimo junto com uma distribuição opinativa de outros componentes de código aberto. Em vez de criar ainda mais opções para raciocinar e escolher, Finch pretende ajudar a promover outros projetos, facilitando sua instalação e uso, ao mesmo tempo que oferece um cliente nativo simples para unir tudo.
Finch fornece um cliente simples integrado ao nerdctl. Para os comandos principais de construção/execução/push/pull, Finch depende do nerdctl para lidar com o trabalho pesado. Ele funciona com containerd para gerenciamento de contêineres e com BuildKit para lidar com construções de imagens da Open Container Initiative (OCI). Esses componentes são todos reunidos e executados em uma máquina virtual gerenciada por Lima.
Com a Finch, você pode aproveitar esses projetos existentes sem se preocupar com todos os detalhes. Basta instalar e começar a executar e construir seus contêineres!
O projeto terá em um futuro próximo um conjunto mais completo de documentação e tutoriais. Por enquanto vamos começar aqui. Conforme mencionado acima, finch
se integra ao nerdctl
. Embora o Finch não implemente 100% dos comandos upstream, os comandos mais comuns estão implementados e funcionando. A Referência de Comando nerdctl pode ser considerada um ponto de partida para documentação.
Para começar a usar o Finch no macOS, os pré-requisitos são:
Baixe um pacote de lançamento para sua arquitetura na página de lançamentos do projeto no GitHub e, uma vez baixado, clique duas vezes e siga as instruções.
brew install --cask finch
Para começar a usar o Finch no Windows, os pré-requisitos são:
wsl --install
)Baixe um instalador MSI na página de lançamentos do projeto no GitHub e, uma vez baixado, clique duas vezes e siga as instruções.
Assim que a instalação for concluída, finch vm init
será necessário uma vez para configurar o sistema subjacente. Essa configuração inicial geralmente leva cerca de um minuto.
finch vm init
INFO[0000] Initializing and starting Finch virtual machine...
..
INFO[0067] Finch virtual machine started successfully
Para começar a usar o Finch no Linux, os pré-requisitos são:
Atualmente, os instaladores do Finch são empacotados e distribuídos no Amazon Linux. Se não estiver usando o Amazon Linux, você pode baixar o binário na página de lançamentos do GitHub e instalar/configurar as dependências, seguindo a convenção no arquivo finch.spec. Instruções detalhadas estão disponíveis em runfinch.com.
Agora você pode executar um contêiner de teste. Se você estiver familiarizado com o desenvolvimento de contêineres, poderá usar o comando run
conforme esperado.
finch run --rm public.ecr.aws/finch/hello-finch
Se você é novo em contêineres, isso é muito emocionante! Experimente o comando acima depois de instalar e inicializar o Finch. O comando run
extrai uma imagem localmente, se ela ainda não estiver presente, e então cria e executa um contêiner para você. Observe que a útil opção --rm
excluirá a instância do contêiner assim que a execução for concluída.
Para construir uma imagem, experimente um exemplo rápido do repositório do cliente Finch.
git clone https://github.com/runfinch/finch.git
cd finch/contrib/hello-finch
finch build . -t hello-finch
..
Novamente, se você é novo em contêineres, acabou de criar uma imagem de contêiner. Legal!
O comando build
funcionará com o sistema de compilação (o BuildKit do Projeto Moby no caso do Finch) para criar uma imagem OCI a partir de um Dockerfile, que é um tipo especial de receita para criar uma imagem. Esta imagem pode então ser usada para criar contêineres. Você pode ver suas imagens extraídas e construídas localmente com o comando finch images
.
O Finch facilita a construção e execução de contêineres em arquiteturas com a opção --platform
. Quando usado com o comando run
, ele criará um contêiner usando a arquitetura especificada. Por exemplo, em um sistema Apple Silicon M1, --platform=amd64
criará um contêiner e executará processos dentro dele usando uma arquitetura x86-64.
uname -ms
Darwin arm64
finch run --rm --platform=amd64 public.ecr.aws/amazonlinux/amazonlinux uname -ms
Linux x86_64
Você também pode usar a opção --platform
com compilações, facilitando a criação de imagens multiplataforma.
Temos planos de criar aqui mais documentação e tutoriais voltados para usuários que são novos em contêineres, bem como algumas dicas e truques para usuários mais avançados. Por enquanto, se você está pronto para chutar os pneus, faça isso! Você encontrará a maioria dos comandos e opções com os quais está familiarizado de outras ferramentas para apresentar, e como seria de esperar (ou conforme documentados no upstream com nerdctl). A maioria dos comandos que usamos todos os dias são abordados, incluindo gerenciamento de volume e rede, bem como suporte ao Compose. Se o Finch não fizer algo que você deseja, considere abrir um problema ou uma solicitação pull.
O instalador instalará o Finch e suas dependências em sua própria área do sistema e poderá coexistir com outras ferramentas de desenvolvimento de contêineres. Finch é um projeto novo e não pretende ser um substituto direto para outras ferramentas. Portanto, não recomendamos usar alias ou vincular outros nomes de comandos a finch
.
Finch possui uma configuração simples e extensível.
Um arquivo de configuração em ${HOME}/.finch/finch.yaml
será gerado na primeira execução. Atualmente, este arquivo de configuração possui opções para limites de recursos do sistema para a máquina virtual subjacente. Esses limites padrão são gerados dinamicamente com base nos recursos disponíveis no sistema host, mas podem ser alterados editando manualmente o arquivo de configuração.
Para obter uma lista completa de opções de configuração, verifique a estrutura finch para macOS.
Um exemplo de finch.yaml
se parece com isto:
# cpus: the amount of vCPU to dedicate to the virtual machine. (required)
cpus : 4
# memory: the amount of memory to dedicate to the virtual machine. (required)
memory : 4GiB
# snapshotters: the snapshotters a user wants to use (the first snapshotter will be set as the default snapshotter)
# Supported Snapshotters List:
# - soci https://github.com/awslabs/soci-snapshotter/tree/main
# Once the option has been set the snapshotters will be installed on either finch vm init or finch vm start.
# The snapshotters binary will be downloaded on the virtual machine and will be configured and ready for use.
# To change your default snpahotter back to overlayfs, simply remove the snapshotters value from finch.yaml or set snapshotters to `overlayfs`
# To completely remove the snapshotters' binaries, shell into your VM and remove /usr/local/bin/{snapshotter binary}
# and remove the snapshotter configuration in the containerd config file found at /etc/containerd/config.toml
snapshotters :
- soci
# creds_helpers: a list of credential helpers that will be installed and configured automatically.
# Supported Credential Helpers List:
# - ecr-login https://github.com/awslabs/amazon-ecr-credential-helper
# Once the option has been set the credential helper will be installed on either finch vm init or finch vm start.
# The binary will be downloaded on the host machine and a config.json will be created and populated inside the ~/.finch/ folder
# if it doesn't already exist. If it already exists, the value of credsStore will be overwritten.
# To opt out of using the credential helper, remove the value from the credsStore parameter of config.json
# and remove the creds_helper value from finch.yaml.
# To completely remove the credential helper, either remove the binary from ~/.finch/creds-helpers or remove the creds-helpers
# folder entirely. (optional)
creds_helpers :
- ecr-login
# additional_directories: the work directories that are not supported by default. In macOS, only home directory is supported by default.
# For example, if you want to mount a directory into a container, and that directory is not under your home directory,
# then you'll need to specify this field to add that directory or any ascendant of it as a work directory. (optional)
additional_directories :
# the path of each additional directory.
- path : /Volumes
# vmType: sets which Hypervisor to use to launch the VM. (optional)
# Only takes effect when a new VM is launched (only on vm init).
# One of: "qemu", "vz".
# - "qemu": Uses QEMU as the Hypervisor.
# - "vz" (default): Uses Virtualization.framework as the Hypervisor.
#
# NOTE: prior to version 1.2.0, "qemu" was the default, and it will still be the default for
# macOS versions that do not support Virtualization.framework (pre-13.0.0).
vmType : " vz "
# rosetta: sets whether to enable Rosetta as the binfmt_misc handler for x86_64
# binaries inside the VM, as an alternative to qemu user mode emulation. (optional)
# Only takes effect when a new VM is launched (only on vm init).
# Only available when using vmType "vz" on Apple Silicon running macOS 13+.
# If true, also sets vmType to "vz".
#
# NOTE: while Rosetta is generally faster than qemu user mode emulation, it causes
# some performance regressions, as noted in this issue:
# https://github.com/lima-vm/lima/issues/1269
rosetta : false
# dockercompat: a configuration parameter to activate finch functionality to accept Docker-like commands and arguments.
# For running DevContainers on Finch, this functionality will convert Docker-like arguments into compatible nerdctl commands and arguments.
dockercompat : true
Um arquivo de configuração em $env:LOCALAPPDATA.finchfinch.yaml
será gerado na primeira execução. Atualmente, este arquivo de configuração não possui opções de limites de recursos do sistema devido a limitações no WSL.
Para obter uma lista completa de opções de configuração, verifique a estrutura finch para Windows.
Um exemplo de finch.yaml
se parece com isto:
# snapshotters: the snapshotters a user wants to use (the first snapshotter will be set as the default snapshotter)
# Supported Snapshotters List:
# - soci https://github.com/awslabs/soci-snapshotter/tree/main
# Once the option has been set the snapshotters will be installed on either finch vm init or finch vm start.
# The snapshotters binary will be downloaded on the virtual machine and will be configured and ready for use.
# To change your default snpahotter back to overlayfs, simply remove the snapshotters value from finch.yaml or set snapshotters to `overlayfs`
# To completely remove the snapshotters' binaries, shell into your VM and remove /usr/local/bin/{snapshotter binary}
# and remove the snapshotter configuration in the containerd config file found at /etc/containerd/config.toml
snapshotters :
- soci
# creds_helpers: a list of credential helpers that will be installed and configured automatically.
# Supported Credential Helpers List:
# - ecr-login https://github.com/awslabs/amazon-ecr-credential-helper
# Once the option has been set the credential helper will be installed on either finch vm init or finch vm start.
# The binary will be downloaded on the host machine and a config.json will be created and populated inside the ~/.finch/ folder
# if it doesn't already exist. If it already exists, the value of credsStore will be overwritten.
# To opt out of using the credential helper, remove the value from the credsStore parameter of config.json
# and remove the creds_helper value from finch.yaml.
# To completely remove the credential helper, either remove the binary from $env:LOCALAPPDATA.finchcreds-helpers or remove the creds-helpers
# folder entirely. (optional)
creds_helpers :
- ecr-login
# sets wsl2 Hypervisor to use to launch the VM. (optional)
vmType : " wsl2 "
# dockercompat: a configuration parameter to activate finch functionality to accept Docker-like commands and arguments.
# For running DevContainers on Finch, this functionality will convert Docker-like arguments into compatible nerdctl commands and arguments.
dockercompat : true
Esta seção contém perguntas frequentes sobre como trabalhar com o Finch.
LIMA_HOME=/Applications/Finch/lima/data /Applications/Finch/lima/bin/limactl shell finch
wsl -d lima-finch
Estamos entusiasmados em iniciar este projeto abertamente e adoraríamos ouvir sua opinião. Se você tiver ideias ou encontrar bugs, abra um problema. Sinta-se à vontade para iniciar uma discussão se tiver algo que gostaria de propor ou debater. Solicitações pull também são bem-vindas! Consulte o documento CONTRIBUTING para obter mais informações sobre contribuições e o caminho para as funções de revisor e mantenedor para os interessados.
À medida que o projeto ganha impulso, os mantenedores começarão a criar marcos e procurarão estabelecer uma cadência regular de lançamento. Com o tempo, também começaremos a criar um roteiro público a partir das ideias e questões da comunidade que surgirem. Já temos algumas ideias, incluindo:
Se quiser bater um papo conosco, encontre-nos no canal #finch
no CNCF slack.