docker-composeでビルドされたイメージの名前を定義するにはどうすればよいですか


203

私が使用しているドッキングウィンドウ-コンを私の開発環境を作成します。特定のイメージを作成したいのですが、そのイメージの名前を設定する方法がわかりません。

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


17
docker-composeを使用してイメージをビルドしている場合、イメージ名は常にになります<project>_<service><service>この例ではwildfly、プロジェクトのデフォルトは現在のディレクトリ名です。-pまたはのCOMPOSE_PROJECT_NAME環境変数で変更できます。カスタムイメージ名を設定する方法はありません。
ドネフィン2015

1
受け入れられる答えはありませんか?
AmanicA 2016年

docs.docker.com/docker-cloud/apps/service-links-この主題に関する公式ドキュメント
Ivan Aracki

2
あなたも設定することができますCOMPOSE_PROJECT_NAME=x.envし、あなたのコンテナが呼び出されます{x}_{service}_{#}
eMPee584

回答:


181

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

私の場合、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からイメージをビルドしていることがわかります。「イメージ」オプションで「porter / elasticsearch」という名前のイメージにタグを付けます。次に、このビルドされたイメージを「image」オプションを使用して「es-node」サービス定義で参照し、「depends_on」を使用して、他のコンテナ「es-master」がビルドされて最初に実行されることを確認します。


55
オプションはcontainer_name:本当に役に立ちました。
Bruno Bieri 2016年

2
これで問題ありませんか?buildそして、image相互に排他的です。「サービスxxxには、イメージとビルドパスの両方が指定されています。サービスは、イメージにビルドするか、既存のイメージを使用することができます。両方ではありません。」
Burhan Ali

3
ああ気にしません。これら2つは、v2形式以降で一緒に使用できます。私がテストしていたものはバージョンを指定しなかったので、v1であると想定されていたと思います。
Burhan Ali

3
オプションのcontainer_name:本当に私を助けてくれました
lanni654321

2
@BrunoBieriはdepends_ondoker-composeファイル内のサービスの名前を使用します。コンテナー名を指定する必要はありません。例でもそれdepends_on: es-masterを示していますが、それは示していませんdepends_on: es_master
blueFast

65

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

1
エラー:検証に失敗しました。理由:cornsoupにイメージとビルドパスの両方が指定されています。サービスは、イメージ用に構築することも、既存のイメージを使用することもできます。両方ではありません。(
docker

@ zx1986あなたがこの参照してくださいドッキングウィンドウ-compose.ymlファイルの新しいバージョンを使用する必要があることについてdocs.docker.com/compose/compose-file/#upgradingをその更新私の答えに基づいて
arulraj.net

50

オプション1:デフォルトの画像名をヒンティングする

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

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

オプション2:画像名の指定

一度ドッキングウィンドウ-コン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

1
--project-nameもう受け入れられていないようです。1.23.2を使用
Steven Vachon

21

ユースケースに応じて、すでに作成されている画像を使用して、名前を指定できます。 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

10

イメージをビルドしたら、次の手順を実行します。

docker tag <image id> mynewtag:version

その後、あなたは<none>あなたが行くときにあなたのイメージがもはや名前を付けられていないのを見るでしょうdocker images


3
docker-composeでタグを指定することはできますか?
ロバート

現在、タグはサポートされていないようです。
GHETTO.CHiLD 2015

1
それで、イメージをビルドして後でタグを付け直す必要がありますか?本当に役に立たないので、docker-composeでこの問題をすぐに修正してください。
ロバート

1
マルチコンテナ環境を構築している場合は、はい。単一のコンテナー環境を構築している場合は、いつでもアクセスできますdocker build -t mytag:version .
GHETTO.CHiLD
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.