Faire tourner mini-me dans un conteneur
mm dockerinit écrit un Dockerfile et un compose.yaml dans le dossier courant. L'image contient la dernière version publiée de mm et les outils de son outil bash ; compose monte votre projet et lance l'agent avec votre utilisateur, pas en root.
Pour les microVM de Docker plutôt qu'un simple conteneur, voir faire tourner mini-me dans un Docker Sandbox.
Avant de commencer
- Docker avec Compose.
- Un fichier d'agent dans le projet. Si vous n'en avez pas, lancez d'abord
mm init(voir créer un agent). - Un serveur de modèles sur votre machine, joignable depuis le conteneur : voir Joindre le modèle.
Écrire les fichiers
Dans le dossier de votre projet :
mm dockerinit
Le service prend le nom de acp.name dans agent.yaml, ou mm s'il n'y en a pas. Pour le choisir, utilisez mm dockerinit --name bob. La suite de ce guide l'appelle bob.
Si un fichier existe déjà, mm demande Overwrite Dockerfile?, et no est la réponse par défaut. Avec --yes, ou quand l'entrée se termine, rien n'est écrit.
Un projet avec un dossier .mm
Quand l'agent est .mm/agent.yaml (créé avec mm init --project yes, voir ranger les fichiers mini-me d'un projet dans un dossier .mm), mm dockerinit le trouve sans option — il cherche agent.yaml, puis .mm/agent.yaml, comme mm — et nomme le service d'après lui. compose.yaml alors :
- monte
.mm/en lecture seule sur le projet : l'agent ne peut pas modifier ses propres réglages, skills ou hooks ; - remonte en écriture les dossiers où mm écrit — le
sessions.diret letrace.dirdu fichier d'agent, quand ils sont activés et sous.mm/— et les crée tout de suite s'ils n'existent pas (Docker les créerait au nom de root, et l'agent ne tourne jamais en root) ; - lance
mm tuisans fichier : mm trouve.mm/agent.yamldepuis le projet.
volumes:
- .:${PWD:-/workspace}
- ./.mm:${PWD:-/workspace}/.mm:ro
- ./.mm/sessions:${PWD:-/workspace}/.mm/sessions # sessions.dir
Tout ce qui est écrit d'autre sous .mm/ — un hook qui y tient un journal — demande sa propre ligne. Après avoir activé ou coupé les sessions ou la trace, relancez mm dockerinit (répondez yes pour remplacer compose.yaml).
Lancer l'agent
Soit vous gardez un conteneur démarré, qui sert aussi à un éditeur :
docker compose up -d --wait
docker compose exec bob mm tui agent.yaml
Soit vous lancez une session, dans un conteneur qui disparaît avec elle :
docker compose run --rm bob mm tui agent.yaml
Les deux ouvrent le mode fenêtre (mm tui) et peuvent servir en même temps. Le premier lancement construit l'image.
Connecter un éditeur (ACP)
Démarrez le conteneur avec docker compose up -d --wait, puis donnez cette commande à votre éditeur, avec le chemin absolu du projet :
docker exec -i bob-box mm --acp --config /chemin/du/projet/agent.yaml
Le projet est monté au même chemin que sur votre machine : les chemins envoyés par l'éditeur veulent donc dire la même chose dans le conteneur. Pour un projet .mm, docker exec -i bob-box mm --acp suffit : le conteneur démarre dans le projet, où mm trouve .mm/agent.yaml.
Joindre le modèle
Depuis le conteneur, localhost désigne le conteneur. dmr, llmman et ollama se rabattent d'eux-mêmes sur host.docker.internal quand leur adresse par défaut ne répond pas, tant que le fichier d'agent ne définit pas de baseUrl. Le fichier compose fait aussi connaître ce nom sous Linux.
llamacppn'a pas ce repli : définissezbaseUrl: http://host.docker.internal:8080/v1.- Un fichier d'agent avec un
baseUrlsurlocalhostou127.0.0.1: remplacez l'hôte parhost.docker.internal, ou ajoutez unfallback. - Un serveur sous Linux qui n'écoute que sur
127.0.0.1: faites-le écouter sur une adresse joignable par le conteneur.host.docker.internaly désigne la passerelle de l'hôte, pas sa boucle locale.
Passer à la dernière version
docker compose build
docker compose up -d --wait
Docker lit le SHA256SUMS de la release à chaque build : s'il a changé, les étapes qui installent mm sont rejouées.
Construire pour les deux architectures
docker compose construit pour l'architecture de votre machine. Pour publier une image linux/amd64 et linux/arm64 :
docker buildx build --platform linux/amd64,linux/arm64 -t <registry>/mm-bob:latest --push .
Construire pour l'autre architecture demande une émulation (QEMU, inclus dans Docker Desktop). Sans elle, le build s'arrête sur exec format error.
Utiliser les fichiers sur une autre machine
compose.yaml enregistre l'uid et le gid de la machine qui a lancé mm dockerinit, pour que les fichiers créés par l'agent vous appartiennent. Sur une machine où les vôtres diffèrent, définissez-les :
export MM_UID=$(id -u) MM_GID=$(id -g)
Ce que le conteneur protège
L'agent ne tourne pas en root, mais il peut quand même modifier et supprimer tout ce qui se trouve dans le projet monté, et il a accès au réseau. Gardez le projet sous gestion de version, et utilisez yolo: false si vous voulez approuver chaque commande : voir confirmer les appels d'outils.
Toutes les options sont dans la référence CLI.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
|