webdevqa.jp.net

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

docker-composeを実行すると、すべて問題ありませんが、新しいイメージの名前はランダムになります。ビルドイメージに名前を設定することは可能ですか?

142
Robert

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"では、./elasticsearchのDockerfileからイメージをビルドするために "build"オプションを使用しています。 "porter/elasticsearch"という名前の画像に "image"オプションを付けてタグ付けします。次に、この構築されたイメージを "image"オプションを使用して "es-node"サービス定義で参照し、さらに "depends_on"を使用して他のコンテナー "es-master"が構築されて実行されるようにします。

128
Jason White

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
46
arulraj.net

オプション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:コンテナから画像を作成する

3つ目はコンテナから画像を作成することです。

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

ユースケースに応じて、すでに作成されている画像を使用し、その名前をdocker-composeに指定することができます。

私たちのCIサーバーが名前付きDockerイメージを構築する本番ユースケースがあります。 (docker build -t <specific_image_name> .)指定された画像が指定されると、私たちのdocker-composeは常に特定の画像から構築されます。これにより、2つの異なる可能性があります。

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
17
meoww-

イメージを構築したら、次の手順を実行します。

docker tag <image id> mynewtag:version

その後、<none>に移動すると、あなたの画像はもはやdocker imagesという名前ではなくなります。

5
GHETTO.CHiLD