Как определить имя образа, созданного с помощью 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 все в порядке, но я получаю случайное имя для нового изображения. Можно ли задать имя для образа сборки?

12 ответов

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

В моем случае я хочу настроить упругий поисковый кластер с 2 узлами, оба они должны использовать одно и то же изображение, но настроенные для работы по-разному. Я также хочу создать свой собственный эластичный образ поиска из моего собственного Dockerfile. Вот что я сделал (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" для сборки образа из файла Dockerfile в./elasticsearch. Я помечаю изображение с именем "porter /asticsearch" с опцией "изображение". Затем я ссылаюсь на этот встроенный образ в определении сервиса "es-node" с параметром "image", а также использую "зависящий_он", чтобы убедиться, что другой контейнер "es-master" собран и запущен первым.

Согласно 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

Вариант 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).

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

Третье - создать изображение из контейнера:

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

Согласно версии 3.9 Docker compose вы можете использовать image: myapp:tag указать имя и тег.

      version: "3.9"
services:
  webapp:
    build:
      context: .
      dockerfile: Dockerfile
    image: webapp:tag

Ссылка: https://docs.docker.com/compose/compose-file/compose-file-v3/

В зависимости от вашего варианта использования, вы можете использовать изображение, которое уже было создано, и указать его имя в 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

После того, как вы создадите свой образ, сделайте следующее:

docker tag <image id> mynewtag:version

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

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

      version: '3'
services:
  frontend_dev:
    stdin_open: true
    environment:
      - CHOKIDAR_USEPOLLING=true
    build:
      context: .
      dockerfile: Dockerfile.dev
    image: "mycustomname/sample:v1"
    container_name: mycustomname_sample_v1
    ports:
      - '3000:3000'
    volumes:
      - /app/node_modules
      - .:/app

в docker-compose.yml добавьтеimage: "YOUR-DESIRED-NAME"строка в вашей службе, например, если ваше имя службыwildflyи вы хотите назвать свое изображение какwildfly_img

       wildfly:
  image: wildfly_img

sudo docker-compose -p <имя_проекта> build

назначает название проекта

Примечание: параметр '-p' ставится перед 'build' в команде

Ссылка: https://docs.docker.com/compose/reference/

Я сделал это:

       version: '3.8'
services:
  app:
    build: .
    depends_on:
      - postgres
    ports:
      - "8080:8080"
    volumes:
      - ./:/usr/src/app/
    container_name: docker-compose-employees
    image: [Docker-Hub-Username]/docker-compose:latest

Приложение docker-compose запускается с именем контейнера: docker-compose-employees

И изображение под названием [Docker-Hub-Username]/docker-compose:latest

Если вы укажете образ, а также сборку, то Compose назовет построенный образ веб-приложением и необязательным тегом, указанным в изображении:

      image: webapp:tag

в файле docker-compose это выглядит так.

      version: '3.9'
services:
  
  node-ecom:
    build: .
    image: "webapp:tag"
    container_name: node-ecom
    ports:
      - "4000:3000"
    volumes:
      - ./:/app:ro
      - /app/node_modules
      - /config/.env
    env_file:
      - ./config/.env

Если используется Jenkins, имя проекта можно определить с помощью stackName = prefix.

Дженкинс:

      stackName = 'foo'

докер:

      services:
  bar:

Так имя становится foo_bar.

Другие вопросы по тегам