Używam Docker-Compose do tworzenia środowiska programistycznego. Chcę zbudować konkretny obraz, ale nie wiem, jak ustawić nazwę tego obrazu.
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
Kiedy wykonuję docker-compose
wszystko jest w porządku, ale otrzymuję losową nazwę nowego obrazu. Czy można ustawić nazwę obrazu kompilacji?
docker
docker-compose
orchestration
Robert
źródło
źródło
<project>_<service>
, gdzie<service>
w tym przykładzie jest,wildfly
a domyślnym projektem jest nazwa katalogu, w którym się znajdujesz. Możesz to zmienić za pomocą zmiennej środowiskowej-p
lubCOMPOSE_PROJECT_NAME
. Nie ma możliwości ustawienia niestandardowej nazwy obrazu.COMPOSE_PROJECT_NAME=x
w.env
i kontenerów będzie nazwany{x}_{service}_{#}
Odpowiedzi:
W przypadku formatu pliku skomponowanego w wersji dokowanej można zbudować i oznaczyć obraz dla jednej usługi, a następnie użyć tego samego obrazu dla innej usługi.
W moim przypadku chcę skonfigurować elastyczny klaster wyszukiwania z 2 węzłami, oba muszą używać tego samego obrazu, ale skonfigurowane do działania w inny sposób. Chcę także zbudować własny obraz elasticsearch z własnego pliku Docker. Oto co zrobiłem (docker-compose.yml):
Widać, że w pierwszej definicji usługi „es-master” używam opcji „build”, aby zbudować obraz z Dockerfile w ./elasticsearch. Oznaczam obrazek nazwą „porter / elasticsearch” opcją „image”. Następnie odsyłam do tego wbudowanego obrazu w definicji usługi „es-node” z opcją „image”, a także używam parametru „depend_on”, aby upewnić się, że drugi kontener „es-master” jest zbudowany i uruchomiony jako pierwszy.
źródło
container_name:
naprawdę pomogła.build
iimage
wzajemnie się wykluczają. Otrzymuję komunikat „Usługa xxx ma zarówno obraz, jak i ścieżkę kompilacji. Usługa może zostać zbudowana do obrazu lub użyć istniejącego obrazu, a nie obu.”depends_on
używa nazwy usługi wdoker-compose
pliku, nie trzeba określać nazwy kontenera. Nawet przykład pokazuje todepends_on: es-master
i niedepends_on: es_master
Zgodnie z dokerem-komponuj 1.6.0 :
Tak
docker-compose.yml
byś byłAby zaktualizować komponowanie dokera
źródło
Opcja 1: Wskazanie domyślnej nazwy obrazu
Nazwa obrazu wygenerowanego przez docker-compose zależy domyślnie od nazwy folderu, ale można go zastąpić za pomocą
--project-name
argumentu:Opcja 2: Określenie nazwy obrazu
Po wydaniu docker -compose 1.6.0 możesz określić
build:
iimage:
mieć jawną nazwę obrazu (patrz odpowiedź arulraj.net ).Opcja 3: Utwórz obraz z kontenera
Trzecim jest utworzenie obrazu z kontenera:
źródło
--project-name
nie wydaje się już akceptowany. Korzystanie 1.23.2W zależności od przypadku użycia możesz użyć obrazu, który został już utworzony i podać jego nazwę w
docker-compose
.Mamy przypadek użycia produkcyjnego, w którym nasz serwer CI buduje obraz o nazwie Docker. (
docker build -t <specific_image_name> .
). Po określeniu nazwanego obrazu, naszdocker-compose
zawsze opiera się na konkretnym obrazie. Pozwala to na kilka różnych możliwości:1- Możesz zapewnić, że gdziekolwiek uruchomisz
docker-compose
, zawsze będziesz używać najnowszej wersji tego konkretnego obrazu.2- Możesz określić wiele nazwanych obrazów w swoim
docker-compose
pliku i pozwolić, aby były one automatycznie okablowane w poprzednim kroku kompilacji.Tak więc, jeśli twój obraz jest już zbudowany, możesz nazwać go obrazem
docker-compose
. Usuńbuild
i określimage:
źródło
po zbudowaniu obrazu wykonaj następujące czynności:
docker tag <image id> mynewtag:version
potem zobaczysz, że twój obraz nie jest już nazwany,
<none>
kiedy idzieszdocker images
.źródło
docker build -t mytag:version .