Estou usando o docker-compose para criar meu ambiente de desenvolvimento. Quero criar uma imagem específica, mas não sei como definir um nome para essa imagem.
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
Quando executo docker-compose
tudo está ok, mas recebo um nome aleatório para a nova imagem. É possível definir um nome para a imagem de compilação?
docker
docker-compose
orchestration
Robert
fonte
fonte
<project>_<service>
, onde<service>
neste exemplo está owildfly
padrão do projeto e o nome do diretório em que você está. Você pode alterar isso com a variável de ambiente-p
ouCOMPOSE_PROJECT_NAME
. Não há como definir um nome de imagem personalizado.COMPOSE_PROJECT_NAME=x
no.env
e seus recipientes será chamado{x}_{service}_{#}
Respostas:
No formato de arquivo docker-compose versão 2, é possível criar e marcar uma imagem para um serviço e, em seguida, usar a mesma imagem criada para outro serviço.
Para o meu caso, quero configurar um cluster de pesquisa elástico com 2 nós, ambos precisam usar a mesma imagem, mas configurados para executar de maneira diferente. Também quero criar minha própria imagem de elasticsearch personalizada a partir do meu próprio Dockerfile. Então foi isso que eu fiz (docker-compose.yml):
Você pode ver que, na primeira definição de serviço "es-master", eu uso a opção "build" para criar uma imagem do Dockerfile em ./elasticsearch. Eu identifico a imagem com o nome "porter / elasticsearch" com a opção "image". Em seguida, faço referência a esta imagem criada na definição de serviço "es-node" com a opção "image" e também uso um "depende_on" para garantir que o outro contêiner "es-master" seja construído e executado primeiro.
fonte
container_name:
realmente ajudou.build
eimage
são mutuamente exclusivos. Recebo "O serviço xxx tem uma imagem e um caminho de construção especificados. Um serviço pode ser criado para criar uma imagem ou usar uma imagem existente, não as duas".depends_on
usa o nome do serviço nodoker-compose
arquivo, não é necessário especificar um nome de contêiner. Até mesmo o exemplo mostra-lodepends_on: es-master
e nãodepends_on: es_master
Conforme o docker-compor 1.6.0 :
Então o seu
docker-compose.yml
seriaPara atualizar o docker-compose
fonte
Opção 1: Sugestão do nome da imagem padrão
O nome da imagem gerada pelo docker-compose depende do nome da pasta por padrão, mas você pode substituí-la usando o
--project-name
argumento:Opção 2: Especificando o nome da imagem
Uma vez estivador-compor 1.6.0 está fora, você pode especificar
build:
eimage:
ter um nome de imagem explícita (ver resposta de arulraj.net ).Opção 3: criar imagem do contêiner
Um terceiro é criar uma imagem do contêiner:
fonte
--project-name
não parece mais ser aceito. Usando 1.23.2Dependendo do seu caso de uso, você pode usar uma imagem que já foi criada e especificar seu nome
docker-compose
.Temos um caso de uso de produção em que nosso servidor de IC cria uma imagem nomeada do Docker. (
docker build -t <specific_image_name> .
) Depois que a imagem nomeada é especificada, nossadocker-compose
sempre criamos a imagem específica. Isso permite algumas possibilidades diferentes:1- Você pode garantir que, onde quer que você execute seu
docker-compose
, sempre estará usando a versão mais recente dessa imagem específica.2- Você pode especificar várias imagens nomeadas em seu
docker-compose
arquivo e permitir que elas sejam conectadas automaticamente na etapa de compilação anterior.Portanto, se sua imagem já estiver construída, você poderá nomear a imagem
docker-compose
. Removabuild
e especifiqueimage:
fonte
depois de criar sua imagem, faça o seguinte:
docker tag <image id> mynewtag:version
depois disso, você verá que sua imagem não será mais chamada
<none>
quando você fordocker images
.fonte
docker build -t mytag:version .