我使用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时,一切正常,但我为新映像获得了一个随机名称。是否可以为构建映像设置一个名称?


当前回答

选项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:从容器中创建映像

第三种方法是从容器中创建一个映像:

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

其他回答

如果使用Jenkins,则可以使用stackName = prefix定义project-name。

詹金斯:

stackName = 'foo'

码头工人:

services:
  bar:

所以名字变成了foo_bar。

我是这样做的:

版本:“3.8” 服务: 应用: 构建:。 depends_on: ——postgres 港口: ——“8080:8080” 卷: ——。/:/ usr / src / app / container_name: docker-compose-employees 图片:[Docker-Hub-Username] / docker-compose:最新

docker-compose应用程序运行时使用一个容器名称:docker-compose-employees

还有一个名为[Docker-Hub-Username]/docker-compose:latest的图片

你可以在docker-compose过程中自定义镜像名称来构建和容器名称,你需要在docker-compose中像下面这样提到。yml文件。它将创建一个具有自定义名称的映像和容器。

version: '3'
services:
  frontend_dev:
    stdin_open: true
    environment:
      - CHOKIDAR_USEPOLLING=true
    build:
      context: .
      dockerfile: Dockerfile.dev
    image: "mycustomname/sample:v1"
    container_name: mycustomname_sample_v1
    ports:
      - '3000:3000'
    volumes:
      - /app/node_modules
      - .:/app

根据您的用例,您可以使用已经创建的映像,并在docker-compose中指定它的名称。

我们有一个生产用例,其中CI服务器构建了一个命名的Docker映像。(docker build -t <specific_image_name> .)。一旦指定了命名的映像,我们的docker-compose总是基于特定的映像构建。这提供了几种不同的可能性:

1-你可以确保无论你从哪里运行docker-compose,你将总是使用该特定映像的最新版本。

2-你可以在docker-compose文件中指定多个命名图像,并让它们通过前面的构建步骤自动连接。

所以,如果你的映像已经构建好了,你可以用docker-compose来命名映像。删除构建并指定映像:

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

选项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:从容器中创建映像

第三种方法是从容器中创建一个映像:

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