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

Rob*_*ert 172 orchestration docker docker-compose

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

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
Run Code Online (Sandbox Code Playgroud)

当我执行docker-compose一切正常时,我得到一个新图像的随机名称.是否可以为构建映像设置名称?

Jas*_*ite 150

对于docker-compose版本2文件格式,您可以为一个服务构建和标记图像,然后将该相同的构建图像用于另一个服务.

对于我的情况,我想建立一个包含2个节点的弹性搜索集群,它们都需要使用相同的图像,但配置为以不同的方式运行.我还想从我自己的Dockerfile构建自己的自定义elasticsearch图像.所以这就是我所做的(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
Run Code Online (Sandbox Code Playgroud)

您可以在第一个服务定义"es-master"中看到,我使用"build"选项从./elasticsearch中的Dockerfile构建映像.我使用"image"选项标记名为"porter/elasticsearch"的图像.然后,我使用"image"选项在"es-node"服务定义中引用此构建的映像,并使用"depends_on"确保构建并运行其他容器"es-master".

  • 选项`container_name:`确实有帮助. (41认同)
  • 哦,没关系.这两个可以在v2格式中一起使用.我测试的东西没有指定版本所以我猜假设是v1. (3认同)
  • 选项container_name:真的帮助了我 (3认同)
  • 您确定这可行吗?“ build”和“ image”是互斥的。我得到“服务xxx同时指定了映像和构建路径。可以构建服务以映像或使用现有映像,不能同时使用两者。” (2认同)
  • @BrunoBieri`depends_on`使用`doker-compose`文件中的服务名称,无需指定容器名称。即使在示例中也显示为`depends_on:es-master`而不是`depends_on:es_master` (2认同)

aru*_*net 54

根据docker-compose 1.6.0:

如果您使用的是新文件格式,现在可以指定构建和图像键.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
Run Code Online (Sandbox Code Playgroud)

更新docker-compose

sudo pip install -U docker-compose==1.6.0
Run Code Online (Sandbox Code Playgroud)


Wer*_*ght 47

选项1:提示默认图像名称

docker-compose生成的图像名称默认取决于文件夹名称,但您可以使用--project-name参数覆盖它:

$ docker-compose --project-name foo build bar
$ docker images foo_bar
Run Code Online (Sandbox Code Playgroud)

选项2:指定图像名称

一旦docker-compose 1.6.0结束,您可以指定build:image:拥有一个明确的图像名称(请参阅arulraj.net的答案).

选项3:从容器创建图像

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

$ docker-compose up -d bar
$ docker commit $(docker-compose ps -q bar) foo_bar
$ docker-compose rm -f bar
Run Code Online (Sandbox Code Playgroud)

  • `--project-name` 似乎不再被接受。使用 1.23.2 (3认同)
  • --项目名称已删除。您可以使用 env ```COMPOSE_PROJECT_NAME=foo docker-compose up``` (2认同)

meo*_*ww- 19

根据您的使用情况,您可以使用已创建的图像并在其中指定其名称docker-compose.

我们有一个生产用例,我们的CI服务器构建一个名为Docker的映像.(docker build -t <specific_image_name> .).一旦指定了指定的图像,我们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
Run Code Online (Sandbox Code Playgroud)


Tar*_*han 16

根据 Docker compose 3.9 版本,您可以使用image: myapp:tag来指定名称和标签。

version: "3.9"
services:
  webapp:
    build:
      context: .
      dockerfile: Dockerfile
    image: webapp:tag
Run Code Online (Sandbox Code Playgroud)

参考:https : //docs.docker.com/compose/compose-file/compose-file-v3/


GHE*_*iLD 8

构建映像后,请执行以下操作:

docker tag <image id> mynewtag:version

之后,你会看到你的形象不再命名<none>,当你去docker images

  • 可以使用docker-compose指定标签吗? (2认同)
  • 所以我必须构建图像然后重新标记它?不是很有用,希望 docker-compose 快点解决这个问题? (2认同)