如何定义使用docker compose构建的图像的名称
我正在使用创建我的开发环境。我想建立一个特定的图像,但我不知道如何设置该图像的名称如何定义使用docker compose构建的图像的名称,docker,docker-compose,orchestration,Docker,Docker Compose,Orchestration,我正在使用创建我的开发环境。我想建立一个特定的图像,但我不知道如何设置该图像的名称 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=elast
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
时,一切都正常,但我得到了新图像的随机名称。是否可以为生成映像设置名称?生成映像后,请执行以下操作:
docker标签mynewtag:version
之后,当您转到
docker images
时,您将看到您的图像不再命名为
,根据您的使用情况,您可以使用已创建的图像,并在docker compose
中指定其名称
我们有一个生产用例,其中CI服务器构建了一个命名的Docker映像。(docker build-t.
)。一旦指定了命名图像,我们的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 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发布,您可以指定构建:
和图像:
以具有明确的图像名称(请参阅)
选项3:从容器创建图像
第三种方法是从容器中创建图像:
$ docker-compose up -d bar
$ docker commit $(docker-compose ps -q bar) foo_bar
$ docker-compose rm -f bar
对于docker compose版本2文件格式,您可以为一个服务生成并标记一个映像,然后将该映像用于另一个服务 在我的例子中,我想设置一个包含2个节点的elasticsearch集群,它们都需要使用相同的映像,但配置为以不同的方式运行。我还想从我自己的Dockerfile构建我自己的自定义elasticsearch图像。这就是我所做的(
docker compose.yml
):
您可以看到,在第一个服务定义es master
中,我使用build
选项从/elasticsearch
中的Dockerfile构建一个映像。我用名称porter/elasticsearch
和image
选项标记图像。然后,我使用
image
选项在es节点
服务定义中引用此构建的映像,并使用dependens\u on
确保先构建并运行另一个容器es master。根据Docker compose的3.9版本,您可以使用image:myapp:tag
指定名称和标记
版本:“3.9”
服务:
网络应用程序:
建造:
上下文:。
dockerfile:dockerfile
图片:webapp:tag
参考:是否可以使用docker compose指定标记?此时似乎不支持标记。因此我必须生成图像,然后重新标记它?不是很有用,我希望docker compose能很快解决这个问题?如果你正在构建一个多容器环境,是的。如果您正在构建单个容器环境,则始终可以转到docker build-t mytag:version。
如果您使用docker compose来构建映像,映像名称始终将是。
,其中
在本例中是wildfly
,project默认为您所在的目录名。您可以使用-p
或COMPOSE\u PROJECT\u NAME
环境变量来更改该值。无法设置自定义图像名称。是否没有可接受的答案?-关于此主题的正式文档您还可以在.env
中设置COMPOSE\u PROJECT\u NAME=x
,您的容器将被称为{x}{service}}
错误:验证失败,原因:cornsoup同时指定了映像和构建路径。服务可以构建为映像,也可以使用现有映像,但不能同时使用两者。(docker compose 1.6.2)@zx1986为此,您必须使用docker-compose.yml文件的新版本,请根据更新后的我的答案参考此选项容器\u name:
真的很有帮助。您确定这有效吗<代码>构建和图像
是互斥的。我得到“服务xxx同时指定了映像和构建路径。服务可以按照映像构建,也可以使用现有映像,而不是同时使用两者。”哦,没关系。这两种格式可在v2及以后的版本中一起使用。我正在测试的东西没有指定版本,所以我想应该是v1。容器名称:这个选项真的帮助了我thks@BrunoBieridependens\u on
使用doker compose
文件中的服务名称,无需指定容器名称。即使示例显示它依赖于:es master
,而不是依赖于:es\u master
——项目名称似乎不再被接受。使用1.23。2@StevenVachon根据这些文档,--project name
应该可以工作,但是他们的示例使用了-p
:--project name被删除了。您可以使用envCOMPOSE\u PROJECT\u NAME=foo docker COMPOSE up
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