J'utilise docker-compose pour créer mon environnement de développement. Je veux créer une image spécifique, mais je ne sais pas comment définir un nom pour cette image.
wildfly:
build: /path/to/dir/Dockerfile
container_name: wildfly_server
ports:
- 9990:9990
- 80:8080
environment:
- MYSQL_HOST=mysql_server
- MONGO_HOST=mongo_server
- ELASTIC_HOST=elasticsearch_server
volumes:
- /Volumes/CaseSensitive/development/wildfly/deployments/:/opt/jboss/wildfly/standalone/deployments/
links:
- mysql:mysql_server
- mongo:mongo_server
- elasticsearch:elasticsearch_server
Quand j'exécute docker-compose
tout va bien, mais j'obtiens un nom aléatoire pour la nouvelle image. Est-il possible de donner un nom à l'image de construction?
<project>_<service>
, où<service>
dans cet exemple estwildfly
et le projet par défaut le nom du répertoire dans lequel vous vous trouvez. Vous pouvez changer cela avec-p
ouCOMPOSE_PROJECT_NAME
variable d'environnement. Il n'y a aucun moyen de définir un nom d'image personnalisé.COMPOSE_PROJECT_NAME=x
dans.env
vos conteneurs seront appelés{x}_{service}_{#}
Réponses:
Pour le format de fichier Docker-compose version 2, vous pouvez créer et baliser une image pour un service, puis utiliser cette même image construite pour un autre service.
Pour mon cas, je veux mettre en place un cluster de recherche élastique avec 2 nœuds, ils ont tous deux besoin d'utiliser la même image, mais configuré pour fonctionner différemment. Je veux également créer ma propre image elasticsearch personnalisée à partir de mon propre Dockerfile. Voici donc ce que j'ai fait (docker-compose.yml):
Vous pouvez voir que dans la première définition de service "es-master", j'utilise l'option "build" pour construire une image à partir du Dockerfile dans ./elasticsearch. Je marque l'image avec le nom "porter / elasticsearch" avec l'option "image". Je référence ensuite cette image construite dans la définition de service "es-node" avec l'option "image", et j'utilise également un "depend_on" pour m'assurer que l'autre conteneur "es-master" est construit et exécuté en premier.
la source
container_name:
vraiment aidé.build
etimage
s'excluent mutuellement. J'obtiens "Le service xxx a à la fois une image et un chemin de génération spécifiés. Un service peut être construit pour l'image ou utiliser une image existante, pas les deux."depends_on
utilise le nom du service dans ledoker-compose
fichier, pas besoin de spécifier un nom de conteneur. Même l'exemple le montredepends_on: es-master
et nondepends_on: es_master
Selon docker-compose 1.6.0 :
Donc tu
docker-compose.yml
seraisPour mettre à jour docker-compose
la source
Option 1: indication du nom d'image par défaut
Le nom de l'image générée par docker-compose dépend du nom du dossier par défaut mais vous pouvez le remplacer en utilisant l'
--project-name
argument:Option 2: spécification du nom de l'image
Une fois que docker-compose 1.6.0 est sorti, vous pouvez spécifier
build:
etimage:
avoir un nom d'image explicite (voir la réponse de arulraj.net ).Option 3: créer une image à partir du conteneur
Une troisième consiste à créer une image à partir du conteneur:
la source
--project-name
ne semble plus être accepté. Utilisation de 1.23.2Selon votre cas d'utilisation, vous pouvez utiliser une image déjà créée et spécifier son nom dans
docker-compose
.Nous avons un cas d'utilisation de production où notre serveur CI construit une image Docker nommée. (
docker build -t <specific_image_name> .
). Une fois que l'image nommée est spécifiée, notredocker-compose
s'appuie toujours sur l'image spécifique. Cela permet plusieurs possibilités:1- Vous pouvez vous assurer que partout où vous exécutez votre
docker-compose
, vous utiliserez toujours la dernière version de cette image spécifique.2- Vous pouvez spécifier plusieurs images nommées dans votre
docker-compose
fichier et les laisser être câblées automatiquement à l'étape de construction précédente.Donc, si votre image est déjà construite, vous pouvez nommer l'image avec
docker-compose
. Supprimerbuild
et spécifierimage:
la source
après avoir créé votre image, procédez comme suit:
docker tag <image id> mynewtag:version
après cela, vous verrez que votre image n'est plus nommée
<none>
lorsque vous allezdocker images
.la source
docker build -t mytag:version .