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