如何定义使用docker-compose构build的图像的名称

我使用docker-compose来创build我的开发环境。 我想构build一个特定的图像,但我不知道如何为该图像设置一个名称。

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一切正常,但我得到一个新的图像的随机名称。 =是否可以为构build图像设置一个名称?

对于docker-compose版本2文件格式,您可以为一个服务构build和标记图像,然后将该相同的内置图像用于其他服务。

对于我的情况,我想build立一个有2个节点的弹性search集群,它们都需要使用相同的图像,但configuration为运行不同。 我也想从我自己的Dockerfile构build我自己的自定义弹性search图像。 所以这就是我所做的(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”选项从./elasticsearch中的Dockerfile构build一个映像。 我使用“image”选项标记名为“porter / elasticsearch”的图像。 然后使用“image”选项在“es-node”服务定义中引用此构build映像,并使用“depends_on”来确保另一个容器“es-master”是先构build并运行的。

选项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的答案 )。

选项3:从容器创build图像

第三个是从容器中创build一个图像:

 $ docker-compose up -d bar $ docker commit $(docker-compose ps -q bar) foo_bar $ docker-compose rm -f bar 

按照docker-compose 1.6.0 :

如果使用新的文件格式,现在可以指定构build和图像键。 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 

根据您的使用情况,您可以使用已创build的图像,并在docker-compose指定它的名称。

我们有一个生产用例,我们的CI服务器构build一个名为Docker的镜像。 ( docker build -t <specific_image_name> . )。 一旦指定了指定的图像,我们的docker-compose总是从特定的图像构build而成。 这允许有几种不同的可能性:

1-您可以确保从哪里运行docker-compose ,您将始终使用该特定映像的最新版本。

2-你可以在你的docker-compose文件中指定多个命名的图像,并通过之前的构build步骤自动连线。

所以,如果你的图像已经build好了,你可以用docker-compose命名图像。 删除生成并指定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 

在您构build图像之后,请执行以下操作:

docker tag <image id> mynewtag:version

之后你会看到你的图像不再被命名为<none>当你去docker images

Interesting Posts