Как определить имя изображения, построенного с помощью docker-compose

Я использую docker-compose для создания моей среды разработки. Я хочу создать конкретное изображение, но я не знаю, как установить имя для этого изображения.

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

Когда я выполняю docker-compose, все в порядке, но я получаю случайное имя для нового изображения. = Возможно ли установить имя для изображения сборки?

Ответ 1

Для формата файла версии 2 для докеры вы можете создать и пометить изображение для одной службы, а затем использовать то же самое встроенное изображение для другой службы.

В моем случае я хочу создать эластичный поисковый кластер с двумя узлами, им нужно использовать одно и то же изображение, но настроено для работы по-разному. Я также хочу создать собственный собственный образ elasticsearch из моего собственного файла Docker. Так вот что я сделал (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

Вы можете видеть, что в первом определении службы "es-master" я использую параметр "build" для создания образа из файла Docker в каталоге. /elasticsearch. Я отмечаю изображение с именем "porter/elasticsearch" с опцией "изображение". Затем я ссылаюсь на это построенное изображение в определении службы "es- node" с опцией "изображение", а также "depend_on", чтобы убедиться, что другой контейнер "es-master" построен и запускается первым.

Ответ 2

Вариант 1: указание имени изображения по умолчанию

Название изображения, созданного docker-compose, зависит от имени папки по умолчанию, но вы можете переопределить его с помощью аргумента --project-name:

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

Вариант 2: Указание имени изображения

Как только docker-compose 1.6.0 отсутствует, вы можете указать build: и image:, чтобы иметь явное имя изображения (см. arulraj.NET answer).

Вариант 3. Создание изображения из контейнера

Третий заключается в создании изображения из контейнера:

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

Ответ 3

Как docker-compose 1.6.0:

Теперь вы можете указать как сборку, так и образ, если вы используете новый формат файла. docker-compose build построит изображение и пометит его именем, которое вы указали, а docker-compose pull попытается вытащить его.

Итак, ваш docker-compose.yml будет

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

Чтобы обновить docker-compose

sudo pip install -U docker-compose==1.6.0

Ответ 4

В зависимости от вашего варианта использования вы можете использовать изображение, которое уже создано, и указать его имя в docker-compose.

У нас есть производственный случай, когда наш CI-сервер создает имя Docker с именем. (docker build -t <specific_image_name> .). Как только указанное имя будет указано, наш docker-compose всегда будет создавать определенный образ. Это позволяет использовать несколько различных возможностей:

1- Вы можете гарантировать, что где бы вы ни запускали ваш docker-compose, вы всегда будете использовать последнюю версию этого конкретного изображения.

2- Вы можете указать несколько именованных изображений в вашем файле docker-compose и дать им возможность автоматически подключаться через предыдущий шаг сборки.

Итак, если ваше изображение уже построено, вы можете назвать изображение с помощью docker-compose. Удалите build и укажите 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

Ответ 5

после создания изображения сделайте следующее:

docker tag <image id> mynewtag:version

после этого вы увидите, что ваше изображение больше не будет называться <none>, когда вы идете docker images.