Utiliser Docker Compose avec les artefacts OCI
Docker Compose prend en charge le travail avec les artefacts OCI, vous permettant d'empaqueter et de distribuer vos applications Compose à travers les registres de conteneurs. Cela signifie que vous pouvez stocker vos fichiers Compose aux côtés de vos images de conteneurs, facilitant le versioning, le partage et le déploiement de vos applications multi-conteneurs.
Publier votre application Compose comme artefact OCI
Pour distribuer votre application Compose comme artefact OCI, vous pouvez utiliser la commande docker compose publish
, pour la publier vers un registre conforme OCI.
Cela permet à d'autres de déployer votre application directement depuis le registre.
La fonction de publication prend en charge la plupart des capacités de composition de Compose, comme les remplacements, extends ou include, avec certaines limitations.
Étapes générales
-
Naviguez vers le répertoire de votre application Compose.
Assurez-vous d'être dans le répertoire contenant votre fichiercompose.yml
ou que vous spécifiez votre fichier Compose avec le flag-f
. -
Dans votre terminal, connectez-vous à votre compte Docker pour être authentifié avec Docker Hub.
$ docker login
-
Utilisez la commande
docker compose publish
pour pousser votre application comme artefact OCI :$ docker compose publish username/my-compose-app:latest
Si vous avez plusieurs fichiers Compose, exécutez :
$ docker compose -f compose-base.yml -f compose-production.yml publish username/my-compose-app:latest
Options de publication avancées
Lors de la publication, vous pouvez passer des options supplémentaires :
--oci-version
: Spécifier la version OCI (par défaut déterminée automatiquement).--resolve-image-digests
: Épingler les tags d'image aux digests.--with-env
: Inclure les variables d'environnement dans l'artefact OCI publié.
Compose vérifie pour s'assurer qu'il n'y a pas de données sensibles dans votre configuration et affiche vos variables d'environnement pour confirmer que vous voulez les publier.
...
vous êtes sur le point de publier des données sensibles dans votre artefact OCI.
veuillez vérifier que vous ne divulguez pas de données sensibles
ID Client AWS
"services.serviceA.environment.AWS_ACCESS_KEY_ID": xxxxxxxxxx
Clé Secrète AWS
"services.serviceA.environment.AWS_SECRET_ACCESS_KEY": aws"xxxx/xxxx+xxxx+"
Authentification Github
"GITHUB_TOKEN": ghp_xxxxxxxxxx
JSON Web Token
"": xxxxxxx.xxxxxxxx.xxxxxxxx
Clé Privée
"": -----BEGIN DSA PRIVATE KEY-----
xxxxx
-----END DSA PRIVATE KEY-----
Êtes-vous d'accord pour publier ces données sensibles ? [y/N]:y
vous êtes sur le point de publier des variables d'environnement dans votre artefact OCI.
veuillez vérifier que vous ne divulguez pas de données sensibles
Service/Config serviceA
FOO=bar
Service/Config serviceB
FOO=bar
QUIX=
BAR=baz
Êtes-vous d'accord pour publier ces variables d'environnement ? [y/N]:
Si vous refusez, le processus de publication s'arrête sans envoyer quoi que ce soit vers le registre.
Limitations
Il y a des limitations à la publication d'applications Compose comme artefacts OCI. Vous ne pouvez pas publier une configuration Compose :
- Avec des service(s) contenant des bind mounts
- Avec des service(s) contenant seulement une section
build
- Qui inclut des fichiers locaux avec l'attribut
include
. Pour publier avec succès, assurez-vous que tous les fichiers locaux inclus sont également publiés. Vous pouvez ensuite utiliserinclude
pour référencer ces fichiers car l'include
distant est supporté.
Démarrer une application artefact OCI
Pour démarrer une application Docker Compose qui utilise un artefact OCI, vous pouvez utiliser le flag -f
(ou --file
) suivi de la référence d'artefact OCI. Cela vous permet de spécifier un fichier Compose stocké comme artefact OCI dans un registre.
Le préfixe oci://
indique que le fichier Compose doit être tiré d'un registre conforme OCI plutôt que chargé depuis le système de fichiers local.
$ docker compose -f oci://docker.io/username/my-compose-app:latest up
Pour ensuite exécuter l'application Compose, utilisez la commande docker compose up
avec le flag -f
pointant vers votre artefact OCI :
$ docker compose -f oci://docker.io/username/my-compose-app:latest up
Dépannage
Quand vous exécutez une application depuis un artefact OCI, Compose peut afficher des messages d'avertissement qui nécessitent que vous confirmiez ce qui suit afin de limiter le risque d'exécuter une application malveillante :
- Une liste des variables d'interpolation utilisées avec leurs valeurs
- Une liste de toutes les variables d'environnement utilisées par l'application
- Si votre application artefact OCI utilise d'autres ressources distantes, par exemple via
include
.
$ REGISTRY=myregistry.com docker compose -f oci://docker.io/username/my-compose-app:latest up
Variables trouvées dans la configuration :
VARIABLE VALEUR SOURCE REQUIS DÉFAUT
REGISTRY myregistry.com ligne-commande oui
TAG v1.0 environnement non latest
DOCKERFILE Dockerfile défaut non Dockerfile
API_KEY <non défini> aucune non
Voulez-vous continuer avec ces variables ? [Y/n]:y
Attention : Ce projet Compose inclut des fichiers de sources distantes :
- oci://registry.example.com/stack:latest
Les includes distants pourraient potentiellement être malveillants. Assurez-vous de faire confiance à la source.
Voulez-vous continuer ? [y/N]:
Si vous acceptez de démarrer l'application, Compose affiche le répertoire où toutes les ressources de l'artefact OCI ont été téléchargées :
...
Voulez-vous continuer ? [y/N]: y
Votre pile compose "oci://registry.example.com/stack:latest" est stockée dans "~/Library/Caches/docker-compose/964e715660d6f6c3b384e05e7338613795f7dcd3613890cfa57e3540353b9d6d"
La commande docker compose publish
prend en charge l'exécution non interactive, vous permettant d'ignorer l'invite de confirmation en incluant le flag -y
(ou --yes
) :
$ docker compose publish -y username/my-compose-app:latest