Como Usar Apple Container: Alternativa Open Source ao Docker em Swift

Mark Ponomarev

Mark Ponomarev

10 junho 2025

Como Usar Apple Container: Alternativa Open Source ao Docker em Swift

Containers se tornaram uma ferramenta indispensável. Eles oferecem portabilidade, consistência e eficiência, permitindo que desenvolvedores construam e implementem aplicações de forma confiável em diferentes ambientes. Por anos, o Docker tem sido o padrão de-facto no macOS, mas um novo desafiante, nascido diretamente da Apple, está pronto para oferecer uma experiência mais nativa, integrada e simplificada para desenvolvedores em Apple Silicon: container.

container é uma nova ferramenta de código aberto da Apple que permite criar e executar containers Linux padrão, compatíveis com OCI, no seu Mac. Escrito inteiramente em Swift e otimizado para Apple Silicon, ele foi projetado para ser uma alternativa leve e de alto desempenho a outros runtimes de containers. Ele aproveita as próprias tecnologias de virtualização do macOS para executar containers como máquinas virtuais mínimas e isoladas, prometendo melhor segurança e uma pegada menor.

Este artigo oferece um mergulho profundo no projeto container da Apple. Exploraremos sua arquitetura, seus principais benefícios e, em seguida, percorreremos um tutorial abrangente sobre como construir, executar e compartilhar sua primeira aplicação conteinerizada. Seja você um desenvolvedor backend experiente ou um usuário curioso de Mac, encontrará tudo o que precisa para começar com esta nova e empolgante ferramenta.

💡
Quer uma ótima ferramenta de Teste de API que gera documentação de API bonita?

Quer uma plataforma integrada e Tudo-em-Um para sua Equipe de Desenvolvimento trabalhar em conjunto com produtividade máxima?

Apidog entrega todas as suas demandas, e substitui o Postman por um preço muito mais acessível!
botão

Por Que Uma Nova Ferramenta de Container? A Visão por Trás do container

Em um cenário dominado por players estabelecidos, por que a Apple decidiu construir sua própria ferramenta de container? A resposta reside em uma visão para uma experiência profundamente integrada, performática e amigável para desenvolvedores em seu próprio hardware e software. container não é apenas mais um clone do Docker; é uma re-imaginação do que a conteinerização pode ser em um Mac.

Performance Nativa em Apple Silicon

Ao contrário de outras soluções que podem depender de máquinas virtuais Linux mais pesadas ou camadas de compatibilidade multiplataforma, o container é construído do zero para Apple Silicon. É uma aplicação Swift que se comunica diretamente com o Virtualization.framework nativo da Apple. Isso resulta em uma vantagem de performance significativa. Não há camada de emulação como o Rosetta 2 envolvida para o próprio runtime, e cada container roda em sua própria VM leve, inicializando em uma fração do tempo que leva para lançar uma máquina virtual completa.

Uma Arquitetura Unicamente Segura

Segurança é um pilar fundamental do design do container. A visão geral técnica revela uma decisão arquitetural chave: em vez de executar todos os containers dentro de uma única VM Linux compartilhada, o container lança uma micro-VM dedicada e mínima para cada container.

Este modelo de "uma VM por container" oferece isolamento robusto no nível de hardware. Um processo que escapasse de seu container se encontraria dentro de uma VM altamente restrita e de propósito único, e não em um ambiente compartilhado com acesso a outros containers. Isso reduz significativamente a superfície de ataque potencial e aprimora a postura geral de segurança do seu ambiente de desenvolvimento.

Conformidade com OCI: Jogando Bem com Outros

Apesar de sua arquitetura única, o container abraça totalmente os padrões abertos. Ele consome e produz imagens compatíveis com a Open Container Initiative (OCI). Este é um recurso crítico, pois significa que você não está preso a um ecossistema proprietário. Você pode puxar uma imagem padrão do Docker Hub, executá-la com container, construir uma nova imagem e enviá-la de volta para qualquer registro compatível com OCI, como o GitHub Container Registry (ghcr.io). Suas imagens construídas com container funcionarão perfeitamente em outras ferramentas e em pipelines de CI/CD de produção.

Integração Profunda com macOS

O container é um bom cidadão no macOS. Ele se integra com tecnologias centrais do sistema para fornecer uma experiência de usuário fluida:

Por Baixo do Capô: Um Mergulho Técnico Rápido

A ferramenta de linha de comando container (container) é um cliente que se comunica com um processo de servidor em segundo plano, o container-apiserver. Este servidor, que você inicia com container system start, gerencia tudo.

Quando você emite um comando como container run, o servidor API lança um helper de runtime dedicado (container-runtime-linux) para aquele container específico. Este helper, por sua vez, usa o Virtualization.framework para iniciar uma nova VM Linux mínima que hospeda os processos do seu container. Esta arquitetura é elegante, robusta e projetada para segurança e performance.

É importante notar que, como um projeto novo, o container tem algumas limitações. Ele requer uma versão moderna do macOS (macOS 15, com melhor performance na versão mais recente macOS 26 Beta 1). A rede entre containers e o host possui algumas soluções específicas, e recursos avançados como memory ballooning ainda estão em desenvolvimento. No entanto, a base é sólida e o projeto está evoluindo rapidamente.

Como Usar o container: Um Tutorial Passo a Passo

Vamos colocar as mãos na massa. Este tutorial irá guiá-lo por todo o ciclo de vida de um container: construindo uma imagem para um servidor web simples, executando-o, interagindo com ele e publicando-o.

Passo 1: Instalação e Configuração

Primeiro, certifique-se de atender aos requisitos: um Mac com Apple Silicon rodando uma versão recente do macOS.

Instalar o container: Baixe o pacote instalador assinado mais recente na página de releases do projeto no GitHub. Dê um duplo clique no arquivo .pkg e siga as instruções de instalação.

Iniciar o Serviço: Abra seu terminal e inicie os serviços de sistema do container.

container system start

Na primeira vez que você executar isso, ele provavelmente solicitará que você baixe e instale um kernel Linux padrão. Digite y e pressione Enter para prosseguir.

Verificar a Instalação: Verifique se o serviço está rodando listando todos os containers disponíveis (que não devem ser nenhum neste momento).

container ls -a
# Você deve ver cabeçalhos vazios:
# ID IMAGEM OS ARQUITETURA ESTADO ENDEREÇO

Passo 2: Construindo Sua Primeira Imagem

Agora, vamos criar uma imagem de container para um servidor web Python simples.

Criar um Diretório de Projeto:

mkdir web-test
cd web-test

Criar um Dockerfile: Dentro do diretório web-test, crie um arquivo chamado Dockerfile (ou Containerfile) com o seguinte conteúdo. Este arquivo define a "receita" para nossa imagem.

# Start from a lightweight Python base image
FROM docker.io/python:alpine

# Set the working directory inside the container
WORKDIR /content

# Add the 'curl' utility for testing
RUN apk add curl

# Create a simple HTML file
RUN echo '<!DOCTYPE html><html><head><title>Hello from Container</title></head><body><h1>Hello, Apple Container!</h1></body></html>' > index.html

# The command to run when the container starts
CMD ["python3", "-m", "http.server", "80", "--bind", "0.0.0.0"]

Construir a Imagem: Agora, diga ao container para construir uma imagem a partir do seu Dockerfile. Vamos marcá-la (tag) com o nome web-test.

container build --tag web-test --file Dockerfile .

O . no final diz ao construtor para usar o diretório atual como seu contexto.

Listar Suas Imagens: Após a conclusão da construção, você pode ver sua nova imagem no armazenamento local de imagens.

container images list
# Você deve ver sua `web-test` imagem e a imagem base `python:alpine`.
# NOME TAG DIGEST
# python    alpine  b4d299311845...
# web-test  latest  25b99501f174...

Passo 3: Executando Seu Container

Com nossa imagem construída, vamos executá-la.

Executar o Servidor Web: Use o comando container run para iniciar um container a partir da sua imagem web-test.

container run --name my-web-server --detach --rm web-test

Vamos detalhar essas flags:

Verificar o Container em Execução: Liste os containers ativos.

container ls

Você verá seu container my-web-server no estado running, juntamente com seu endereço IP atribuído na coluna ADDR (por exemplo, 192.168.64.3).

Acessar Seu Servidor Web: Abra um navegador web e navegue até o endereço IP mostrado no passo anterior. Você deverá ver sua mensagem "Hello, Apple Container!".

# Substitua o IP pelo que apareceu em `container ls`
open <http://192.168.64.3>

Passo 4: Interagindo com o Container

O container fornece ferramentas poderosas para interagir com seus containers em execução.

Executar um Comando: Você pode executar comandos diretamente dentro do container usando container exec. Vamos listar os arquivos no diretório de conteúdo do nosso servidor web.

container exec my-web-server ls /content
# Saída: index.html

Abrir um Shell Interativo: Para depurações mais complexas, você pode obter um shell interativo dentro do container.

container exec -it my-web-server sh

As flags -it (--interactive e --tty) são cruciais para conectar seu terminal ao shell dentro do container. Você será levado a um prompt de shell dentro do WORKDIR do seu container. Você pode olhar ao redor, verificar processos e então digitar exit para retornar ao terminal do seu Mac.

Passo 5: Publicando Sua Imagem

Compartilhar seu trabalho é fácil. Vamos enviar nossa imagem para um registro de containers. Este exemplo usa o Docker Hub, mas qualquer registro OCI funcionará. (Isso assume que você tem uma conta no Docker Hub com o nome de usuário fido).

Fazer Login no Registro:

# Isso solicitará seu nome de usuário e senha/token
container registry login docker.io

Marcar a Imagem para Publicação: Registros exigem que as imagens sejam nomeadas no formato registro/nome_de_usuario/imagem:tag. Vamos criar uma nova tag para nossa imagem.

container images tag web-test docker.io/fido/web-test:latest

Enviar a Imagem:

container images push docker.io/fido/web-test:latest

Sua imagem agora está disponível para outros puxarem e executarem, em qualquer plataforma compatível com OCI!

Passo 6: Limpando

Quando terminar, você pode parar o container e desligar o serviço.

# Parar o container
container stop my-web-server

# Parar todos os serviços do container
container system stop

Além do Básico

O tutorial cobre o fluxo de trabalho principal, mas o container pode fazer mais. Aqui estão alguns recursos da documentação how-to.md:

Gerenciamento de Recursos: Você pode controlar os recursos alocados para seus containers. Para construções que consomem muita memória, você pode dar mais RAM e CPUs ao builder:

container builder start --cpus 8 --memory 16g

Compartilhamento de Arquivos: Você pode montar um diretório do seu Mac dentro do container usando a flag -volume, o que é essencial para fluxos de trabalho de desenvolvimento onde você deseja editar código no host e ver as mudanças ao vivo no container.

container run --volume ${HOME}/my-project:/app my-image

Construções Multiplataforma: Você pode construir imagens que rodam tanto em arquiteturas Apple Silicon (arm64) quanto Intel (amd64) em um único comando, perfeito para implementar em ambientes de servidor diversos.

container build --arch arm64 --arch amd64 --tag my-multi-arch-image .

Inspeção Avançada: O comando container inspect fornece informações detalhadas em JSON sobre containers e imagens, o que é útil para scripting e automação.

Conclusão

O container da Apple é mais do que apenas uma nova ferramenta; é uma declaração. Ele sinaliza um compromisso em fornecer ferramentas de desenvolvedor de primeira classe e integradas para a era moderna do desenvolvimento cloud-native. Ao construir um runtime de container leve, seguro e performático diretamente no OS, a Apple está diminuindo a barreira de entrada para a conteinerização no Mac e oferecendo uma alternativa atraente às soluções existentes.

Embora o projeto ainda seja jovem, sua base é sólida, sua arquitetura é robusta e sua aderência a padrões abertos garante que ele será um player valioso no ecossistema de containers mais amplo. Se você é um desenvolvedor em um Mac com Apple Silicon, o container é um projeto que você deve estar observando—e experimentando—hoje.

💡
Quer uma ótima ferramenta de Teste de API que gera documentação de API bonita?

Quer uma plataforma integrada e Tudo-em-Um para sua Equipe de Desenvolvimento trabalhar em conjunto com produtividade máxima?

Apidog entrega todas as suas demandas, e substitui o Postman por um preço muito mais acessível!
botão

Pratique o design de API no Apidog

Descubra uma forma mais fácil de construir e usar APIs