tag run name hub compose commands docker docker-compose orchestration

run - ¿Cómo defino el nombre de la imagen construida con docker-compose?



docker run image (5)

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?


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 usando el argumento --project-name :

$ docker-compose --project-name foo build bar $ docker images foo_bar

Opción 2: especificar el nombre de la imagen

Una vez que Docker-compose 1.6.0 está fuera, puede especificar build: e image: para 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:

$ docker-compose up -d bar $ docker commit $(docker-compose ps -q bar) foo_bar $ docker-compose rm -f bar


Dependiendo 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, nuestro docker-compose siempre se basa en la imagen específica. Esto permite un par de posibilidades diferentes:

1- Puedes asegurarte de que desde donde docker-compose tu docker-compose , siempre usarás la última versión de esa imagen específica.

2- Puede especificar varias imágenes con nombre en su archivo docker-compose y dejar que se cableen automáticamente a través del paso de compilación anterior.

Entonces, si su imagen ya está construida, puede nombrarla con docker-compose . Eliminar build y especificar image:

wildfly: image: my_custom_wildfly_image 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


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 se llama <none> cuando vaya a las docker images .


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 de búsqueda elástica personalizada desde mi propio Dockerfile. Entonces esto es lo que hice (docker-compose.yml):

version: ''2'' services: es-master: build: ./elasticsearch image: porter/elasticsearch ports: - "9200:9200" container_name: es_master es-node: image: porter/elasticsearch depends_on: - es-master ports: - "9200" command: elasticsearch --discovery.zen.ping.unicast.hosts=es_master

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 del 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 ejecutado primero.


Según docker-compose 1.6.0 :

Ahora puede especificar una clave de compilación y una imagen si está utilizando el nuevo formato de archivo. docker-compose build construirá la imagen y la etiquetará con el nombre que ha especificado, mientras que docker-compose pull intentará extraerla.

Entonces su docker-compose.yml sería

version: ''2'' services: wildfly: build: /path/to/dir/Dockerfile image: wildfly_server ports: - 9990:9990 - 80:8080

Para actualizar docker-compose

sudo pip install -U docker-compose==1.6.0