Estoy usando docker-compose para crear mi entorno de desarrollo. Quiero construir una imagen específica, pero no sé cómo establecer un nombre para esa imagen.
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
Cuando ejecuto docker-compose
todo está bien, pero obtengo un nombre aleatorio para la nueva imagen. ¿Es posible establecer un nombre para la imagen de compilación?
docker
docker-compose
orchestration
Robert
fuente
fuente
<project>_<service>
, en donde<service>
en este ejemplo eswildfly
y valores predeterminados del proyecto al nombre del directorio que se encuentre. Puede cambiar eso con-p
oCOMPOSE_PROJECT_NAME
variable de entorno. No hay forma de establecer un nombre de imagen personalizado.COMPOSE_PROJECT_NAME=x
en.env
y sus envases se llamará{x}_{service}_{#}
Respuestas:
Para el formato de archivo docker-compose versión 2, puede compilar y etiquetar una imagen para un servicio y luego usar esa misma imagen compilada para otro servicio.
Para mi caso, quiero configurar un clúster de búsqueda elástico con 2 nodos, ambos necesitan usar la misma imagen, pero configurados para ejecutarse de manera diferente. También quiero construir mi propia imagen elástica de búsqueda personalizada desde mi propio Dockerfile. Entonces esto es lo que hice (docker-compose.yml):
Puede ver que en la primera definición de servicio "es-master", uso la opción "compilar" para compilar una imagen desde el Dockerfile en ./elasticsearch. Etiqueto la imagen con el nombre "porter / elasticsearch" con la opción "image". Luego hago referencia a esta imagen construida en la definición de servicio "es-node" con la opción "imagen", y también uso un "dependen_on" para asegurarme de que el otro contenedor "es-master" esté construido y se ejecute primero.
fuente
container_name:
realmente ayudó.build
yimage
son mutuamente excluyentes. Obtengo "El servicio xxx tiene una imagen y una ruta de compilación especificadas. Un servicio puede crearse en una imagen o utilizar una imagen existente, no ambas".depends_on
usa el nombre del servicio en eldoker-compose
archivo, no es necesario especificar un nombre de contenedor. Incluso el ejemplo lo muestradepends_on: es-master
y nodepends_on: es_master
Según docker-compose 1.6.0 :
Entonces tu
docker-compose.yml
seríaPara actualizar docker-compose
fuente
Opción 1: Sugerencia de nombre de imagen predeterminado
El nombre de la imagen generada por docker-compose depende del nombre de la carpeta de forma predeterminada, pero puede anularlo utilizando el
--project-name
argumento:Opción 2: especificar el nombre de la imagen
Una vez que Docker-compose 1.6.0 está fuera, puede especificar
build:
yimage:
tener un nombre de imagen explícito (consulte la respuesta de arulraj.net ).Opción 3: crear imagen desde el contenedor
Un tercero es crear una imagen desde el contenedor:
fuente
--project-name
ya no parece ser aceptado. Usando 1.23.2Dependiendo de su caso de uso, puede usar una imagen que ya ha sido creada y especificar su nombre en
docker-compose
.Tenemos un caso de uso de producción en el que nuestro servidor CI crea una imagen Docker con nombre. (
docker build -t <specific_image_name> .
) Una vez que se especifica la imagen nombrada, nuestrodocker-compose
siempre se basa en la imagen específica. Esto permite un par de posibilidades diferentes:1- Puede asegurarse de que donde sea que ejecute su
docker-compose
, siempre usarás la última versión de esa imagen específica.2- Puede especificar múltiples imágenes con nombre en su
docker-compose
archivo y dejar que se conecten automáticamente a través del paso de compilación anterior.Entonces, si su imagen ya está construida, puede nombrarla con
docker-compose
. Eliminarbuild
y especificarimage:
fuente
Después de construir su imagen, haga lo siguiente:
docker tag <image id> mynewtag:version
después de eso, verá que su imagen ya no tiene nombre
<none>
cuando vayadocker images
.fuente
docker build -t mytag:version .