327

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とすべて問題ありませんが、新しいイメージのランダムな名前が付けられます。ビルドイメージに名前を設定することはできますか?

4

9 に答える 9

248

docker-compose バージョン 2 ファイル形式の場合、あるサービスのイメージをビルドしてタグ付けしてから、別のサービスで同じビルド イメージを使用できます。

私の場合、2 つのノードで Elasticsearch クラスターをセットアップしたいと考えています。どちらも同じイメージを使用する必要がありますが、異なる方法で実行するように構成されています。また、独自の 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、Dockerfile からイメージを作成することがわかり./elasticsearchます。オプションで画像に名前をタグ付けporter/elasticsearchimageます。
次に、このビルドされたイメージをes-nodeサービス定義でimageオプションを使用して参照し、adepends_onを使用して、他のコンテナーes-masterが最初にビルドおよび実行されるようにします。

于 2016-02-26T21:35:26.190 に答える
70

オプション 1: デフォルトのイメージ名をヒントにする

docker-composeによって生成されるイメージの名前は、デフォルトではフォルダー名に依存しますが、--project-name引数を使用して上書きできます。

$ docker-compose --project-name foo build bar
$ docker images foo_bar

オプション 2: イメージ名の指定

docker -compose 1.6.0がリリースされたら、明示的なイメージ名を指定build:して指定できます ( arulraj.net の回答を参照)。image:

オプション 3: コンテナーからイメージを作成する

3 つ目は、コンテナーからイメージを作成することです。

$ docker-compose up -d bar
$ docker commit $(docker-compose ps -q bar) foo_bar
$ docker-compose rm -f bar
于 2016-02-02T16:26:54.337 に答える