如何定义使用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
。