私は開発環境を作成するために 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
を実行すると、すべて問題ありませんが、新しいイメージの名前はランダムになります。ビルドイメージに名前を設定することは可能ですか?
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"が構築されて実行されるようにします。
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
docker-composeによって生成される画像の名前は、デフォルトではフォルダ名に依存しますが、--project-name
引数を使用して上書きすることができます。
$ docker-compose --project-name foo build bar
$ docker images foo_bar
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
ユースケースに応じて、すでに作成されている画像を使用し、その名前を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
イメージを構築したら、次の手順を実行します。
docker tag <image id> mynewtag:version
その後、<none>
に移動すると、あなたの画像はもはやdocker images
という名前ではなくなります。