Я использую 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
все в порядке, но я получаю случайное имя для нового изображения. Можно ли задать имя для образа сборки?
<project>_<service>
, как<service>
в этом примере,wildfly
и в проекте по умолчанию используется имя каталога, в котором вы находитесь. Это можно изменить с помощью переменной среды-p
илиCOMPOSE_PROJECT_NAME
. Нет способа установить собственное имя изображения.COMPOSE_PROJECT_NAME=x
в.env
и ваши контейнеры будут называться{x}_{service}_{#}
Ответы:
Для формата файла docker-compose версии 2 вы можете создать и пометить образ для одного сервиса, а затем использовать этот же встроенный образ для другого сервиса.
В моем случае я хочу настроить упругий поисковый кластер с 2 узлами, оба они должны использовать одно и то же изображение, но настроенные для работы по-разному. Я также хочу создать свой собственный эластичный образ поиска из моего собственного Dockerfile. Вот что я сделал (docker-compose.yml):
Вы можете видеть, что в первом определении сервиса «es-master» я использую опцию «build» для сборки образа из файла Dockerfile в ./elasticsearch. Я помечаю изображение с именем «porter /asticsearch» с опцией «изображение». Затем я ссылаюсь на этот встроенный образ в определении сервиса «es-node» с опцией «image», а также использую «зависящий_он», чтобы убедиться, что другой контейнер «es-master» собран и запущен первым.
источник
container_name:
действительно помог.build
иimage
являются взаимоисключающими. Я получаю: «В Service xxx указан как образ, так и путь сборки. Служба может быть либо создана для образа, либо использовать существующий образ, но не оба».depends_on
использует имя службы вdoker-compose
файле, нет необходимости указывать имя контейнера. Даже пример показывает это,depends_on: es-master
а неdepends_on: es_master
Согласно docker-compose 1.6.0 :
Так что ваш
docker-compose.yml
будетОбновить docker-compose
источник
Вариант 1. Подсказка имени изображения по умолчанию
Имя изображения, сгенерированного docker-compose, по умолчанию зависит от имени папки, но вы можете переопределить его, используя
--project-name
аргумент:Вариант 2. Указание имени изображения
Когда выйдет docker-compose 1.6.0 , вы можете указать
build:
иimage:
иметь явное имя изображения (см . Ответ arulraj.net ).Вариант 3: Создать изображение из контейнера
Третье - создать изображение из контейнера:
источник
--project-name
кажется, больше не принимаются. Использование 1.23.2В зависимости от вашего варианта использования, вы можете использовать изображение, которое уже было создано, и указать его имя в
docker-compose
.У нас есть производственный вариант использования, где наш CI-сервер создает именованный образ Docker. (
docker build -t <specific_image_name> .
). Как только названное изображение указано, нашеdocker-compose
всегда строится из определенного изображения. Это дает несколько разных возможностей:1. Вы можете быть уверены, что где бы вы ни работали
docker-compose
, вы всегда будете использовать самую последнюю версию этого конкретного изображения.2- Вы можете указать несколько именованных изображений в вашем
docker-compose
файле и разрешить их автоматическое подключение через предыдущий шаг сборки.Итак, если ваше изображение уже построено, вы можете назвать его с помощью
docker-compose
. Удалитьbuild
и указатьimage:
источник
после того, как вы создадите свой образ, сделайте следующее:
docker tag <image id> mynewtag:version
после этого вы увидите, что ваше изображение больше не называется,
<none>
когда вы идетеdocker images
.источник
docker build -t mytag:version .