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

时间:2015-08-26 15:21:33

标签: docker docker-compose orchestration

我正在使用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

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

7 个答案:

答案 0 :(得分:130)

对于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

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

答案 1 :(得分:46)

根据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

更新docker-compose

sudo pip install -U docker-compose==1.6.0

答案 2 :(得分:45)

选项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's answer)。< / p>

选项3:从容器

创建图像

第三种是从容器中创建图像:

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

答案 3 :(得分:18)

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

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

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

2-您可以在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

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
 {
    View v = inflater.inflate(R.layout.whatever, container, false);
    View testview= (View) v.findViewById(R.id.id);
    return v;
 }

答案 4 :(得分:14)

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

version: "3.9"
services:
  webapp:
    build:
      context: .
      dockerfile: Dockerfile
    image: webapp:tag

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

答案 5 :(得分:5)

构建图像后

执行以下操作:

docker tag <image id> mynewtag:version

之后,当您<none>时,您会看到自己的图片不再被命名为docker images

答案 6 :(得分:0)

sudo docker-compose -p build

指定项目名称

注意:'-p' 选项位于命令中的 'build' 之前

参考:https://docs.docker.com/compose/reference/